VBA comparaison de 2 tableaux

Bonjour à tous,

La question du jour sera à propos de VBA.

Je voudrais créer une macro qui compare deux tableaux sur deux fichiers différents :

- un tableau de référence constitué de 2 colonnes A et B dans un fichier X:

(A)(B)

[1][bibi]

[2][titi]

[3][lulu]

[4][fifi]

- un tableau de données constitué lui aussi de 2 colonnes C et D dont qui peut être faux dans un fichier Y:

(C)(D)

[2][titi]

[1][bibi]

[3][fifi]

[4][lulu]

A chaque fois que la colonne B du fichier X correspond à la colonne D du fichier Y et que la colonne A du fichier X correspond à la colonne C du fichier Y il mets la ligne en vert et s’il ne trouve pas le même résultat dans les colonnes A fichier X et C fichier Y (Cas de fifi et lulu) il passe à la ligne en rouge. Il ne s’arrête que quand la plage du tableau est finis.

Ce qui donnerait dans le fichier Y après exécution de la macro :

(C)(D)

[2][titi]

[1][bibi]

[3][fifi]

[4][lulu]

Compliqué ? Non pas pour vous mais pour moi sans nul doute.

Merci beaucoup.

Cordialement Antoine

Salut,

Tu ne devrais pas placer plusieurs fois tes questions et si possible, tu devrais fournir un ou des fichiers exemples.

J'ai tenté de trouver une solution. Tu ouvres les deux fichiers ci-joint à l'écran et tu lances la macro placée derrière le bouton du fichier Antoine 1. Est-ce ce que tu désires ?

Cordialement.

50antoine-1.xlsm (18.55 Ko)
42antoine-2.xlsx (8.27 Ko)

Oui désolé d'avoir posté 2 posts mais je trouvais le premier vraiment mal formulé, donc j'ai essayé ta macro et j'ai un problème de bogage, sur la ligne en rouge, merci de ton aide.

Sub aa()

Dim i As Integer, j As Integer

Application.ScreenUpdating = False

For i = 2 To Range("A1048576").End(xlUp).Row

With Workbooks("Antoine 2").Sheets("Feuil1")

For j = 2 To .Range("C1048576").End(xlUp).Row

If Cells(i, 1) = .Cells(j, 3) And Cells(i, 2) = .Cells(j, 4) Then

Range(Cells(i, 1), Cells(i, 2)).Font.ColorIndex = 4 ' vert

GoTo Etiquette

End If

Next j

Range(Cells(i, 1), Cells(i, 2)).Font.ColorIndex = 3 ' rouge

Etiquette:

End With

Next i

End Sub

PS: Mon fichier est trop volumineux

En gros c'est : si il n'y a pas de concordance entre les colonnes E et H de la feuille facture et les colonnes Z et AF feuille entres en stock ou souligne en rouge et si c'est bon on met en vert

Salut,

Hier soir j'ai préparé cette macro à la maison et ça passait sans autre. Ce matin j'ai essayé ces fichiers au travail, et ça bloque au même endroit que toi

Mais je suis arrivé à contourner le problème en remplaçant la ligne que tu as marquée en rouge par

With Workbooks("Antoine 2.xlsx").Sheets("Feuil1")

Merci de tester ça chez toi également (mais au préalable peut-être que tu dois enregistrer ces deux fichiers sur ton ordinateur et pas seulement les avoir dans un fichier temporaire).

Antoine53 a écrit :

si il n'y a pas de concordance entre les colonnes E et H de la feuille facture et les colonnes Z et AF feuille entres en stock ou souligne en rouge et si c'est bon on met en vert

Pourquoi ne l'as-tu pas dit tout de suite Sur la base du code fourni, n'arrives-tu pas à effectuer les modifications nécessaires ??? Si non - et à condition que le problème ci-dessus soit réglé - je vais voir pour le faire moi.

A te relire.

Merci Yvouille de prendre de ton temps pour m'aider , mais toujours ce problème à cette fichu ligne même en rajoutant l'extension du fichier

C'est rageant, chez moi ça passe

As-tu bien enregistrés les deux fichiers sur ton ordi ? Essaie encore éventuellement de les refermer après les avoir enregistrés puis de les rouvrir. Ca parait un peu con d'essayer ça, mais qui sait.

Sinon, essaie encore de remplacer la macro complète par ce code qui fonctionne également à merveille chez moi :

Sub aa()
Dim i As Integer, j As Integer

Application.ScreenUpdating = False

For i = 2 To Range("A1048576").End(xlUp).Row
    With Application.Workbooks("Antoine 2.xlsx").Sheets("Feuil1")
        For j = 2 To .Range("C1048576").End(xlUp).Row
            If Cells(i, 1) = .Cells(j, 3) And Cells(i, 2) = .Cells(j, 4) Then
                Range(Cells(i, 1), Cells(i, 2)).Font.ColorIndex = 4 ' vert
                GoTo Etiquette
            End If
    Next j
    Range(Cells(i, 1), Cells(i, 2)).Font.ColorIndex = 3  ' rouge
Etiquette:
    End With
Next i

End Sub

Dans le code ci-dessus, seule la ligne With Application.Workbooks("Antoine 2.xlsx").Sheets("Feuil1") est modifiée, mais ainsi tu es certain que le code complet est correct.

Autrement on va devoir essayer de travailler avec la méthode Workbook.open, mais je ne sais pas si j'aurais encore le temps aujourd'hui.

A te relire.

Yvouille tu as le reste de ton après-midi tranquille car ça marche chez moi, je te remercie énormément.

Tant mieux

En deux mots - et afin de savoir comment réagir la prochaine fois qu'un tel problème apparaît - avais-tu fais une fausse manipulation et tous mes codes passent maintenant chez toi ou est-ce que seule la dernière proposition fonctionne ?

Merci d'avance pour ta réponse.

Bonnes salutations.

J'avais pas fais attention mais un des 2 fichier était " en lecture seul" donc ne pouvant pas être modifier la macro n'agissait pas dessus

Yvouille a écrit :

Ca parait un peu con d'essayer ça, mais qui sait.

Donc finalement ce n'était peut-être pas si con

Merci beaucoup pour ta réponse et bonne continuation.

Excuse moi de te déranger encore une fois mais mon supérieur me demande si possible de supprimer le "GoTo " dans la code

Ton suppérieur ou ton prof ??

Ce code fonctionne ainsi, pourquoi vouloir le modifier ?

Amicalement.

Je suis stagiaire et c'est mon responsable qui me demande ça et le "GoTo" qui n'utilise pas car dans un code trop long sa peut renvoyer un n'importe ou ?! Dommage ton code me satisfaisait pourquoi faire compliqué quand on peut faire simple ^^

Mon code répond à ta première demande, je laisse donc tomber la suite de vos élucubrations

Bonne fin de journée.

Rechercher des sujets similaires à "vba comparaison tableaux"