1

Salut!
J'ai un soucis avec une formule Excel qui gère la mise en forme conditionnelle d'une cellule.
Si j'écris
=NON(ESTVIDE(INDIRECT(ADRESSE(LIGNE(); COLONNE()))))
Excel le digère correctement.
Par contre, si je place ça dans un SI, il renvoie toujours vrai.
Ex :
=SI(VRAI; NON(ESTVIDE(INDIRECT(ADRESSE(LIGNE(); COLONNE())))); VRAI)

Des idées ?

2

avant de te répondre pourrais tu me dire ce que signifie les fonctions LIGNE() et COLONNE() ?

puis me dire aussi la signification des paramètres de la fonction SI().

3

En effet ta deuxième version donne un résultat inattendu, mais par curiosité pourquoi est-ce que tu fais aussi compliqué ?

Dans ton premier cas, un simple "NON(ESTVIDE(A1))" aura le même effet (en remplaçant A1 par la cellule en haut à gauche de la plage concernée ; Excel adapte automatiquement la formule pour les autres cellules). Dans le second cas, peut-être que ça pourrait aider si tu nous donnais le résultat que tu cherches réellement à avoir, j'imagine que tu ne comptes pas laisser une formule qui commence par "SI(VRAI...".
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

En fait c'est pour une formule plus compliquée.
Le but c'est de colorer en rouge une valeur qui n'est pas dans un tableau.
Une valeur n'est pas dans un tableau si sa case contient quelque chose et que son colonne correspond à un titre du tableau
et que sa ligne correspond à une entrée du tableau.

Je dois pouvoir faire comme tu dis en référençant la case active pour la première condition, mais je suis pas sur que le reste va fonctionner.
Ma formule générale est :
=SI(OU(LIGNE()<14;COLONNE()<4); FAUX; 
      ET( NON(ESTVIDE(INDIRECT(ADRESSE(LIGNE() ; COLONNE())))) ; 
         OU( ESTVIDE(INDIRECT(ADRESSE(8;COLONNE()))); ESTVIDE(INDIRECT(ADRESSE(LIGNE();2))))))

5

Lol, ce serait déjà plus simple si je définissais la formule que sur la bonne plage :-)

6

J'ai simplifié la formule, ça donne ça :
= ET( NON(ESTVIDE(D14)); OU( ESTVIDE(INDIRECT(ADRESSE(8;COLONNE()))); ESTVIDE(INDIRECT(ADRESSE(LIGNE();2)))))
Mais ça ne fonctionne pas.

7

squalyl (./2) :

avant de te répondre pourrais tu me dire ce que signifie les fonctions LIGNE() et COLONNE() ?
puis me dire aussi la signification des paramètres de la fonction SI().

SI(cond, val si vrai, val si faux)
LIGNE : ligne courante
COLONNE : colonne courante exprimée sous la forme d'un nombre (je crois)

8

Attention, Excel est réputé pour poser des problèmes en fonction de la langue, les mots clés sont spécifiques à chaque langue
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

9

Le fichier sur lequel je travaille est là :
https://www.assembla.com/code/generateur-releves-notes/subversion/nodes/trunk/releves-de-notes.xlsm?_format=raw&rev=5
Le problème c'est la mise en forme conditionnelle "rouge et italique" qui vérifie que les valeurs rentrées sont bien dans le tableau...

10

Soit je n'ai pas compris ce que tu cherches à faire, soit tu t'embêtes pour rien.
Excel gère le décalage dans les formules pour toi.

Il te suffit de créer ta régle dans une cellule, par exemple la D14 et de mettre la formule
= ET( NON(ESTVIDE(D14)); OU( ESTVIDE(D$8); ESTVIDE($B14)))
Puis de copier la mise en forme et l'étendre à toute ta zone.

Le $ indique que la ligne/colonne ne doit pas varier lors des recopies.

Idem pour toutes autres formules.

11

Parfait !!
Ca résout mon problème !

12

pas grave, moi j'aurai appris INDIRECT() pour l'occasion grin