Comparaison deux colonnes

hélo37 -  
 Hélo37 -
Bonjour,

J'aimerais comparer les cellules de deux colonnes D et M. Les cellules égales ne sont pa forcément sur la même ligne. Lorsque des valeurs sont égales je voudrais que la cellule de la colonne A soit coloré en jaune.
Voici où en est mon vba:

Sheets("LAN").Select
Range("D:D,M:M").Select

If Columns("D:D").Value = Columns("M:M").Value Then
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If

C'est la ligne ac le If qui ne va pas.

Pouvez-vous m'aider?

1 réponse

  1. Ziggy69 Messages postés 9 Statut Membre 2
     
    Salut hélo,
    dans ton if, tu lui demande de comparer la valeur de 2 colonnes ! C'est impossible, il faut que tu précise la cellule, en l'occurrence ici la ligne ou tu te trouve. La solution à mon avis, même si elle est lourde est d'y aller ligne par ligne dans ta colonne D et de tester avec chaque ligne de la colonne M. ça donne un truc du genre :
    for k =1 to range("D70000").end(xlup).row 
                 for p=1 to range("M70000").end(xlup).row 
                                 if cells(k,"D").Value=cells(p,"M").Value then 
                                                   cells(k,"D").Select 
                                                   With Selection.Interior 
                                                   .Pattern = xlSolid 
                                                   .PatternColorIndex = xlAutomatic 
                                                   .Color = 65535 
                                                   .TintAndShade = 0 
                                                   .PatternTintAndShade = 0 
                                                    End With  
                                 end if 
                 next p 
    next k 
    


    C'est un traitement lourd surtout si tu à beaucoup de lignes mais je ne connais pas d'autres techniques pour comparer 2 colonnes.
    Pour gagner du temps tu peux le mettre dans un while ou un goto pour qu'il passe à la ligne suivante quand il a trouvé une cellule égale dans M et dans D du genre :

    for k =1 to range("D70000").end(xlup).row 
                 for p=1 to range("M70000").end(xlup).row 
                                 if cells(k,"D").Value=cells(p,"M").Value then 
                                                   cells(k,"D").Select 
                                                   With Selection.Interior 
                                                   .Pattern = xlSolid 
                                                   .PatternColorIndex = xlAutomatic 
                                                   .Color = 65535 
                                                   .TintAndShade = 0 
                                                   .PatternTintAndShade = 0 
                                                    End With 
                                                   goto finboucle 
                                 end if 
                 next p 
    finboucle: 
    next k 
    


    A toi de voir ce que tu veux en faire.
    0
    1. Hélo37
       
      Merci! ça marche impec!

      le "row" ça veut dire quoi? je le vois svt, mais je ne sais pas ce que s'est...
      0
    2. Ziggy69 Messages postés 9 Statut Membre 2
       
      range("M70000") signifie cellule M70000, end signifie jusqu'a la fin et xlup, en allant vers le haut.
      Row signifie ligne. Donc range("M70000").end(xlup).row renvoie la ligne finale en partant de M70000 et en allant vers le haut. La ligne finale veut dire le changement d'état donc si la cellule M70000 est vide, il va te renvoyer la première ligne non vide en partant du bas vers le haut. très utile !
      0
    3. Hélo37
       
      Merci beaucoup!
      0