Changer couleur

Résolu
Bonjour,

J'aimerais faire une macro Excel permettant d'alterner la couleur lorsque la valeur change d'une ligne à l'autre dans la colonne A.
J'ai le fichier ci-dessous :



Et j'aimerais que la macro fasse ça :



J'ai essayer de faire une boucle sans succès
Merci de votre aide.

3 réponses

  1. Modérateur
    Bonjour,

    Ce site peut te débloquer sur plusieurs points :
    https://www.excel-pratique.com/fr/vba.php
    - Leçon sur les boucles
    - Leçon sur les feuilles et cellules pour les couleurs.

    Pour détecter le changement de valeur, tu peux utiliser une variable intermédiaire qui stocke la valeur de la cellule qui passée en revue et qui est gardée telle quelle jusqu'au tour de boucle suivante où elle pourra servir de comparaison.
    0
    1. Bonjour,

      Merci pour votre réponse.
      J'ai déjà été sur ce site, j'avais fait une boucle mais je n'ai pas réussi à colorer toutes les cases ayant le même nom de la même couleur (c'était soit le premier, soit la dernière case qui restait sans couleur)
      0
  2. Modérateur
    Bonjour,

    Combien de lignes comporte la colonne A?

    --
    0
    1. Bonjour,

      En fait, le nombre de ligne de la colonne A varie. Le nombre de ligne pour un même fournisseur peut aussi varier.
      C'est une extraction hebdomadaire de toutes les nouvelles commandes chez mes fournisseurs.
      0
    2. Modérateur
      @ViperestrikeOui, ok, d'accord. Mais peux tu nous donner un ordre d'idée du nombre maxi de lignes?
      100, 1 000, 10 000, 100 000...
      0
    3. Ha oui, pas de soucis. Un maximum de 400 lignes me semble pas mal.
      0
  3. Modérateur
    Voici :
    Adapte ce qui doit l'être...
        Sub Colore()
            Dim Wsh As Worksheet, PremLig As Integer, DrLig As Integer, Col As Integer, DrCol As Integer
            Dim Couleur As Integer, Couleur_1 As Integer, Couleur_2 As Integer
            
            Set Wsh = Worksheets("Feuil1")  'A ADAPTER : Nom de la feuille
            Col = 1                         'A ADAPTER : Numéro de la colonne à traiter  (ici A)
            DrCol = 10                      'A ADAPTER : Numéro de la dernière colonne à colorer
            PremLig = 1                     'A ADAPTER : Numéro de la première ligne traitée (ici 1)
            Couleur_1 = 3                   'A ADAPTER : Couleur n° 1
            Couleur_2 = 27                  'A ADAPTER : Couleur n° 2
            
            Couleur = Couleur_1
            With Wsh
                DrLig = .Columns(Col).Find("*", , , , , xlPrevious).Row
                For Lig = PremLig To DrLig
                    .Range(.Cells(Lig, Col), .Cells(Lig, DrCol)).Interior.ColorIndex = Couleur
                    If .Cells(Lig, Col).Value <> .Cells(Lig + 1, Col).Value Then
                        Couleur = IIf(Couleur = Couleur_1, Couleur_2, Couleur_1)
                    End If
                Next Lig
            End With
        End Sub

    0
    1. Merci beaucoup, ça fonctionne parfaitement !!
      J'aurais jamais réussi à trouver ça tout seul, super ;)
      0