Comparaison lecontenu de 2 fichiers excel en VBA

MacroVBA Messages postés 2 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 2 juin 2015 - 2 juin 2015 à 11:39
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 7 juin 2015 à 16:41
Bonjour à tous,

Je suis débutant en VBA et sa fait plus de 3 jours que je cherche à resoudre cet probleme.

J'ai 2 fichiers (tests2.xlsx et test1.xlsx) que je dois comparer.

-Dans le fichiers tests2:
J'ai Axxx= p1 + p2 + p3+ p4

Dans le fichier test1:
Axxx= p2 + p1
Axxx= p3 + p1
Axx= p4 + p1

J'aimerai verifié si tous les Axxx du tests2 sont présents dans test1,
si Axxx= p2 + p1
Axxx= p3 + p1
Axx= p4 + p1
corespond à Axxx= p1 + p2 + p3+ p4
exemple:
J'ai A001= PLN+ PJM+QUA dans tests2.xlsx
Et A001= PJM+ PLN
A001= QUA +PLN

J'arrive pas à coloré les cellules des Axxx du tests2.xlsx qui n se trouvent pas ou bien qui ne correspondent pas dans test1.xlsx
ci-joint les fichiers
code:
Private Sub CommandButton3_Click()


'Evite de voir les opérations intermédiaire sur les fichiers
Application.ScreenUpdating = False

'déclarations des variables
Dim i As Long
Dim j As Long
Dim Sh As Worksheet
Dim Tablo1
Dim Tablo2

Workbooks.Open ("D:\Couz\test1.xlsx")
Set Sh = Workbooks("test1.xlsx").Worksheets("Feuil1") 'feuille
With Sh
Tablo1 = .Range(.Cells(2, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Value
End With

Workbooks("test1.xlsx").Close False
Workbooks.Open ("D:\Couz\test2.xlsx")

Set Sh = Workbooks("test2.xlsx").Worksheets("Feuil1")
With Sh
Tablo2 = .Range(.Cells(4, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Value
End With

For i = LBound(Tablo2, 1) To UBound(Tablo2, 1)
For j = LBound(Tablo1, 1) To UBound(Tablo1, 1)
If Tablo2(i, 1) = Tablo1(j, 2) Then

If ((Tablo2(i, 1) & Tablo2(i, 4) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5)) Or (Tablo2(i, 1) & Tablo2(i, 8) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5)) Or (Tablo2(i, 1) & Tablo2(i, 9) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5))) Then

Sh.Cells(i + 3, 1).Interior.Color = 16777215


Else
Sh.Cells(i + 3, 1).Interior.Color = 2
Exit For
End If
End If
Next j
Next i

Set Sh = Nothing

Application.ScreenUpdating = True

End Sub

7 réponses

MacroVBA Messages postés 2 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 2 juin 2015
Modifié par pijaku le 2/06/2015 à 13:39
Personnellement, je ne parviens pas à comprendre exactement ce que tu veux faire. Donc je préfère m'abstenir plutôt que de perdre du temps à faire quelque chose qui n'est peut-être pas ce que tu souhaites.


Bonjour Menhir,

J'ai 2 fichiers que je vais comparer.

J'ai Axxx qui corespond à P1, P2,P3,P4 dans le fichier tests2.

J'ai dans un 2eme ficher test1 le même Axx qui corespond à P2, P1;P3,P1 et P4,P1 sur des differentes lignes.

exemple:
J'ai dans le fichier test2 sur la meme ligne A001= P2 (cellule 5) + P1 (cellule 5) + P3( cellule 8) +P4 (cellule 9).

Dans le fichier test1 j'ai: A001 = P2(cellule 4) +P1(Cellule 5)
A001= P3(Cellule 4) +P1(Cellule 5)
A001=P4(Cellule 4) + P1 (cellule 5)
J'aimerai compararer voir si les quatres P du du fichier tests2 se trouve dans le fichier test1
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 juin 2015 à 17:04
Qui est Menhir et où se trouve son message (celui que tu cites) ?
Je crains assez que tu répondes sur ce forum à un message que tu as reçu sur un autre site !
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 juin 2015 à 15:54
Bonjour,

Je n'ai pas tout bien compris, mais si je me fie à la logique de ton code, la ligne suivante a possiblement un problème de parenthès
If ((Tablo2(i, 1) & Tablo2(i, 4) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5)) Or (Tablo2(i, 1) & Tablo2(i, 8) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5)) Or (Tablo2(i, 1) & Tablo2(i, 9) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5))) Then


Devrait probablement s'écrire
If ((Tablo2(i, 1) & Tablo2(i, 4) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5)) Or ((Tablo2(i, 1) & Tablo2(i, 8) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5)) Or ((Tablo2(i, 1) & Tablo2(i, 9) & Tablo2(i, 5) = Tablo1(j, 2) & Tablo1(j, 4) & Tablo1(j, 5)) Then

0
Bonjour,
Merci pour votre réponse.

Je vous explique le principe:

J'ai 2 fichiers que je vais comparer.

j'ai 2 fichiers (test2 et test1) excel dans lesquels se trouvent des données que je vais comparer.
exemple des données:

Dans le fichier test2 j'ai cette ligne suivante
A001= P2 (Ligne 4, cellule 5) + P1 (Ligne 4, cellule 4) + P3(Ligne 4, cellule 8) +P4 (Ligne 4, cellule 9).=PJM+PLN+QUA+ECP

A002=P2 (Ligne 5, cellule 5) + P1 (Ligne5, cellule 4) + P3(Ligne 5, cellule 8) =QUA+REP+QUA

B001= P2 (Ligne 6, cellule 5) + P1 (Ligne 6, cellule 4)= REG + ISP
Etc.

Dans le fichier test1 j'ai:
A001 = P2(Ligne 2, cellule 4) +P1(Ligne 2, Cellule 5)= PJM+PLN
A001=P3(Ligne 3, Cellule 4) + P1 (Ligne 3, cellule 5) =QUA + PLN
A001=P4(Ligne 4, Cellule 4) + P1 (Ligne 4, cellule 5)= ECP + PLN

A002=P2(Ligne 5, cellule 4) +P1(Ligne 5, Cellule 5)= QUA+REP
A002=P2(Ligne 6, cellule 4) +P1(Ligne 6 Cellule 5)=QUA + REP

B001=P2 (Ligne 7, cellule 4) + P1 (Ligne 7, cellule 5)= REG + ISP
Etc.


J'aimerai comparer si tous les valeurs de Axxx du fichier test2 se trouve dans le fichier test1, s'il se trouve pas ou les données ne correspond pas, il met la cellule en couleur bleu ou d'autre couleur.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 2/06/2015 à 19:21
Je crains fort que cela ne devienne de plus en plus incompréhensible, tout au moins pour moi.. (je dois être devenu sénile).
Que sont A001, A002, etc ... des booléennes ?
Que sont PI, PJM, PLN, QUA, etc ... ?
J'ai mal au crâne ....et me dis que je ne devrais pas avoir à me le "casser", qu'il est totalement anormal d'avoir à me le "casser", pour essayer de deviner ce dont il s'agit !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 3/06/2015 à 18:58
Salut MacroVBA

CE que j'ai compris :
le A002 de test1 n'a pas le P3 de A002 de test2
C'est cela que tu veux détecter comme différence ?

Autre chose dans A002 de test2 on a
A002=P2 (Ligne 5, cellule 5) + P1 (Ligne5, cellule 4) + P3(Ligne 5, cellule 8) =QUA+REP+QUA

C'est normal que QUA se réfère aussi bien à P2 qu'à P3 ?

Maintenant je rejoins ucfoutu et son mal au cräne !
0
Bonjour à tous,
Axxx est un identifiant qui identifie la ligne.

Dans le fichier test2 j'ai cette ligne suivante
A001= P2 (Ligne 4, cellule 5) ; P1 (Ligne 4, cellule 4) ; P3(Ligne 4, cellule 8) ;P4 (Ligne 4, cellule 9).=PJM(Ligne 4, cellule 5);PLN (Ligne 4, cellule 4);QUA (Ligne 4, cellule 8);ECP (Ligne 4, cellule 9)

A002=P2 (Ligne 5, cellule 5) +; P1 (Ligne5, cellule 4) ; P3(Ligne 5, cellule 8) =QUA;REP;QUA

B001= P2 (Ligne 6, cellule 5) ; P1 (Ligne 6, cellule 4)= REG ; ISP
Etc.

Dans le fichier test1 j'ai:
A001 = P2(Ligne 2, cellule 4) ;P1(Ligne 2, Cellule 5)= PJM;PLN
A001=P3(Ligne 3, Cellule 4) ; P1 (Ligne 3, cellule 5) =QUA ; PLN
A001=P4(Ligne 4, Cellule 4) ; P1 (Ligne 4, cellule 5)= ECP ; PLN

A002=P2(Ligne 5, cellule 4) ;P1(Ligne 5, Cellule 5)= QUA;REP
A002=P2(Ligne 6, cellule 4) ;P1(Ligne 6 Cellule 5)=QUA ; REP

B001=P2 (Ligne 7, cellule 4) ; P1 (Ligne 7, cellule 5)= REG ; ISP
Etc.

Mon but c'est de détecté que A001=PJM;PLN;QUA;ECP du test2 bonne bien
A001 = P2(Ligne 2, cellule 4) ;P1(Ligne 2, Cellule 5)= PJM;PLN
A001=P3(Ligne 3, Cellule 4) ; P1 (Ligne 3, cellule 5) =QUA ; PLN
A001=P4(Ligne 4, Cellule 4) ; P1 (Ligne 4, cellule 5)= ECP ; PLN
dans test1.

SI vous regardez bien, il ya bien PJM;QUA;ECP sur une meme ligne de test + PLN et sur des lignes différentes pour le test1.


Je pense j'ai été un peu plus claire?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 7/06/2015 à 16:53
Je pense j'ai été un peu plus claire?

Absolument pas !
Et les formulations du genre (ici la denière, mais elles sont toutes du même acabit) :
B001= P2 (Ligne 6, cellule 5) ; P1 (Ligne 6, cellule 4)= REG ; ISP
n'ont aucune signification compréhensible !
A défaut de clarté absolue d'une réponse/message de dernière chance de ta part, je ne reviendrai personnellement plus dans cette discussion. (Il est anormal d'en arriver là !)

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous