Problème VBA-excel _Comparer deux listes

Résolu
yo -  
xjl Messages postés 232 Statut Membre -
Bonjour,

Quelqu'un pourrait-il me filer un coup de main?

Je souhaite comparer deux listes de données (une colonne de code avec une autre colonne de code) dans excel (en automatisant avec VBA)?

Si les codes sont identiques:correct, si ils sont différents:erreur.
quand traiter ce problème dans VBA?
Configuration: Windows XP
Internet Explorer 6.0

6 réponses

  1. xjl Messages postés 232 Statut Membre 183
     
    Salut,

    ce code t'écrira dans une troisième colonne s'il y a erreur ou non, en espérant que ce soit ça que tu souhaites:

    Sub Compare()
    For i = 1 To Range("A1").End(xlDown).Row
    If Cells(i, 1).Value = Cells(i, 2).Value Then
    Cells(i, 3).Value = "Correct"
    Else: Cells(i, 3).Value = "Erreur"
    End If
    Next i
    End Sub

    A adapter ! ;-)
    1
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    bonjour,
    par exemple comparer colonne A à B

    sub Compare()
    dim i as integer, V as integer
    'déterminer la dernière ligne initialisée
    V= Range("A65536").End(xlUp).Row
    for i=1 to V
    if range("A" & i).value <>range("B" & i).value then
    msgbox "pas égale"
    end if
    next i
    End SUB
    A+
    louis
    0
  3. Y0 Messages postés 1 Statut Membre
     
    Merci pour vos réponses si rapides les gas, on sent les pros...
    Comme je t'attonne en VBA, je galère, bref
    j'ai essayé vos réponses et en fait le problème est plus compliqué:

    donc je compare deux colonnes(A et B).OK
    Une valeur qui se trouve dans A doit se trouver dans la colonne B (elle peut se trouver n'importe ou dans la colonne B, si ce n'est pas le cas elle est fausse; et ce raisonnement pour toutes les valeurs de la colonne A (et le pire c'est que vice versa aussi mais laissons cela))

    Je sais pas si je suis clair. Si je suis compris que je comprenne vos réponses .
    Merci Quand même
    0
  4. xjl Messages postés 232 Statut Membre 183
     
    Ok, on reprend:

    Sub Compare()
    n = 0
    For i = 1 To Range("A1").End(xlDown).Row
    For j = 1 To Range("B1").End(xlDown).Row
    If Cells(i, 1).Value = Cells(j, 2).Value Then
    n = n + 1
    Exit For
    End If
    Next j
    Next i
    If n = Range("A1").End(xlDown).Row Then MsgBox "Toutes les formules de la colonne A se trouvent en B"
    Else MsgBox "Il y a " & Range("A1").End(xlDown).Row-n & " formules de la colonne A qui ne se trouvent pas en B"
    End If
    End Sub

    Ca va déjà se rapprocher de ce que tu cherches je pense...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xjl Messages postés 232 Statut Membre 183
     
    Salut,

    ce code ta donne le nombre de formules qu'il y a en A et qui ne sont pas en B et inversement.

    Problème, il ne gère pas les doublons, donc si tes formules sont une seule fois dans chaque colonne, ça marche bien, sinon il faudra modifier un peu...

    Sub Compare()
    n = 0
    m = 0
    For i = 75 To Range("A75").End(xlDown).Row
    For j = 75 To Range("B75").End(xlDown).Row
    If Cells(i, 1).Value = Cells(j, 2).Value Then
    n = n + 1
    Exit For
    End If
    Next j
    Next i

    For i = 75 To Range("B75").End(xlDown).Row
    For j = 75 To Range("A75").End(xlDown).Row
    If Cells(i, 1).Value = Cells(j, 2).Value Then
    m = m + 1
    Exit For
    End If
    Next j
    Next i

    If n = Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m = Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
    MsgBox "Toutes les formules se trouvent dans les deux colonnes"
    ElseIf n = Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m <> Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
    MsgBox "Il y a " & Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A et toutes les formules de A se trouvent en B"
    ElseIf n <> Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m = Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
    MsgBox "Il y a " & Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et toutes les formules de B se trouvent en A"
    Else: MsgBox "Il y a " & Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et " & Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A"
    End If
    End Sub
    0
    1. Y0
       
      merci, je suis en train de détailler tes réponses pour bien les comprendre...
      Par contre concernant mon problème qui touche à sa fin c'est que:
      ma colonne A a des codes de ce style:
      BA0001A
      BA0001B
      BA0001C
      BA0002B
      BA0003A
      BA0006A
      ...
      ma colonne B a des codes de ce style:
      BA0001
      BA0002
      BA0004
      BA0005...
      DONC je suis obligé d'enlever la dernière lettre des codes de la colonne A pour les comparer à B et dans l'exemple le code BA0001 est correct, le code BA0003(A) est faux (pas d'équivalent dans la colonne B) et le code BA0005 est faux (pas d'équivalent dans la colonne A)
      Kapish, je sais ça devient alambiqué
      0
  7. xjl Messages postés 232 Statut Membre 183
     
    Dans ce cas, dans la partie suivante tu dois effectuer une petite modif:

    For i = 75 To Range("A75").End(xlDown).Row
    For j = 75 To Range("B75").End(xlDown).Row
    If Left(Cells(i, 1).Value,6) = Left(Cells(j, 2).Value,6) Then
    n = n + 1
    Exit For
    End If
    Next j
    Next i

    For i = 75 To Range("B75").End(xlDown).Row
    For j = 75 To Range("A75").End(xlDown).Row
    If Left(Cells(i, 1).Value,6) = Left(Cells(j, 2).Value,6) Then
    m = m + 1
    Exit For
    End If
    Next j
    Next i

    Du coup il ne va comparer que les 6 premiers caractères de chaque chaine contenue dans les cellules... ;-)
    0
    1. Y0
       
      ouais ça touche à sa fin...
      avec ton code, il compare les deux listes
      maintenant l'idéal serait qu'il me note dans une autre colonne les codes de la colonne A qui ne se trouve pas dans B et dans une autre colonne les codes de la colonne B qui ne setrouve pas dans A
      0
    2. Y0
       
      avec ton code, il compare les deux listes
      maintenant l'idéal serait qu'il me note dans une autre colonne les
      codes de la colonne A qui ne se trouve pas dans B et dans une autre colonne
      les codes de la colonne B qui ne setrouve pas dans A
      0
    3. xjl Messages postés 232 Statut Membre 183
       
      Essaye comme ça et regarde si ça te va:

      Sub Compare()
      n = 0
      m = 0
      Application.ScreenUpdating = False
      ActiveSheet.Range(Range("A1"), Range("A1").End(xlDown).Address).Copy
      ActiveSheet.Paste Destination:=ActiveSheet.Range("C1")
      ActiveSheet.Range(Range("B1"), Range("B1").End(xlDown).Address).Copy
      ActiveSheet.Paste Destination:=ActiveSheet.Range("D1")
      Application.CutCopyMode = False

      For i = 1 To Range("A1").End(xlDown).Row
      For j = 1 To Range("B1").End(xlDown).Row
      If Left(Cells(i, 1).Value, 6) = Left(Cells(j, 2).Value, 6) Then
      n = n + 1
      Cells(i, 3).Value = ""
      Exit For
      End If
      Next j
      Next i

      For i = 1 To Range("B1").End(xlDown).Row
      For j = 1 To Range("A1").End(xlDown).Row
      If Left(Cells(i, 1).Value, 6) = Left(Cells(j, 2).Value, 6) Then
      m = m + 1
      Cells(i, 4).Value = ""
      Exit For
      End If
      Next j
      Next i

      If n = Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m = Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
      MsgBox "Toutes les formules se trouvent dans les deux colonnes"
      ElseIf n = Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m <> Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
      MsgBox "Il y a " & Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A et toutes les formules de A se trouvent en B"
      ElseIf n <> Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m = Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
      MsgBox "Il y a " & Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et toutes les formules de B se trouvent en A"
      Else: MsgBox "Il y a " & Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et " & Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A"
      End If
      Application.ScreenUpdating = True
      End Sub
      0
    4. Y0 > xjl Messages postés 232 Statut Membre
       
      Merci beaucoup xjl
      Mission accomplie, ça marche.
      0
    5. Y0 > xjl Messages postés 232 Statut Membre
       
      ce code est presque bon en fait:
      Problème de comparaison dans un sens de la colonne B vers la colonne A
      - il se trompe
      - il marque pas dans une autre colonne les codes de la colonne B n'ayant pas d'équivalent
      0