Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comparer deux fichiers de 27000 lignes chacun : comment faire ?

15 réponses
Avatar
tictok
Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour comparer la
cellule A d'un fichier avec la cellule A d'autre. Chaque fichier contient
environ 27000 lignes, donc ce n'est pas un petit fichier !
Les donnees des cellules a comparer sont des donnnees de type texte (non des
valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure des
heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre les
deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez puissant
pour ca. C'est surtout pour un probleme de vitesse d'execution et de
stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire l'action
ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second, alors
faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier, alors
faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier fichier
dans le second (et vice versa), peut on le faire en meme temps ou vaut t'il
mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de données a
traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de http://www.excelabo.net/xl/comparer.php
mais sans grand succes.)

10 réponses

1 2
Avatar
patrick
Bonjour

si tu as des traitements lourds dans action1 action2 ...
il vaudrait mieux faire un classeur avec les donnees 1
et les donnees 2 et utiliser la mise en forme conditionnelle.
ex :
en col A les donnees 1
en col B les donnees 2

par des formules dans la MEFC tu affiches en rouge
pour action1 en bleu pour action 2 et vert pour action 3
tu n'as plus qu'a faire une procedure qui en fonction
de la couleur de la cellule fera le traitement correspondant

@+
patrick



"tictok" a écrit dans le message news:
e$
Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour comparer la
cellule A d'un fichier avec la cellule A d'autre. Chaque fichier contient
environ 27000 lignes, donc ce n'est pas un petit fichier !
Les donnees des cellules a comparer sont des donnnees de type texte (non
des

valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure des
heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre les
deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez puissant
pour ca. C'est surtout pour un probleme de vitesse d'execution et de
stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire l'action
ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second, alors
faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier, alors
faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier
fichier

dans le second (et vice versa), peut on le faire en meme temps ou vaut
t'il

mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de données a
traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de http://www.excelabo.net/xl/comparer.php
mais sans grand succes.)




Avatar
michdenis
Bonjour Titok,

Voici une procédure qui compare les colonnes A de 2 fichiers.

A ) les 2 fichiers doivent être ouverts.

B ) Remplace ceci "ThisWorkbook.Name" par le nom du classeur dans le second appel .

C ) résultats dans le classeur contenant cette procédure dans la feuille résultat qui sera ajouté

Colonne A contiendra : les données qui sont présentes dans les 2 fichiers
Colonne B " " : les données uniques au classeur contenant cette macro
Colonne C " " : les données uniques à l'autre classeur


'----------------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultat").Delete
Application.DisplayAlerts = False
On Error GoTo 0
Worksheets.Add.Name = "Résultat"

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
X = X + 1
Worksheets("Résultat").Range("B" & X) = Tblo(A, B)
On Error GoTo 0
Else
'Donnée est ds les 2 tableaux tblo = tblo1
'Appelle de ta procédure
G = G + 1
Worksheets("Résultat").Range("A" & G) = Tblo(A, B)
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
D = D + 1
Worksheets("Résultat").Range("C" & D) = Tblo1(A, B)
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------


Salutations!




"tictok" a écrit dans le message de news:e$
Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour comparer la
cellule A d'un fichier avec la cellule A d'autre. Chaque fichier contient
environ 27000 lignes, donc ce n'est pas un petit fichier !
Les donnees des cellules a comparer sont des donnnees de type texte (non des
valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure des
heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre les
deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez puissant
pour ca. C'est surtout pour un probleme de vitesse d'execution et de
stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire l'action
ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second, alors
faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier, alors
faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier fichier
dans le second (et vice versa), peut on le faire en meme temps ou vaut t'il
mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de données a
traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de http://www.excelabo.net/xl/comparer.php
mais sans grand succes.)
Avatar
tictok
Je vais essayer ta methode. Je te dirai si ca marche ou pas. A tout a
l'heure !

Patrick, je ne peux pas trop mettre les deux colonnes a comparer a cote car
dans les actions, je dois modifier la valeur des cellules de la colonne D
par exemple.


"michdenis" escreveu na mensagem
news:
Bonjour Titok,

Voici une procédure qui compare les colonnes A de 2 fichiers.

A ) les 2 fichiers doivent être ouverts.

B ) Remplace ceci "ThisWorkbook.Name" par le nom du classeur dans le
second appel .


C ) résultats dans le classeur contenant cette procédure dans la feuille
résultat qui sera ajouté


Colonne A contiendra : les données qui sont présentes dans les 2 fichiers
Colonne B " " : les données uniques au classeur contenant
cette macro

Colonne C " " : les données uniques à l'autre classeur


'----------------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultat").Delete
Application.DisplayAlerts = False
On Error GoTo 0
Worksheets.Add.Name = "Résultat"

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
X = X + 1
Worksheets("Résultat").Range("B" & X) = Tblo(A, B)
On Error GoTo 0
Else
'Donnée est ds les 2 tableaux tblo = tblo1
'Appelle de ta procédure
G = G + 1
Worksheets("Résultat").Range("A" & G) = Tblo(A, B)
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
D = D + 1
Worksheets("Résultat").Range("C" & D) = Tblo1(A, B)
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------


Salutations!




"tictok" a écrit dans le message de
news:e$

Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour comparer la
cellule A d'un fichier avec la cellule A d'autre. Chaque fichier contient
environ 27000 lignes, donc ce n'est pas un petit fichier !
Les donnees des cellules a comparer sont des donnnees de type texte (non
des

valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure des
heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre les
deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez puissant
pour ca. C'est surtout pour un probleme de vitesse d'execution et de
stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire l'action
ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second, alors
faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier, alors
faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier
fichier

dans le second (et vice versa), peut on le faire en meme temps ou vaut
t'il

mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de données a
traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de http://www.excelabo.net/xl/comparer.php
mais sans grand succes.)





Avatar
tictok
Apres 10 minutes, la macro tournait toujours a 100% ... Je l'ai arrete. :(
Je ne veux pas avoir une liste des donnees uniques et trouvees dans les deux
fichiers.

Je vais preciser les ACTION 1,2,3 de mon premier message.
- SI je trouve la meme donnee dans les deux fichiers (comparaison des
colonnes A), ALORS (la donnee de la cellule de la colonne C du premier
fichier est egale a celle du second fichier) ET (ecrire "OK" dans la cellule
de la colonne E des deux fichiers ).
- SI je trouve la donnee dans le premier fichier et pas dans le second,
ALORS ecrire dans la cellule de la colonne E "CB".
- SI je trouve la donnee dans le second fichier et pas dans le premier,
ALORS ecrire dans la cellule de la colonne E "CaC".

Commme ca (si le programme marche bien), aucune cellule des colonnes E de
chaque fichier ne devrait etre vide. Chaque cellule des colonnes E devrait
contenir "OK" ou "CB" ou "Cac", mais ne peut etre vide.

Je vais corser le probleme car je veux que la macro soit contenue dans un
fichier externe : de ce fichier contentant la macro, je vais traiter les
deux fichiers. Est-ce possible ?

Voila, c'est complique mais si ca marche, ah je sens que je ferai chauffer
le processeur comme il a jamais vu ! LOL

En attendant une reponse
Tictok

"michdenis" escreveu na mensagem
news:
Bonjour Titok,

Voici une procédure qui compare les colonnes A de 2 fichiers.

A ) les 2 fichiers doivent être ouverts.

B ) Remplace ceci "ThisWorkbook.Name" par le nom du classeur dans le
second appel .


C ) résultats dans le classeur contenant cette procédure dans la feuille
résultat qui sera ajouté


Colonne A contiendra : les données qui sont présentes dans les 2 fichiers
Colonne B " " : les données uniques au classeur contenant
cette macro

Colonne C " " : les données uniques à l'autre classeur


'----------------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultat").Delete
Application.DisplayAlerts = False
On Error GoTo 0
Worksheets.Add.Name = "Résultat"

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
X = X + 1
Worksheets("Résultat").Range("B" & X) = Tblo(A, B)
On Error GoTo 0
Else
'Donnée est ds les 2 tableaux tblo = tblo1
'Appelle de ta procédure
G = G + 1
Worksheets("Résultat").Range("A" & G) = Tblo(A, B)
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
D = D + 1
Worksheets("Résultat").Range("C" & D) = Tblo1(A, B)
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------


Salutations!




"tictok" a écrit dans le message de
news:e$

Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour comparer la
cellule A d'un fichier avec la cellule A d'autre. Chaque fichier contient
environ 27000 lignes, donc ce n'est pas un petit fichier !
Les donnees des cellules a comparer sont des donnnees de type texte (non
des

valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure des
heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre les
deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez puissant
pour ca. C'est surtout pour un probleme de vitesse d'execution et de
stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire l'action
ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second, alors
faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier, alors
faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier
fichier

dans le second (et vice versa), peut on le faire en meme temps ou vaut
t'il

mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de données a
traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de http://www.excelabo.net/xl/comparer.php
mais sans grand succes.)





Avatar
michdenis
Bonjour Tictok

Renseigne la variable désignée dans la procédure...

pas le temps de tester

'--------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant
Dim NomCeClasseur As String
Dim NomAutreClasseur As String


NomCeClasseur = ThisWorkbook.Name

'à renseigner la variable
NomAutreClasseur = Workbooks("NomDuClasseur).Name


With Workbooks(NomCeClasseur).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(NomAutreClasseur).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

Application.ScreenUpdating = False

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
If Rg(A, B).Offset(, 2) = Rg1(A, B).Offset(, 2) Then
Rg(A, B).Offset(, 4) = "Cb"
End If
On Error GoTo 0
Else
If Rg(A, B).Offset(, 2) = Rg1(A, B).Offset(, 2) Then
Rg(A, B).Offset(, 4) = "ok"
Rg1(A, B).Offset(, 4) = "ok"
End If
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
If Rg(A, B).Offset(, 2) = Rg1(A, B).Offset(, 2) Then
Rg1(A, B).Offset(, 4) = "CaC"
End If
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'--------------------------


Salutations!


"tictok" a écrit dans le message de news:
Apres 10 minutes, la macro tournait toujours a 100% ... Je l'ai arrete. :(
Je ne veux pas avoir une liste des donnees uniques et trouvees dans les deux
fichiers.

Je vais preciser les ACTION 1,2,3 de mon premier message.
- SI je trouve la meme donnee dans les deux fichiers (comparaison des
colonnes A), ALORS (la donnee de la cellule de la colonne C du premier
fichier est egale a celle du second fichier) ET (ecrire "OK" dans la cellule
de la colonne E des deux fichiers ).
- SI je trouve la donnee dans le premier fichier et pas dans le second,
ALORS ecrire dans la cellule de la colonne E "CB".
- SI je trouve la donnee dans le second fichier et pas dans le premier,
ALORS ecrire dans la cellule de la colonne E "CaC".

Commme ca (si le programme marche bien), aucune cellule des colonnes E de
chaque fichier ne devrait etre vide. Chaque cellule des colonnes E devrait
contenir "OK" ou "CB" ou "Cac", mais ne peut etre vide.

Je vais corser le probleme car je veux que la macro soit contenue dans un
fichier externe : de ce fichier contentant la macro, je vais traiter les
deux fichiers. Est-ce possible ?

Voila, c'est complique mais si ca marche, ah je sens que je ferai chauffer
le processeur comme il a jamais vu ! LOL

En attendant une reponse
Tictok

"michdenis" escreveu na mensagem
news:
Bonjour Titok,

Voici une procédure qui compare les colonnes A de 2 fichiers.

A ) les 2 fichiers doivent être ouverts.

B ) Remplace ceci "ThisWorkbook.Name" par le nom du classeur dans le
second appel .


C ) résultats dans le classeur contenant cette procédure dans la feuille
résultat qui sera ajouté


Colonne A contiendra : les données qui sont présentes dans les 2 fichiers
Colonne B " " : les données uniques au classeur contenant
cette macro

Colonne C " " : les données uniques à l'autre classeur


'----------------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultat").Delete
Application.DisplayAlerts = False
On Error GoTo 0
Worksheets.Add.Name = "Résultat"

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
X = X + 1
Worksheets("Résultat").Range("B" & X) = Tblo(A, B)
On Error GoTo 0
Else
'Donnée est ds les 2 tableaux tblo = tblo1
'Appelle de ta procédure
G = G + 1
Worksheets("Résultat").Range("A" & G) = Tblo(A, B)
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
D = D + 1
Worksheets("Résultat").Range("C" & D) = Tblo1(A, B)
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------


Salutations!




"tictok" a écrit dans le message de
news:e$

Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour comparer la
cellule A d'un fichier avec la cellule A d'autre. Chaque fichier contient
environ 27000 lignes, donc ce n'est pas un petit fichier !
Les donnees des cellules a comparer sont des donnnees de type texte (non
des

valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure des
heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre les
deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez puissant
pour ca. C'est surtout pour un probleme de vitesse d'execution et de
stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire l'action
ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second, alors
faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier, alors
faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier
fichier

dans le second (et vice versa), peut on le faire en meme temps ou vaut
t'il

mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de données a
traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de http://www.excelabo.net/xl/comparer.php
mais sans grand succes.)





Avatar
Paul V.
Le problème est effectivement la quantité de données;

J'ai quelques questions.
Les données sont elles triées ?
Y a t-il autre chose dans les colonnes autres que C et E
Y a t-il toujours des données dans les deux fichiers pour les deux
classeurs?
Que faire si il y une donnée dans le premier qui n'est pas dans le second
fichier et que sur la même ligne il y a une donnée dans le deuxième fichier
qui n'est pas dans le premier?

--
HTH

Paul V.

tictok wrote:
Apres 10 minutes, la macro tournait toujours a 100% ... Je l'ai
arrete. :( Je ne veux pas avoir une liste des donnees uniques et
trouvees dans les deux fichiers.

Je vais preciser les ACTION 1,2,3 de mon premier message.
- SI je trouve la meme donnee dans les deux fichiers (comparaison des
colonnes A), ALORS (la donnee de la cellule de la colonne C du premier
fichier est egale a celle du second fichier) ET (ecrire "OK" dans la
cellule de la colonne E des deux fichiers ).
- SI je trouve la donnee dans le premier fichier et pas dans le
second, ALORS ecrire dans la cellule de la colonne E "CB".
- SI je trouve la donnee dans le second fichier et pas dans le
premier, ALORS ecrire dans la cellule de la colonne E "CaC".

Commme ca (si le programme marche bien), aucune cellule des colonnes
E de chaque fichier ne devrait etre vide. Chaque cellule des colonnes
E devrait contenir "OK" ou "CB" ou "Cac", mais ne peut etre vide.

Je vais corser le probleme car je veux que la macro soit contenue
dans un fichier externe : de ce fichier contentant la macro, je vais
traiter les deux fichiers. Est-ce possible ?

Voila, c'est complique mais si ca marche, ah je sens que je ferai
chauffer le processeur comme il a jamais vu ! LOL

En attendant une reponse
Tictok

"michdenis" escreveu na mensagem
news:
Bonjour Titok,

Voici une procédure qui compare les colonnes A de 2 fichiers.

A ) les 2 fichiers doivent être ouverts.

B ) Remplace ceci "ThisWorkbook.Name" par le nom du classeur dans
le second appel .

C ) résultats dans le classeur contenant cette procédure dans la
feuille résultat qui sera ajouté

Colonne A contiendra : les données qui sont présentes dans les 2
fichiers Colonne B " " : les données uniques au
classeur contenant cette macro Colonne C " " : les
données uniques à l'autre classeur


'----------------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultat").Delete
Application.DisplayAlerts = False
On Error GoTo 0
Worksheets.Add.Name = "Résultat"

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
X = X + 1
Worksheets("Résultat").Range("B" & X) = Tblo(A, B)
On Error GoTo 0
Else
'Donnée est ds les 2 tableaux tblo = tblo1
'Appelle de ta procédure
G = G + 1
Worksheets("Résultat").Range("A" & G) = Tblo(A, B)
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
D = D + 1
Worksheets("Résultat").Range("C" & D) = Tblo1(A, B)
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------


Salutations!




"tictok" a écrit dans le message de
news:e$

Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour
comparer la cellule A d'un fichier avec la cellule A d'autre. Chaque
fichier contient environ 27000 lignes, donc ce n'est pas un petit
fichier !
Les donnees des cellules a comparer sont des donnnees de type texte
(non des valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure
des heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre
les deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez
puissant pour ca. C'est surtout pour un probleme de vitesse
d'execution et de stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire
l'action ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second,
alors faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier,
alors faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier
fichier dans le second (et vice versa), peut on le faire en meme
temps ou vaut t'il mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de
données a traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de
http://www.excelabo.net/xl/comparer.php mais sans grand succes.)




Avatar
tictok
Pourquoi c'est
With Workbooks(NomAutreClasseur).Worksheets("Feuil2")
et pas
With Workbooks(NomAutreClasseur).Worksheets("Feuil1") (Feuil2 --> Feuil1) ?
Car c'est bien dans la Feuil1 du second fichier que se trouvent les donnees.

Tu m'aides deja beaucoup michdenis, c'est a moi de tester ;).

"michdenis" escreveu na mensagem
news:
Bonjour Tictok

Renseigne la variable désignée dans la procédure...

pas le temps de tester

'--------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant
Dim NomCeClasseur As String
Dim NomAutreClasseur As String


NomCeClasseur = ThisWorkbook.Name

'à renseigner la variable
NomAutreClasseur = Workbooks("NomDuClasseur).Name


With Workbooks(NomCeClasseur).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(NomAutreClasseur).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

Application.ScreenUpdating = False

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
If Rg(A, B).Offset(, 2) = Rg1(A, B).Offset(, 2) Then
Rg(A, B).Offset(, 4) = "Cb"
End If
On Error GoTo 0
Else
If Rg(A, B).Offset(, 2) = Rg1(A, B).Offset(, 2) Then
Rg(A, B).Offset(, 4) = "ok"
Rg1(A, B).Offset(, 4) = "ok"
End If
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
If Rg(A, B).Offset(, 2) = Rg1(A, B).Offset(, 2) Then
Rg1(A, B).Offset(, 4) = "CaC"
End If
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'--------------------------


Salutations!


Avatar
tictok
Bonjour Paul V.

- Les DEUX fichiers sont triés dans l'ordre croissant de la colonne A, de
la meme facon.
- Oui, les colonnes A a D contiennent des donnees. Je ne peux pas trop
modifier la structure de mes fichiers pour comparer.
- Oui et non. Je veux bien ecraser les valeurs, que la cellule ou on va
mettre la valeur (le premier ficheir donc) soit vide ou non.
- Je ne fais une comparaison que par rapport a la colonne A. Si les
colonnes B sont differentes, je m'en fous : je ne fais aucun manip sur cette
colonne B.

J'espere avoir bien repondu a tes questions.
Le code de michdenis n'a l'air pas mal, je vais le tester.

"Paul V." escreveu na mensagem
news:
Le problème est effectivement la quantité de données;

J'ai quelques questions.
Les données sont elles triées ?
Y a t-il autre chose dans les colonnes autres que C et E
Y a t-il toujours des données dans les deux fichiers pour les deux
classeurs?
Que faire si il y une donnée dans le premier qui n'est pas dans le second
fichier et que sur la même ligne il y a une donnée dans le deuxième
fichier

qui n'est pas dans le premier?

--
HTH

Paul V.

tictok wrote:
Apres 10 minutes, la macro tournait toujours a 100% ... Je l'ai
arrete. :( Je ne veux pas avoir une liste des donnees uniques et
trouvees dans les deux fichiers.

Je vais preciser les ACTION 1,2,3 de mon premier message.
- SI je trouve la meme donnee dans les deux fichiers (comparaison des
colonnes A), ALORS (la donnee de la cellule de la colonne C du premier
fichier est egale a celle du second fichier) ET (ecrire "OK" dans la
cellule de la colonne E des deux fichiers ).
- SI je trouve la donnee dans le premier fichier et pas dans le
second, ALORS ecrire dans la cellule de la colonne E "CB".
- SI je trouve la donnee dans le second fichier et pas dans le
premier, ALORS ecrire dans la cellule de la colonne E "CaC".

Commme ca (si le programme marche bien), aucune cellule des colonnes
E de chaque fichier ne devrait etre vide. Chaque cellule des colonnes
E devrait contenir "OK" ou "CB" ou "Cac", mais ne peut etre vide.

Je vais corser le probleme car je veux que la macro soit contenue
dans un fichier externe : de ce fichier contentant la macro, je vais
traiter les deux fichiers. Est-ce possible ?

Voila, c'est complique mais si ca marche, ah je sens que je ferai
chauffer le processeur comme il a jamais vu ! LOL

En attendant une reponse
Tictok

"michdenis" escreveu na mensagem
news:
Bonjour Titok,

Voici une procédure qui compare les colonnes A de 2 fichiers.

A ) les 2 fichiers doivent être ouverts.

B ) Remplace ceci "ThisWorkbook.Name" par le nom du classeur dans
le second appel .

C ) résultats dans le classeur contenant cette procédure dans la
feuille résultat qui sera ajouté

Colonne A contiendra : les données qui sont présentes dans les 2
fichiers Colonne B " " : les données uniques au
classeur contenant cette macro Colonne C " " : les
données uniques à l'autre classeur


'----------------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultat").Delete
Application.DisplayAlerts = False
On Error GoTo 0
Worksheets.Add.Name = "Résultat"

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
X = X + 1
Worksheets("Résultat").Range("B" & X) = Tblo(A, B)
On Error GoTo 0
Else
'Donnée est ds les 2 tableaux tblo = tblo1
'Appelle de ta procédure
G = G + 1
Worksheets("Résultat").Range("A" & G) = Tblo(A, B)
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
D = D + 1
Worksheets("Résultat").Range("C" & D) = Tblo1(A, B)
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------


Salutations!




"tictok" a écrit dans le message de
news:e$

Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour
comparer la cellule A d'un fichier avec la cellule A d'autre. Chaque
fichier contient environ 27000 lignes, donc ce n'est pas un petit
fichier !
Les donnees des cellules a comparer sont des donnnees de type texte
(non des valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure
des heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre
les deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez
puissant pour ca. C'est surtout pour un probleme de vitesse
d'execution et de stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire
l'action ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second,
alors faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier,
alors faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier
fichier dans le second (et vice versa), peut on le faire en meme
temps ou vaut t'il mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de
données a traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de
http://www.excelabo.net/xl/comparer.php mais sans grand succes.)








Avatar
Paul V.
Moi toujours pas comprendre.

Ok pour le début de ma comprenure ou compréhensivité. Je sais jamais.
Imaginons que dans le premier fichier tu ais Toto et dans le deuxième
fichier PasToto.
Est-on dans le deuxième cas ou le troisième. A mon avis, les deux ;-)
Alors que faire?

--
HTH

Paul V.

tictok wrote:
Bonjour Paul V.

- Les DEUX fichiers sont triés dans l'ordre croissant de la colonne
A, de la meme facon.
- Oui, les colonnes A a D contiennent des donnees. Je ne peux pas
trop modifier la structure de mes fichiers pour comparer.
- Oui et non. Je veux bien ecraser les valeurs, que la cellule ou on
va mettre la valeur (le premier ficheir donc) soit vide ou non.
- Je ne fais une comparaison que par rapport a la colonne A. Si les
colonnes B sont differentes, je m'en fous : je ne fais aucun manip
sur cette colonne B.

J'espere avoir bien repondu a tes questions.
Le code de michdenis n'a l'air pas mal, je vais le tester.

"Paul V." escreveu na mensagem
news:
Le problème est effectivement la quantité de données;

J'ai quelques questions.
Les données sont elles triées ?
Y a t-il autre chose dans les colonnes autres que C et E
Y a t-il toujours des données dans les deux fichiers pour les deux
classeurs?
Que faire si il y une donnée dans le premier qui n'est pas dans le
second fichier et que sur la même ligne il y a une donnée dans le
deuxième fichier qui n'est pas dans le premier?

--
HTH

Paul V.

tictok wrote:
Apres 10 minutes, la macro tournait toujours a 100% ... Je l'ai
arrete. :( Je ne veux pas avoir une liste des donnees uniques et
trouvees dans les deux fichiers.

Je vais preciser les ACTION 1,2,3 de mon premier message.
- SI je trouve la meme donnee dans les deux fichiers (comparaison
des colonnes A), ALORS (la donnee de la cellule de la colonne C du
premier fichier est egale a celle du second fichier) ET (ecrire
"OK" dans la cellule de la colonne E des deux fichiers ).
- SI je trouve la donnee dans le premier fichier et pas dans le
second, ALORS ecrire dans la cellule de la colonne E "CB".
- SI je trouve la donnee dans le second fichier et pas dans le
premier, ALORS ecrire dans la cellule de la colonne E "CaC".

Commme ca (si le programme marche bien), aucune cellule des colonnes
E de chaque fichier ne devrait etre vide. Chaque cellule des
colonnes E devrait contenir "OK" ou "CB" ou "Cac", mais ne peut
etre vide.

Je vais corser le probleme car je veux que la macro soit contenue
dans un fichier externe : de ce fichier contentant la macro, je vais
traiter les deux fichiers. Est-ce possible ?

Voila, c'est complique mais si ca marche, ah je sens que je ferai
chauffer le processeur comme il a jamais vu ! LOL

En attendant une reponse
Tictok

"michdenis" escreveu na mensagem
news:
Bonjour Titok,

Voici une procédure qui compare les colonnes A de 2 fichiers.

A ) les 2 fichiers doivent être ouverts.

B ) Remplace ceci "ThisWorkbook.Name" par le nom du classeur dans
le second appel .

C ) résultats dans le classeur contenant cette procédure dans la
feuille résultat qui sera ajouté

Colonne A contiendra : les données qui sont présentes dans les 2
fichiers Colonne B " " : les données uniques au
classeur contenant cette macro Colonne C " " : les
données uniques à l'autre classeur


'----------------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultat").Delete
Application.DisplayAlerts = False
On Error GoTo 0
Worksheets.Add.Name = "Résultat"

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
X = X + 1
Worksheets("Résultat").Range("B" & X) = Tblo(A, B)
On Error GoTo 0
Else
'Donnée est ds les 2 tableaux tblo = tblo1
'Appelle de ta procédure
G = G + 1
Worksheets("Résultat").Range("A" & G) = Tblo(A, B)
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
D = D + 1
Worksheets("Résultat").Range("C" & D) = Tblo1(A, B)
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------


Salutations!




"tictok" a écrit dans le message de
news:e$

Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour
comparer la cellule A d'un fichier avec la cellule A d'autre.
Chaque fichier contient environ 27000 lignes, donc ce n'est pas un
petit fichier !
Les donnees des cellules a comparer sont des donnnees de type texte
(non des valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure
des heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison
entre les deux fichiers ou de copier le contenu du second dans le
premier ? Ca ne me gene pas du tout de copier le contenu, j'ai un
PC assez puissant pour ca. C'est surtout pour un probleme de
vitesse d'execution et de stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire
l'action ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le
second, alors faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le
premier, alors faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du
premier fichier dans le second (et vice versa), peut on le faire
en meme temps ou vaut t'il mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de
données a traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de
http://www.excelabo.net/xl/comparer.php mais sans grand succes.)








Avatar
docm
Bonjour Denis.

Je crois qu'il faut ajouter un petit point devant le second mot RANGE dans
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
et aussi devant le second mot RANGE dans
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)

Amicalement
Gérard


"michdenis" wrote in message
news:
Bonjour Titok,

Voici une procédure qui compare les colonnes A de 2 fichiers.

A ) les 2 fichiers doivent être ouverts.

B ) Remplace ceci "ThisWorkbook.Name" par le nom du classeur dans le
second appel .


C ) résultats dans le classeur contenant cette procédure dans la feuille
résultat qui sera ajouté


Colonne A contiendra : les données qui sont présentes dans les 2 fichiers
Colonne B " " : les données uniques au classeur contenant
cette macro

Colonne C " " : les données uniques à l'autre classeur


'----------------------------------
Sub Comparer()

Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long
Dim X As Long, D As Long, G As Long
Dim Tblo As Variant, Tblo1 As Variant

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil1")
Set Rg = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo = Rg
End With

With Workbooks(ThisWorkbook.Name).Worksheets("Feuil2")
Set Rg1 = .Range("A1:A" & Range("A65536").End(xlUp).Row)
Tblo1 = Rg1
End With

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultat").Delete
Application.DisplayAlerts = False
On Error GoTo 0
Worksheets.Add.Name = "Résultat"

For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If IsError(Application.Match(Tblo(A, B), Tblo1, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
X = X + 1
Worksheets("Résultat").Range("B" & X) = Tblo(A, B)
On Error GoTo 0
Else
'Donnée est ds les 2 tableaux tblo = tblo1
'Appelle de ta procédure
G = G + 1
Worksheets("Résultat").Range("A" & G) = Tblo(A, B)
End If
Next
Next

'ON INVERSE, COMPARAISON FAITE À PARTIR DE L'AUTRE PLAGE

For A = 1 To UBound(Tblo1, 1)
For B = 1 To UBound(Tblo1, 2)
If IsError(Application.Match(Tblo1(A, B), Tblo, 0)) Then
'donnée ds tblo n'existe pas dans tblo1)
'Appelle de ta procédure Exemple pour faire copie
'Dans la feuille résultat de la données du claseur
'où est écrite la macro
D = D + 1
Worksheets("Résultat").Range("C" & D) = Tblo1(A, B)
On Error GoTo 0
End If
Next
Next

Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------


Salutations!




"tictok" a écrit dans le message de
news:e$

Bonjour a tous.
J'ai quelques problemes (doux euphemisme il est vrai :D) pour comparer la
cellule A d'un fichier avec la cellule A d'autre. Chaque fichier contient
environ 27000 lignes, donc ce n'est pas un petit fichier !
Les donnees des cellules a comparer sont des donnnees de type texte (non
des

valeurs).
Je voudrais evidemment automatiser cette comparaison avec VBA.
Le temps d'execution en lui meme n'est pas trop genant. Si ca dure des
heures mais que ca marche c'est parfait !

Premier probleme : est t'il preferable de faire la comparaison entre les
deux fichiers ou de copier le contenu du second dans le premier ?
Ca ne me gene pas du tout de copier le contenu, j'ai un PC assez puissant
pour ca. C'est surtout pour un probleme de vitesse d'execution et de
stabilite.

Second probleme : j'ai differents cas :
Si je trouve la meme donnée dans les deux listes, alors faire l'action
ACTION1.
Si j'ai la donnée dans le premier fichier et pas dans le second, alors
faire ACTION2.
Si j'ai la donnée dans le second fichier et pas dans le premier, alors
faire ACTION3.

Troisième probleme : le fait de ne pas trouver une donnée du premier
fichier

dans le second (et vice versa), peut on le faire en meme temps ou vaut
t'il

mieux separer ces procedures ?

A la fin, il faudra avoir tout analyser.
Mon probleme est difficile, surtout a cause de la quantite de données a
traiter.
Je remercie beaucoup d'avance toute personne pouvant m'aider !

(J'ai essaye une macro venant de http://www.excelabo.net/xl/comparer.php
mais sans grand succes.)





1 2