XL 2016 3 couleurs différentes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Nain porte quoi

XLDnaute Occasionnel
Bonjour à tous,

je cherche à résoudre un problème (en VBA) qui est certainement très basique mais mon neurone ne trouve rien en cette période de confinement.
J'ai un fichier avec un certain nombre de cellule (ici 8 pour l'exemple), les 3 premières cellules doivent avoir comme couleur de fond du blanc (ou pas de couleur), ça ça va, les 2 suivantes ont une couleur de fond que je ne suis pas sensé connaitre à l'avance, mais différente de la première, et les 3 suivantes une autre couleur, donc différente des 2 premières, que je ne connais pas non plus.

La question est : comment je peux savoir en VBA que les cellules A1:A3 sont en blanc (ça ça va), les 2 suivantes sont d'une couleur différente de la première mais identiques entre elles, et les 3 dernières encore différentes des 2 premières mais identiques sur ces 3 là.

Cerise sur le gâteau, les couleurs des polices doivent être différentes des couleurs de fond (pas de police rouge sur fond rouge par exemple)

Le fichier d'exemple devrait être plus clair

Merci à ceux qui prendront le temps d'utiliser leur(s) neurone(s) 🙂
 

Pièces jointes

Solution
bon
VB:
Private Type gr
    address As String
    couleur As Long
End Type


Sub test()
    Dim groupe() As gr, p As Range, C&, I&, tXt$
    Set plage = Range("A1:A20")
    C = 0
    For Each cel In plage.Cells
        If cel.Interior.Color <> C Then
            I = I + 1: ReDim Preserve groupe(1 To I)
            groupe(I).couleur = cel.Interior.Color
            groupe(I).address = cel.address
            C = cel.Interior.Color
        Else
            groupe(I).address = Union(Range(groupe(I).address), cel).address
        End If
    Next


    'lecture du compte rendu dans un message
    tXt = "il y a " & UBound(groupe) & " groupe(s)" & vbCrLf
    For I = 1 To UBound(groupe)
        tXt = tXt & vbCrLf & "groupe " & I & "  " &...
vite fait comme ca un dico
VB:
Sub test()
Dim groupe
Set groupe = CreateObject("scripting.dictionary")
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
  groupe(Cells(i, 1).Interior.Color) = groupe(Cells(i, 1).Interior.Color) & Cells(i, 1).Address(0, 0) & IIf(i < Cells(Rows.Count, 1).End(xlUp).Row - 1, ",", "")

Next
For Each elem In groupe
MsgBox "pour la couleur " & elem & " c'est la plage " & groupe(elem)
Next
End Sub
Merci... mais... ça permet de savoir quelle couleur est affectée à quel groupe, mais pas si les couleurs sont différentes.
Dans l'exemple si je met toutes les cellules avec la même couleur ça me donne un seul groupe et si les couleurs ne sont pas contiguës ça ne fonctionne pas non plus.

je sais c'est un truc certainement toukon mais je pédale dessus
 
heu ben oui tu pédale dans la choucroute ca c'est sur 😀 😉
alors relis ,analyse et reviens quand tu aura compris
surtout quand tu expose ton besoins ne l'expose pas comme ca l'est dans ta tète mais comme ça l'est tout court

visiblement avec le coronamerdetruc tes chaussures marchent a coté de toi 😀😉
 
heu ben oui tu pédale dans la choucroute ca c'est sur 😀 😉

Ce qui est rassurant c'est que je ne suis pas seul visiblement 😉

alors relis ,analyse et reviens quand tu aura compris

euh... j'ai relus, j'ai analysé, mais j'ai pas plus compris 😕

surtout quand tu expose ton besoins ne l'expose pas comme ca l'est dans ta tète mais comme ça l'est tout court

Ben justement, si c'était clair aussi bien sur le papier que dans me tête ça serais certainement plus simple

visiblement avec le coronamerdetruc tes chaussures marchent a coté de toi 😀😉

Bon, je vais essayer en marchant sur les mains alors, mais je sais pas si je vais trouver des chaussures adaptées 😀 😀 😀 😀 😀 😀

Si tu as une solution avec mon simple exemple ça m'irait, c'est juste la logique de la prog que je ne capte pas.
 
bon
VB:
Private Type gr
    address As String
    couleur As Long
End Type


Sub test()
    Dim groupe() As gr, p As Range, C&, I&, tXt$
    Set plage = Range("A1:A20")
    C = 0
    For Each cel In plage.Cells
        If cel.Interior.Color <> C Then
            I = I + 1: ReDim Preserve groupe(1 To I)
            groupe(I).couleur = cel.Interior.Color
            groupe(I).address = cel.address
            C = cel.Interior.Color
        Else
            groupe(I).address = Union(Range(groupe(I).address), cel).address
        End If
    Next


    'lecture du compte rendu dans un message
    tXt = "il y a " & UBound(groupe) & " groupe(s)" & vbCrLf
    For I = 1 To UBound(groupe)
        tXt = tXt & vbCrLf & "groupe " & I & "  " & groupe(I).address & "  couleur  " & groupe(I).couleur
    Next
    MsgBox tXt
End Sub
tu la vois la logique simple maintenant
démonstration avec une même couleur mais non contiguës
demo4.gif
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
379
Réponses
6
Affichages
639
Réponses
3
Affichages
477
Retour