Bonjour
La syntaxe de la fonction DECALER est DECALER (cellule ou plage ; nbre de lignes du décalage;nbre de colonnes du décalage;nbre de lignes retournées;nbre de colonnes retournées). Les 3 paramètres en gras sont obligatoires.
Par ex DECALER(C5;;5) va donc renvoyer H5 (pas de changement de ligne, 5 colonnes vers la droite).
DECALER(C5;2; ; ) donnera C7 (pas de changement de colonne, 2 lignes plus bas).
On utilise dans C5 la formule NB.SI(DECALER(C5;;-MIN(COLONNE();20)+1;;MIN(COLONNE();20));"D"). Ici, quand on "est" dans une cellule sur la ligne 5, par ex F5, on veut savoir si une des cellules qui la précèdent sur cette ligne contient la lettre D, ce qui peut être obtenu avec un NB.SI(plage;"D").
Reste plus qu'à trouver comment calculer automatiquement cette plage A5:F5, à gauche de F5, sur la ligne 5 (pas de changement de ligne, et un décalage négative pour aller vers la gauche, vers la colonne A).
Comme on utilise C5 et pas $C5, ou C$5, ou $C$5, en F5, la formule dans la MFC donne :
NB.SI(DECALER(F5;;-MIN(COLONNE();20)+1;;MIN(COLONNE();20));"D")
COLONNE() = 6, donc on a
NB.SI(DECALER(F5;;-MIN(6;20)+1;;MIN(6;20));"D")= NB.SI(DECALER(F5;;-6+1;;6);"D")= NB.SI(DECALER(F5;;-5;;6);"D") = NB.SI(A5:F5;"D") = 1
Pour Excel, 1 (ou 2, ou 3...) dans une condition, équivaut à VRAI, 0 à FAUX.
On utilise MIN(COLONNE();20) car on ne peut pas commencer une plage à gauche de la colonne A (ce que donnerait DECALER(F5;;-19;;20) (il ni a pas de colonne à gauche de la colonne A), ni prendre une plage trop longue vers la droite (ce que donnerait DECALER(F5;;-19;;20) (Si la lettre D est à droite de F5, par ex dans G5, elle ne doit pas être prise en compte).
Il y a plein de petits détails à expliquer, mais, bon, j'espère que cela te suffira. Pour voir ce que donne cette formule, colle là dans C5, puis Formule --> Evaluation de formule...
@ plus
PS : Ce qui signifie d'ailleurs que si tu mets un D dans les colonnes A ou B, tu auras du orange dans les 19 ou 20 cellules suivantes vers la droite. Pour être plus précis, dans mon fichier exemple, il aurait fallu faire avec NB.SI(DECALER(C5;;-MIN(COLONNE();20)+3;;MIN(COLONNE();20)-2);"D")