2017-05-24 1 views
0

J'ai une liste de contrats sous une ligne d'en-tête. Certains contrats occupent plusieurs lignes.Comparer les cellules A3 et A2, si elles sont égales, rien d'autre ne colore les cellules de rangée 3 A par F. Répéter avec la ligne suivante

Ce que je voudrais, c'est avoir une macro VBA qui va comparer les cellules A3 à A2. Si ce sont les mêmes prochain. Si elles sont différentes, sélectionnez les cellules A3: F3 et changez Interior.Color en gris.

Ensuite, comparez A4 à A3, puis A5 à A4 et répétez pour toutes les cellules utilisées dans la colonne A, en faisant effectivement une table.

C'est ce que l'écran ressemble à:

Row Column A Column B  C   D  E  F 

1. 000000  (Info) (Info) (Info) (Info) (Info) 
2. 111111  (Info) (Info) (Info) (Info) (Info) 
3. 123456  (Info) (Info) (Info) (Info) (Info) 
4. 123456  (Info) (Info) (Info) (Info) (Info) 
5. 654321  (Info) (Info) (Info) (Info) (Info) 
6. 124536  (Info) (Info) (Info) (Info) (Info) 
7. 666666  (Info) (Info) (Info) (Info) (Info) 

Ce que je voudrais voir est:

1. 000000  (Info) (Info) (Info) (Info) (Info) 'line is clear 
2. 111111  (Info) (Info) (Info) (Info) (Info) 'line is grey 
3. 123456  (Info) (Info) (Info) (Info) (Info) 'line is clear 
4. 123456  (Info) (Info) (Info) (Info) (Info) 'line is clear 
5. 654321  (Info) (Info) (Info) (Info) (Info) 'line is grey 
6. 124536  (Info) (Info) (Info) (Info) (Info) 'line is clear 
7. 666666  (Info) (Info) (Info) (Info) (Info) 'line is grey 

J'ai passé ma journée à la recherche et ont trouvé (et a travaillé sur le script suivant cependant, il ne fait que colorier la première cellule de la ligne

Sub Line_Shading() 

    Application.ScreenUpdating = False 
    Dim this As Variant 
    Dim previous As Variant 
    Dim currentColor As Long 

    Dim rng As Range 
    Dim a As Range 
    ' pick a color to start with 
    currentColor = 14277081    ' 14277081 Grey or 16777215 Clear 
    ' rng = used and visible cells 

    Set rng = Range("A2:A" & Range("A2").End(xlDown).Row) 

    For Each a In rng 
     If Not a.Row = 1 Then   ' skip header row 
      this = a.Value 
      'some simple test logic to switch colors 
      If this <> previous Then 
       If currentColor = 14277081 Then 
        currentColor = 16777215 
       ElseIf currentColor = 16777215 Then 
        currentColor = 14277081 
       End If 
      End If 

      'set interior color 
      a.Interior.color = currentColor 'Interior.Color 

      previous = this 

     End If 
    Next a 
    Application.ScreenUpdating = True 
End Sub 

Je pense que ça va juste être une modification de la ligne: a.Interior.color = currentColor 'Interior.Color mais je ne peux pas voir la solution.

Suggestions?

Répondre

1

si vous êtes intéressé, cela peut être fait avec la mise en forme conditionnelle avec la formule suivante:

=ISEVEN(SUMPRODUCT(1/COUNTIFS($A$1:$A1,$A$1:$A1))) 

![enter image description here


Si vous voulez vraiment utiliser vba puis modifiez la ligne suivante:

a.Interior.color = currentColor 'Interior.Color 

à:

Range(Cells(a.Row, 1), Cells(a.Row, 6)).Interior.Color = currentColor 'Interior.Color 

il appliquera à toute la ligne dans la plage souhaitée et non pas seulement la colonne A.

+0

Le problème avec la mise en forme conditionnelle est que le document que je l'utilise est différent chaque jour et donc je dois re- créer le format conditionnel tout le temps. J'essaie de le faire en VBA car j'ai déjà environ 7-8 macros qui seront appliquées au document chaque matin quand il sera généré. –

+0

Compris, j'ai ajouté le correctif à votre code, dans l'édition. @EricWaters voir la partie inférieure de la réponse. –

+0

Oui, je l'ai vu par la suite et ça marche comme une beauté! Merci beaucoup pour l'aide! –