XL pour MAC Test couleur (mise en forme conditionnelle) cellules non adjacentes (VBA)

Rolu

XLDnaute Nouveau
Bonjour

Je suis novice en VBA et malgrès toutes mes recherche je sèche un peu, c'est pourquoi je vous demande un petit coup de main.

Je cherche à faire un test sur la couleur (mise en forme conditionnelle)de plusieurs cellules non adjacentes.

J'ai écris cela mais apparement cela ne fonctionne pas :
If [d4,e4,f4,g4,j4,k4,l4,m4,p4,q4,r4,s4,u4,v4,w4,x4,z4,aa4,ab4,ac4].Interior.ColorIndex = 4 Then End

Ai-je fais une erreur de syntaxe ?

Si quelqu'un a un idée je suis preneur.

Par avance merci
 
Solution
Re,
If [AG4].Interior.ColorIndex = 3 Then End
Cela fonctionne.
Non, cela ne marche pas. Vous lisez la couleur de la cellule et non la couleur de la MFC.

Regardez cette PJ.
La plage a comme couleur Jaune ( colorindex=6 ) et la MFC met en bleu les cellules qui contiennent 1.
Vous verrez qu'avec la macro ci dessous, toutes les couleurs de la plage valent 6, et la MFC n'est pas prise en compte.
VB:
Sub couleur()
    Dim L%
    For L = 5 To 13
        Range("D" & L) = Range("C" & L).Interior.ColorIndex
    Next L
End Sub

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Rolu et bienvenu sur XLD,
Outre cette syntaxe qui n'est pas correcte, il n'est pas possible de détecter une MFC avec interior.color.
La MFC vient en supplément de la couleur de la cellule, "par dessus" et non à la place.
Deux solutions :
- La détection des MFC, vous trouverez des ex sur XLD, mais ce sont des usines à gaz
- Recreer les conditions des MFC en VBA.
Si les conditions des MFC son simples alors la seconde solution l'est tout autant.
 

Phil69970

XLDnaute Barbatruc
Bonjour @Rolu

Edit : Bonjour Sylvain

Petit rappel comment fonctionne d'une manière générale

If .... then

Si ma conditioni alors ==> If ma condition then
Je fais ceci ==> Blablabla.... (ma condition est vrai)
Fin de ma condition ==> End if

Après on peut compliquer .....

Si ma condition alors ==> If ma condition then
Je fais ceci ==> Blablabla.... (ma condition est vrai)
Ma condition est fausse ==> Else
Je fais plutot cela ==> Autre blablabla...... (ma condition est fausse)
Fin de ma condition ==> End if

@Phil69970
 
Dernière édition:

Rolu

XLDnaute Nouveau
Bonjour Rolu et bienvenu sur XLD,
Outre cette syntaxe qui n'est pas correcte, il n'est pas possible de détecter une MFC avec interior.color.
La MFC vient en supplément de la couleur de la cellule, "par dessus" et non à la place.
Deux solutions :
- La détection des MFC, vous trouverez des ex sur XLD, mais ce sont des usines à gaz
- Recreer les conditions des MFC en VBA.
Si les conditions des MFC son simples alors la seconde solution l'est tout autant.
Bonjour Sylvanu

Merci de ta réponse.

Par contre tu me dis qu'il n'est pas possible de détecter une MFC or quand je fais le test sur une seule cellule avec le code qui suit :
If [AG4].Interior.ColorIndex = 3 Then End

Cela fonctionne.

Mon souci est la syntaxe pour déclarer plusieurs cellule non adjacentes (cela n'est peut-être pas possible ?)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
If [AG4].Interior.ColorIndex = 3 Then End
Cela fonctionne.
Non, cela ne marche pas. Vous lisez la couleur de la cellule et non la couleur de la MFC.

Regardez cette PJ.
La plage a comme couleur Jaune ( colorindex=6 ) et la MFC met en bleu les cellules qui contiennent 1.
Vous verrez qu'avec la macro ci dessous, toutes les couleurs de la plage valent 6, et la MFC n'est pas prise en compte.
VB:
Sub couleur()
    Dim L%
    For L = 5 To 13
        Range("D" & L) = Range("C" & L).Interior.ColorIndex
    Next L
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    15.2 KB · Affichages: 6

Rolu

XLDnaute Nouveau
Re,

Non, cela ne marche pas. Vous lisez la couleur de la cellule et non la couleur de la MFC.

Regardez cette PJ.
La plage a comme couleur Jaune ( colorindex=6 ) et la MFC met en bleu les cellules qui contiennent 1.
Vous verrez qu'avec la macro ci dessous, toutes les couleurs de la plage valent 6, et la MFC n'est pas prise en compte.
VB:
Sub couleur()
    Dim L%
    For L = 5 To 13
        Range("D" & L) = Range("C" & L).Interior.ColorIndex
    Next L
End Sub
Autant pour moi effectivement je testais la couleur de la cellule et non de la MFC

Encore merci, il va falloir que je trouve une autre solution
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Ca, je ne connaissais pas. Mais sur mon PC cela génère systématiquement une erreur.
Quelle version VBA avez vous ? on l'obtient ici :
1646129059755.png

Moi, je suis en 6.3. peut être est ce dû à cela.
Pouvez vous tester ma PJ ?
Moi, la colonne D est vide car il génère une erreur sur cette instruction. Merci.
 

Pièces jointes

  • Classeur1 (6).xlsm
    14.9 KB · Affichages: 4

Discussions similaires

Réponses
12
Affichages
158