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

[2ND] Comparer deux fichier de plus de 20000 lignes

11 réponses
Avatar
tictok
Bonjour a tous !

Je debute en VB et j'ai voici mon probleme : comparer deux gros fichiers et
faire des actions en consequence.
J'ai deux fichiers aux structures identiques : les colonnes A a E sont
remplies de donnnees (des dizaines de milliers de lignes : entre 10000 et
50000 selon le fichier).
--> Les tableaux des deux fichiers sont tries selon la colonne A, par ordre
croissant, de la meme facon. <--
La colonne A sera celle a comparer.
La colonne B ne sera jamais modifiee ni comparee.
Les colonnes C, D, E seront modifiees dans certains cas mais aucunement
comparees.

!!! Attention a ceux qui m'ont deja repondu (merci beaucoup a eux), j'ai un
peu modifie mon probleme mais le principe est le meme !!!

Les colonnes A contiennent des codes (chaine des caracteres au format
texte).
Je veux comparer les cellules des colonnes A de la facon suivante :

LE CODE EST DANS LES DEUX FICHIERS :
La cellule de la colonne C du premier fichier est égale à celle du
deuxième fichier.
La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
Ecrire dans la cellule de la colonne F du premier fichier la chaine "OK"
Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaS".
LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"CaB".
LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaC".

Si je le traduis en CONDITIONELLE :

POUR CHAQUE cellule de la colonne A du fichier1 :
POUR CHAQUE cellule de la colonne A du fichier2 :
SI la cellule du fichier1 est egale a celle du fichier2, ALORS
La valeur de la cellule du fichier1 decalee de 2 colonnes est
egale a celle du fichier2 decalee de 2 colonnes.ALORS
La valeur de la cellule du fichier1 decalee de 3 colonnes est
egale a celle du fichier2 decalee de 3 colonnes.
La valeur de la cellule du fichier1 decalee de 5 colonnes est
egale a la valeur "OK".
La valeur de la cellule du fichier2 decalee de 5 colonnes est
egale a la valeur "CaS".

SINON
La valeur de la cellule du fichier1 decalee de 5 colonnes est
egale a la valeur "CaB".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

POUR CHAQUE cellule de la colonne A du fichier2 :
POUR CHAQUE cellule de la colonne A du fichier1 :
SI la cellule du fichier2 N'EST PAS egale a celle du fichier1, ALORS
La valeur de la cellule du fichier2 decalee de 5 colonnes est
egale a la valeur "Cac".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

Cette mise en forme conditionnelle reprend en gros la structure du code
donné par michdenis.
Cependant, si le programme a trouve un code dans les deux colonnes, il faut
qu'il recommence sa procedure a la cellule suivante et non continuer a
chercher !


Voila, j'espere avoir eclairci les idees de ceux qui m'ont aide et avoir
donne assez d'infos pour m'aider.

10 réponses

1 2
Avatar
Pascal Engelmajer
Salut,
je peux t'adapter ma procédure si tu le désire...

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"tictok" a écrit dans le message de news:

Bonjour a tous !

Je debute en VB et j'ai voici mon probleme : comparer deux gros fichiers
et

faire des actions en consequence.
J'ai deux fichiers aux structures identiques : les colonnes A a E sont
remplies de donnnees (des dizaines de milliers de lignes : entre 10000 et
50000 selon le fichier).
--> Les tableaux des deux fichiers sont tries selon la colonne A, par
ordre

croissant, de la meme facon. <--
La colonne A sera celle a comparer.
La colonne B ne sera jamais modifiee ni comparee.
Les colonnes C, D, E seront modifiees dans certains cas mais aucunement
comparees.

!!! Attention a ceux qui m'ont deja repondu (merci beaucoup a eux), j'ai
un

peu modifie mon probleme mais le principe est le meme !!!

Les colonnes A contiennent des codes (chaine des caracteres au format
texte).
Je veux comparer les cellules des colonnes A de la facon suivante :

LE CODE EST DANS LES DEUX FICHIERS :
La cellule de la colonne C du premier fichier est égale à celle du
deuxième fichier.
La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"OK"

Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaS".
LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"CaB".
LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaC".

Si je le traduis en CONDITIONELLE :

POUR CHAQUE cellule de la colonne A du fichier1 :
POUR CHAQUE cellule de la colonne A du fichier2 :
SI la cellule du fichier1 est egale a celle du fichier2, ALORS
La valeur de la cellule du fichier1 decalee de 2 colonnes est
egale a celle du fichier2 decalee de 2 colonnes.ALORS
La valeur de la cellule du fichier1 decalee de 3 colonnes est
egale a celle du fichier2 decalee de 3 colonnes.
La valeur de la cellule du fichier1 decalee de 5 colonnes est
egale a la valeur "OK".
La valeur de la cellule du fichier2 decalee de 5 colonnes est
egale a la valeur "CaS".

SINON
La valeur de la cellule du fichier1 decalee de 5 colonnes est
egale a la valeur "CaB".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

POUR CHAQUE cellule de la colonne A du fichier2 :
POUR CHAQUE cellule de la colonne A du fichier1 :
SI la cellule du fichier2 N'EST PAS egale a celle du fichier1,
ALORS

La valeur de la cellule du fichier2 decalee de 5 colonnes est
egale a la valeur "Cac".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

Cette mise en forme conditionnelle reprend en gros la structure du code
donné par michdenis.
Cependant, si le programme a trouve un code dans les deux colonnes, il
faut

qu'il recommence sa procedure a la cellule suivante et non continuer a
chercher !


Voila, j'espere avoir eclairci les idees de ceux qui m'ont aide et avoir
donne assez d'infos pour m'aider.




Avatar
tictok
Apres reflexion, ma traduction conditionnelle ne doit pas etre bonne.
Car, pour chaque cellule, le programme doit faire commme la fonction
"Rechercher" d'Office.
S'il trouve, il me selectionne la cellule. S'il ne la trouve pas, il me dit
"Mot recherché non trouvé".
Dans mon cas, s'il trouve la meme valeur, il fait les 4 actions demandees.
S'il ne trouve pas, il doit aller jusqu'a la derniere cellule non vide de la
colonne pour ecrire une chaine dans la colonne F.

"tictok" escreveu na mensagem
news:
Bonjour a tous !

Je debute en VB et j'ai voici mon probleme : comparer deux gros fichiers
et

faire des actions en consequence.
J'ai deux fichiers aux structures identiques : les colonnes A a E sont
remplies de donnnees (des dizaines de milliers de lignes : entre 10000 et
50000 selon le fichier).
--> Les tableaux des deux fichiers sont tries selon la colonne A, par
ordre

croissant, de la meme facon. <--
La colonne A sera celle a comparer.
La colonne B ne sera jamais modifiee ni comparee.
Les colonnes C, D, E seront modifiees dans certains cas mais aucunement
comparees.

!!! Attention a ceux qui m'ont deja repondu (merci beaucoup a eux), j'ai
un

peu modifie mon probleme mais le principe est le meme !!!

Les colonnes A contiennent des codes (chaine des caracteres au format
texte).
Je veux comparer les cellules des colonnes A de la facon suivante :

LE CODE EST DANS LES DEUX FICHIERS :
La cellule de la colonne C du premier fichier est égale à celle du
deuxième fichier.
La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"OK"

Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaS".
LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"CaB".
LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaC".

Si je le traduis en CONDITIONELLE :

POUR CHAQUE cellule de la colonne A du fichier1 :
POUR CHAQUE cellule de la colonne A du fichier2 :
SI la cellule du fichier1 est egale a celle du fichier2, ALORS
La valeur de la cellule du fichier1 decalee de 2 colonnes est
egale a celle du fichier2 decalee de 2 colonnes.ALORS
La valeur de la cellule du fichier1 decalee de 3 colonnes est
egale a celle du fichier2 decalee de 3 colonnes.
La valeur de la cellule du fichier1 decalee de 5 colonnes est
egale a la valeur "OK".
La valeur de la cellule du fichier2 decalee de 5 colonnes est
egale a la valeur "CaS".

SINON
La valeur de la cellule du fichier1 decalee de 5 colonnes est
egale a la valeur "CaB".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

POUR CHAQUE cellule de la colonne A du fichier2 :
POUR CHAQUE cellule de la colonne A du fichier1 :
SI la cellule du fichier2 N'EST PAS egale a celle du fichier1,
ALORS

La valeur de la cellule du fichier2 decalee de 5 colonnes est
egale a la valeur "Cac".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

Cette mise en forme conditionnelle reprend en gros la structure du code
donné par michdenis.
Cependant, si le programme a trouve un code dans les deux colonnes, il
faut

qu'il recommence sa procedure a la cellule suivante et non continuer a
chercher !


Voila, j'espere avoir eclairci les idees de ceux qui m'ont aide et avoir
donne assez d'infos pour m'aider.




Avatar
tictok
Je ne vais pas dire non ;). Merci pour les commentaires, ca aide pas mal.
Par contre :
- ou dois je rajouter le
Option Explicit
Dim tA1 As Variant 'colonne A du premier fichier
Dim tA2 As Variant 'colonne A du second fichier
Dim tC1 As Variant 'colonne C du premier fichier
Dim tC2 As Variant 'colonne C du second fichier
Dim tE1 As Variant 'colonne E du premier fichier
Dim tE2 As Variant 'colonne E du second fichier
???
- Le Option Explicit ne marche pas (je ne dois pas le mettre ou il faut je
pense).
- J'ai lance la procedure en rajoutant le bloc du haut dans la procedure
principale et les Dim ... As ... correspondant aux variables utilisees dans
les sous procedures.
J'ai une erreur de type13 quand le programme veut realiser << tE2(pt2,
1) = "CaC" >> dans "Sub action3(pt2 As Long)".
- As tu lu ma reponse a ce post ? Car j'ai des doutes quant a ma traduction
conditionnelle. Je veux bien un balyage de toute la colonne si la valeur
n'est pas trouvee. Enfin lis plutot mon message.

Merci

"Pascal Engelmajer" escreveu na mensagem
news:
Salut,
je peux t'adapter ma procédure si tu le désire...

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"tictok" a écrit dans le message de news:

Bonjour a tous !

Je debute en VB et j'ai voici mon probleme : comparer deux gros fichiers
et

faire des actions en consequence.
J'ai deux fichiers aux structures identiques : les colonnes A a E sont
remplies de donnnees (des dizaines de milliers de lignes : entre 10000
et


50000 selon le fichier).
--> Les tableaux des deux fichiers sont tries selon la colonne A, par
ordre

croissant, de la meme facon. <--
La colonne A sera celle a comparer.
La colonne B ne sera jamais modifiee ni comparee.
Les colonnes C, D, E seront modifiees dans certains cas mais aucunement
comparees.

!!! Attention a ceux qui m'ont deja repondu (merci beaucoup a eux), j'ai
un

peu modifie mon probleme mais le principe est le meme !!!

Les colonnes A contiennent des codes (chaine des caracteres au format
texte).
Je veux comparer les cellules des colonnes A de la facon suivante :

LE CODE EST DANS LES DEUX FICHIERS :
La cellule de la colonne C du premier fichier est égale à celle du
deuxième fichier.
La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"OK"

Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaS".
LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"CaB".
LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaC".

Si je le traduis en CONDITIONELLE :

POUR CHAQUE cellule de la colonne A du fichier1 :
POUR CHAQUE cellule de la colonne A du fichier2 :
SI la cellule du fichier1 est egale a celle du fichier2, ALORS
La valeur de la cellule du fichier1 decalee de 2 colonnes
est


egale a celle du fichier2 decalee de 2 colonnes.ALORS
La valeur de la cellule du fichier1 decalee de 3 colonnes
est


egale a celle du fichier2 decalee de 3 colonnes.
La valeur de la cellule du fichier1 decalee de 5 colonnes
est


egale a la valeur "OK".
La valeur de la cellule du fichier2 decalee de 5 colonnes
est


egale a la valeur "CaS".

SINON
La valeur de la cellule du fichier1 decalee de 5 colonnes
est


egale a la valeur "CaB".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

POUR CHAQUE cellule de la colonne A du fichier2 :
POUR CHAQUE cellule de la colonne A du fichier1 :
SI la cellule du fichier2 N'EST PAS egale a celle du fichier1,
ALORS

La valeur de la cellule du fichier2 decalee de 5 colonnes
est


egale a la valeur "Cac".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

Cette mise en forme conditionnelle reprend en gros la structure du code
donné par michdenis.
Cependant, si le programme a trouve un code dans les deux colonnes, il
faut

qu'il recommence sa procedure a la cellule suivante et non continuer a
chercher !


Voila, j'espere avoir eclairci les idees de ceux qui m'ont aide et avoir
donne assez d'infos pour m'aider.








Avatar
Pascal Engelmajer
Salut,
ça le fait.
voir dans le code ce qu'il faut modifier....
Option Explicit
Dim tA1 As Variant 'colonne A du premier fichier
Dim tA2 As Variant 'colonne A du second fichier
Dim tC1 As Variant 'colonne C du premier fichier
Dim tD1 As Variant 'colonne D du premier fichier
Dim tC2 As Variant 'colonne C du second fichier
Dim tD2 As Variant 'colonne D du second fichier
Dim tF1 As Variant 'colonne F du premier fichier
Dim tF2 As Variant 'colonne F du second fichier

Sub appareillage()
Debug.Print Time
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim plA1 As Range 'colonne A du premier fichier
Dim derA1 As Range 'cellule butoir colonne A du premier fichier
Dim plA2 As Range 'colonne A du second fichier
Dim derA2 As Range 'cellule butoir colonne A du second fichier
Dim plC1 As Range 'colonne C du premier fichier
Dim plC2 As Range 'colonne C du second fichier
Dim plD1 As Range 'colonne D du premier fichier
Dim plD2 As Range 'colonne D du second fichier
Dim plF1 As Range 'colonne F du premier fichier
Dim plF2 As Range 'colonne F du second fichier
Dim pt1 As Long
Dim pt2 As Long
Dim supPt1 As Long
Dim supPt2 As Long
Application.ScreenUpdating = False
Const maxValeur = "zzzzzzzzzzzzzzzzzzz"
'remplacer les lignes du test ================================== Set wb1 = ActiveWorkbook
Set wb2 = ActiveWorkbook
'par
'Set wb1 = Workbooks.Open("fic1.xls")
'Set wb2 = Workbooks.Open("fic2.xls")

Set sh1 = wb1.Sheets(1)
'============================================================== 'remplacer les lignes du test ================================== Set sh2 = wb2.Sheets(2)
'par
'Set sh2 = wb2.Sheets(1)
'============================================================== 'classeur 1
Set derA1 = sh1.Range("A65536").End(xlUp).Offset(1)
derA1.Value = maxValeur 'valeur destinée à borner le fichier
supPt1 = derA1.Row
Set plA1 = Range(sh1.Range("A1"), derA1)
tA1 = plA1.Value
'classeur 2
Set derA2 = sh2.Range("A65536").End(xlUp).Offset(1)
derA2.Value = maxValeur 'valeur destinée à borner le fichier
supPt2 = derA2.Row
Set plA2 = Range(sh2.Range("A1"), derA2)
tA2 = plA2.Value
'colonnes C et E
Set plC1 = Range(sh1.Range("C1"), sh1.Range("C" & supPt1))
Set plD1 = Range(sh1.Range("D1"), sh1.Range("D" & supPt1))
Set plF1 = Range(sh1.Range("F1"), sh1.Range("F" & supPt1))
Set plC2 = Range(sh2.Range("C1"), sh2.Range("C" & supPt2))
Set plD2 = Range(sh2.Range("D1"), sh2.Range("D" & supPt2))
Set plF2 = Range(sh2.Range("F1"), sh2.Range("F" & supPt2))
tC1 = plC1.Value
tD1 = plD1.Value
tF1 = plF1.Value
tC2 = plC2.Value
tD2 = plD2.Value
tF2 = plF2.Value
' Lire la première cellule du fichier Fic1, (et l'appeler cellFic1);
pt1 = 1 'on utilise les pointeurs
' Lire la première cellule du fichier Fic2, (et l'appeler cellFic2);
pt2 = 1
' DO WHILE < il y a des cellules non vides dans Fic1 ou Fic2 >
Do While (pt1 < supPt1) Or (pt2 < supPt2)
' IF cellFic1.Value < cellFic2.Value
If tA1(pt1, 1) < tA2(pt2, 1) Then
' THEN < traitement présent dans Fic2 seulement >;
action2 pt1
'< remplacer cellFic1 par la cellule
' suivante du fichier Fic1 >
pt1 = IIf(pt1 < supPt1, pt1 + 1, pt1)
' ELSE
' IF cellFic1.Value = cellFic2.Value
ElseIf tA1(pt1, 1) = tA2(pt2, 1) Then
' THEN < traitement présent dans les deux>;
action1 pt1, pt2
' < remplacer cellFic1 par la cellule
' suivante du fichier Fic1>
pt1 = IIf(pt1 < supPt1, pt1 + 1, pt1)
' < remplacer cellFic2 par la cellule
' suivante du fichier Fic2>
pt2 = IIf(pt2 < supPt2, pt2 + 1, pt2)
' ELSE < traitement présent dans Fic2 seulement>
Else
action3 pt2
' < remplacer cellFic2 par la cellule
' suivante du fichier Fic2>
pt2 = IIf(pt2 < supPt2, pt2 + 1, pt2)
End If
Loop
'écriture sur les feuilles
plC1.Value = tC1
plD1.Value = tD1
plF1.Value = tF1
plF2.Value = tF2
derA1.EntireRow.Delete 'efface la ligne maxValue
derA2.EntireRow.Delete 'efface la ligne maxValue
Application.ScreenUpdating = True
Debug.Print Time
End Sub
Sub action1(pt1 As Long, pt2 As Long)
'--> Les tableaux des deux fichiers sont tries selon la colonne A, par ordre
'croissant, de la même façon. <--
'La colonne A sera celle a comparer.
'La colonne B ne sera jamais modifie ni comparée.
'Les colonnes C, D, E seront modifies dans certains cas mais aucunement
'comparées.

'Les colonnes A contiennent des codes (chaîne des caractères au format
texte).
'Je veux comparer les cellules des colonnes A de la façon suivante :
' LE CODE EST DANS LES DEUX FICHIERS :
' La cellule de la colonne C du premier fichier est égale à celle du
' deuxième fichier.
' La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
' Écrire dans la cellule de la colonne F du premier fichier la chaîne
"OK"
' Écrire dans la cellule de la colonne F du deuxième fichier la chaîne
"CaS".
tC1(pt1, 1) = tC2(pt2, 1)
tD1(pt1, 1) = tD2(pt2, 1)
tF1(pt1, 1) = "OK"
tF2(pt2, 1) = "CaS"
End Sub
Sub action2(pt1 As Long)
'LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
' Écrire dans la cellule de la colonne F du premier fichier la chaîne
'"CaB".

tF1(pt1, 1) = "CB"
End Sub
Sub action3(pt2 As Long)
'LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
' Écrire dans la cellule de la colonne F du deuxième fichier la chaîne
'"CaC".
tF2(pt2, 1) = "CaC"
End Sub


--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"tictok" a écrit dans le message de news:

Bonjour a tous !

Je debute en VB et j'ai voici mon probleme : comparer deux gros fichiers
et

faire des actions en consequence.
J'ai deux fichiers aux structures identiques : les colonnes A a E sont
remplies de donnnees (des dizaines de milliers de lignes : entre 10000 et
50000 selon le fichier).
--> Les tableaux des deux fichiers sont tries selon la colonne A, par
ordre

croissant, de la meme facon. <--
La colonne A sera celle a comparer.
La colonne B ne sera jamais modifiee ni comparee.
Les colonnes C, D, E seront modifiees dans certains cas mais aucunement
comparees.

!!! Attention a ceux qui m'ont deja repondu (merci beaucoup a eux), j'ai
un

peu modifie mon probleme mais le principe est le meme !!!

Les colonnes A contiennent des codes (chaine des caracteres au format
texte).
Je veux comparer les cellules des colonnes A de la facon suivante :

LE CODE EST DANS LES DEUX FICHIERS :
La cellule de la colonne C du premier fichier est égale à celle du
deuxième fichier.
La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"OK"

Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaS".
LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"CaB".
LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaC".

Si je le traduis en CONDITIONELLE :

POUR CHAQUE cellule de la colonne A du fichier1 :
POUR CHAQUE cellule de la colonne A du fichier2 :
SI la cellule du fichier1 est egale a celle du fichier2, ALORS
La valeur de la cellule du fichier1 decalee de 2 colonnes est
egale a celle du fichier2 decalee de 2 colonnes.ALORS
La valeur de la cellule du fichier1 decalee de 3 colonnes est
egale a celle du fichier2 decalee de 3 colonnes.
La valeur de la cellule du fichier1 decalee de 5 colonnes est
egale a la valeur "OK".
La valeur de la cellule du fichier2 decalee de 5 colonnes est
egale a la valeur "CaS".

SINON
La valeur de la cellule du fichier1 decalee de 5 colonnes est
egale a la valeur "CaB".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

POUR CHAQUE cellule de la colonne A du fichier2 :
POUR CHAQUE cellule de la colonne A du fichier1 :
SI la cellule du fichier2 N'EST PAS egale a celle du fichier1,
ALORS

La valeur de la cellule du fichier2 decalee de 5 colonnes est
egale a la valeur "Cac".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

Cette mise en forme conditionnelle reprend en gros la structure du code
donné par michdenis.
Cependant, si le programme a trouve un code dans les deux colonnes, il
faut

qu'il recommence sa procedure a la cellule suivante et non continuer a
chercher !


Voila, j'espere avoir eclairci les idees de ceux qui m'ont aide et avoir
donne assez d'infos pour m'aider.




Avatar
Pascal Engelmajer
Salut,
Dans mon cas, s'il trouve la même valeur, il fait les quatre actions
demandées.

OK
S'il ne trouve pas, il doit aller jusqu'a la dernière cellule non vide de
la

colonne pour écrire une chaîne dans la colonne F.
? la dernier cellule non vide de la colonne pour ...

la dernier cellule non vide de quelle colonne (A ? F ?) de quelle feuille ?
...
Écris un exemple avec cinq ou six lignes présentant tous les cas possibles
fic1 avant traitement
A B C D E F
A1 a a a a a

fic1 après traitement

A B C D E F
A1 a b b a OK


fic2 avant traitement
A B C D E F
A1 b b b b b
fic2 après traitement
A B C D E F
A1 b b b b OK

etc.
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"tictok" a écrit dans le message de news:

Apres reflexion, ma traduction conditionnelle ne doit pas etre bonne.
Car, pour chaque cellule, le programme doit faire commme la fonction
"Rechercher" d'Office.
S'il trouve, il me selectionne la cellule. S'il ne la trouve pas, il me
dit

"Mot recherché non trouvé".
Dans mon cas, s'il trouve la meme valeur, il fait les 4 actions demandees.
S'il ne trouve pas, il doit aller jusqu'a la derniere cellule non vide de
la

colonne pour ecrire une chaine dans la colonne F.

"tictok" escreveu na mensagem
news:
Bonjour a tous !

Je debute en VB et j'ai voici mon probleme : comparer deux gros fichiers
et

faire des actions en consequence.
J'ai deux fichiers aux structures identiques : les colonnes A a E sont
remplies de donnnees (des dizaines de milliers de lignes : entre 10000
et


50000 selon le fichier).
--> Les tableaux des deux fichiers sont tries selon la colonne A, par
ordre

croissant, de la meme facon. <--
La colonne A sera celle a comparer.
La colonne B ne sera jamais modifiee ni comparee.
Les colonnes C, D, E seront modifiees dans certains cas mais aucunement
comparees.

!!! Attention a ceux qui m'ont deja repondu (merci beaucoup a eux), j'ai
un

peu modifie mon probleme mais le principe est le meme !!!

Les colonnes A contiennent des codes (chaine des caracteres au format
texte).
Je veux comparer les cellules des colonnes A de la facon suivante :

LE CODE EST DANS LES DEUX FICHIERS :
La cellule de la colonne C du premier fichier est égale à celle du
deuxième fichier.
La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"OK"

Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaS".
LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
Ecrire dans la cellule de la colonne F du premier fichier la chaine
"CaB".
LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
Ecrire dans la cellule de la colonne F du deuxième fichier la chaine
"CaC".

Si je le traduis en CONDITIONELLE :

POUR CHAQUE cellule de la colonne A du fichier1 :
POUR CHAQUE cellule de la colonne A du fichier2 :
SI la cellule du fichier1 est egale a celle du fichier2, ALORS
La valeur de la cellule du fichier1 decalee de 2 colonnes
est


egale a celle du fichier2 decalee de 2 colonnes.ALORS
La valeur de la cellule du fichier1 decalee de 3 colonnes
est


egale a celle du fichier2 decalee de 3 colonnes.
La valeur de la cellule du fichier1 decalee de 5 colonnes
est


egale a la valeur "OK".
La valeur de la cellule du fichier2 decalee de 5 colonnes
est


egale a la valeur "CaS".

SINON
La valeur de la cellule du fichier1 decalee de 5 colonnes
est


egale a la valeur "CaB".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

POUR CHAQUE cellule de la colonne A du fichier2 :
POUR CHAQUE cellule de la colonne A du fichier1 :
SI la cellule du fichier2 N'EST PAS egale a celle du fichier1,
ALORS

La valeur de la cellule du fichier2 decalee de 5 colonnes
est


egale a la valeur "Cac".
FIN de la deuxieme boucle "POUR CHAQUE".
FIN de la premiere boucle "POUR CHAQUE".

Cette mise en forme conditionnelle reprend en gros la structure du code
donné par michdenis.
Cependant, si le programme a trouve un code dans les deux colonnes, il
faut

qu'il recommence sa procedure a la cellule suivante et non continuer a
chercher !


Voila, j'espere avoir eclairci les idees de ceux qui m'ont aide et avoir
donne assez d'infos pour m'aider.








Avatar
tictok
Excuses moi, je me suis trompe quelque part !
Revoici ce qu'il faut faire :
LE CODE EST DANS LES DEUX FICHIERS
La cellule de la colonne C du premier fichier est égale à celle du
deuxième fichier.
La cellule de la colonne E du premier fichier est égale à celle du
deuxième fichier.
Ecrire dans la cellule de la colonne D du premier fichier la chaîne "N"
Ecrire dans la cellule de la colonne F du premier fichier la chaîne
"OK".
Ecrire dans la cellule de la colonne F du deuxième fichier la chaîne
"CaS".
LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
Ecrire dans la cellule de la colonne F du premier fichier la chaîne
"CaB".
Ecrire dans la cellule de la colonne D du premier fichier la chaîne "B".
LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
Ecrire dans la cellule de la colonne F du deuxième fichier la chaîne
"CaC".
Ecrire dans la cellule de la colonne F du deuxième fichier la chaîne
"N".

Il ne fallait pas ecraser la valeur de la colonne D mais E.
Cela explique pourquoi ca ne marche pas trop (Cf. la suite).

J'ai donc excute ton code (avec les deux modifs que tu as precise) :
- moins de 5 secondes pour le faire, chapeau !
- Les colonnes F des deux fichiers sont entierement remplies. Aucune
cellule n'est vide : c'est bon signe !
- J'ai modifie ton code pour que ce soit la cellule E qui soit modifiee (et
pas D).
Ca marche.
MAIS
- Si le code contient des lettres ou un /, il dit qu'il faut le creer. Les
valeurs des colonnes A ne sont pas a traiter comme des valeurs (numeriques)
mais comme des chaines de caracteres (donc le fait que ca soit inferieur ou
superieur n'a pas de sens ...)
- J'ai essaye avec un autre couple de fichiers et la ton programme n'a pas
marche.
Un code qui existe pourtant dans les deux fichiers (je l'ai verifie) a ete
marque comme CB (fichier1) et Cac (fichier2).
Les procedures action2 et action3 ont ete faites au lieu de action1.

Ca a marche avec le premier couple de fichiers car le code etait a la ligne
30 (fichier1) et la ligne 70 (fichier2).
Ca n'a pas marche avec le second couple de fichiers car le code etait a la
ligne 150 (fichier1) et la ligne 40 (fichier2).
Donc, si le meme code est plus bas dans le fichier1 que dans le fichier2, il
y a une erreur ...
C'est pour ca qu'il faudrait que le programme balaie toute la colonne de
haut en bas jusqu'a trouver le code identique ... ou ne pas le trouver.

Donc, la procedure sur la colonne E ne marche pas. Mais le reste a l'air et
c'est deja une grande avance Pascal.
Serait t'il possible de poursuivre cette discussion par mail ? Je te
contacterai a ton mail (sans le "_spam" :D ).


"Pascal Engelmajer" escreveu na mensagem
news:
Salut,
ça le fait.
voir dans le code ce qu'il faut modifier....
Option Explicit
Dim tA1 As Variant 'colonne A du premier fichier
Dim tA2 As Variant 'colonne A du second fichier
Dim tC1 As Variant 'colonne C du premier fichier
Dim tD1 As Variant 'colonne D du premier fichier
Dim tC2 As Variant 'colonne C du second fichier
Dim tD2 As Variant 'colonne D du second fichier
Dim tF1 As Variant 'colonne F du premier fichier
Dim tF2 As Variant 'colonne F du second fichier

Sub appareillage()
Debug.Print Time
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim plA1 As Range 'colonne A du premier fichier
Dim derA1 As Range 'cellule butoir colonne A du premier fichier
Dim plA2 As Range 'colonne A du second fichier
Dim derA2 As Range 'cellule butoir colonne A du second fichier
Dim plC1 As Range 'colonne C du premier fichier
Dim plC2 As Range 'colonne C du second fichier
Dim plD1 As Range 'colonne D du premier fichier
Dim plD2 As Range 'colonne D du second fichier
Dim plF1 As Range 'colonne F du premier fichier
Dim plF2 As Range 'colonne F du second fichier
Dim pt1 As Long
Dim pt2 As Long
Dim supPt1 As Long
Dim supPt2 As Long
Application.ScreenUpdating = False
Const maxValeur = "zzzzzzzzzzzzzzzzzzz"
'remplacer les lignes du test ================================== > Set wb1 = ActiveWorkbook
Set wb2 = ActiveWorkbook
'par
'Set wb1 = Workbooks.Open("fic1.xls")
'Set wb2 = Workbooks.Open("fic2.xls")

Set sh1 = wb1.Sheets(1)
'============================================================== > 'remplacer les lignes du test ================================== > Set sh2 = wb2.Sheets(2)
'par
'Set sh2 = wb2.Sheets(1)
'============================================================== > 'classeur 1
Set derA1 = sh1.Range("A65536").End(xlUp).Offset(1)
derA1.Value = maxValeur 'valeur destinée à borner le fichier
supPt1 = derA1.Row
Set plA1 = Range(sh1.Range("A1"), derA1)
tA1 = plA1.Value
'classeur 2
Set derA2 = sh2.Range("A65536").End(xlUp).Offset(1)
derA2.Value = maxValeur 'valeur destinée à borner le fichier
supPt2 = derA2.Row
Set plA2 = Range(sh2.Range("A1"), derA2)
tA2 = plA2.Value
'colonnes C et E
Set plC1 = Range(sh1.Range("C1"), sh1.Range("C" & supPt1))
Set plD1 = Range(sh1.Range("D1"), sh1.Range("D" & supPt1))
Set plF1 = Range(sh1.Range("F1"), sh1.Range("F" & supPt1))
Set plC2 = Range(sh2.Range("C1"), sh2.Range("C" & supPt2))
Set plD2 = Range(sh2.Range("D1"), sh2.Range("D" & supPt2))
Set plF2 = Range(sh2.Range("F1"), sh2.Range("F" & supPt2))
tC1 = plC1.Value
tD1 = plD1.Value
tF1 = plF1.Value
tC2 = plC2.Value
tD2 = plD2.Value
tF2 = plF2.Value
' Lire la première cellule du fichier Fic1, (et l'appeler cellFic1);
pt1 = 1 'on utilise les pointeurs
' Lire la première cellule du fichier Fic2, (et l'appeler cellFic2);
pt2 = 1
' DO WHILE < il y a des cellules non vides dans Fic1 ou Fic2 >
Do While (pt1 < supPt1) Or (pt2 < supPt2)
' IF cellFic1.Value < cellFic2.Value
If tA1(pt1, 1) < tA2(pt2, 1) Then
' THEN < traitement présent dans Fic2 seulement >;
action2 pt1
'< remplacer cellFic1 par la cellule
' suivante du fichier Fic1 >
pt1 = IIf(pt1 < supPt1, pt1 + 1, pt1)
' ELSE
' IF cellFic1.Value = cellFic2.Value
ElseIf tA1(pt1, 1) = tA2(pt2, 1) Then
' THEN < traitement présent dans les deux>;
action1 pt1, pt2
' < remplacer cellFic1 par la cellule
' suivante du fichier Fic1>
pt1 = IIf(pt1 < supPt1, pt1 + 1, pt1)
' < remplacer cellFic2 par la cellule
' suivante du fichier Fic2>
pt2 = IIf(pt2 < supPt2, pt2 + 1, pt2)
' ELSE < traitement présent dans Fic2 seulement>
Else
action3 pt2
' < remplacer cellFic2 par la cellule
' suivante du fichier Fic2>
pt2 = IIf(pt2 < supPt2, pt2 + 1, pt2)
End If
Loop
'écriture sur les feuilles
plC1.Value = tC1
plD1.Value = tD1
plF1.Value = tF1
plF2.Value = tF2
derA1.EntireRow.Delete 'efface la ligne maxValue
derA2.EntireRow.Delete 'efface la ligne maxValue
Application.ScreenUpdating = True
Debug.Print Time
End Sub
Sub action1(pt1 As Long, pt2 As Long)
'--> Les tableaux des deux fichiers sont tries selon la colonne A, par
ordre

'croissant, de la même façon. <--
'La colonne A sera celle a comparer.
'La colonne B ne sera jamais modifie ni comparée.
'Les colonnes C, D, E seront modifies dans certains cas mais aucunement
'comparées.

'Les colonnes A contiennent des codes (chaîne des caractères au format
texte).
'Je veux comparer les cellules des colonnes A de la façon suivante :
' LE CODE EST DANS LES DEUX FICHIERS :
' La cellule de la colonne C du premier fichier est égale à celle du
' deuxième fichier.
' La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
' Écrire dans la cellule de la colonne F du premier fichier la chaîne
"OK"
' Écrire dans la cellule de la colonne F du deuxième fichier la chaîne
"CaS".
tC1(pt1, 1) = tC2(pt2, 1)
tD1(pt1, 1) = tD2(pt2, 1)
tF1(pt1, 1) = "OK"
tF2(pt2, 1) = "CaS"
End Sub
Sub action2(pt1 As Long)
'LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
' Écrire dans la cellule de la colonne F du premier fichier la chaîne
'"CaB".

tF1(pt1, 1) = "CB"
End Sub
Sub action3(pt2 As Long)
'LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
' Écrire dans la cellule de la colonne F du deuxième fichier la chaîne
'"CaC".
tF2(pt2, 1) = "CaC"
End Sub


--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel


Avatar
tictok
Regardes ma reponse de 13H40, elle contient les bonnes comparaisons.
Les colonnes A peuvent contenir des nombres mais il faut les traiter comme
des string.

la dernier cellule non vide de quelle colonne (A ? F ?) de quelle feuille
?

...
la derniere cellule non vide de la colonne A fichier2 pour ecrire une chaine

dans la colonne F fichier1 du code qu'on chercher a comparer.

Je pense qu'il faut modifier le programme et ecrire le "CaS" quand on
compare fichier1 par rapport a fichier2 et non plus le contraire commme on
faisait auparavant.

Tant que je n'ai pas atteint une cellule vide la colonne A fichier1 :
Je prends la valeur de la cellule A1 fichier1 (c'est une chaine de
caracteres).
Je cherche cette valeur dans la colonneA fichier2.
SI je la trouve, ALORS faire les actions necessaires (copie de cellules,
ecriture de "OK", "N"). Ensuite, aller a la cellule en dessous fichier1
(donc A2) et recommencer.
SINON (le programme doit donc avoir balayé toute
la colonne A fichier2 sans rien trouver), ecrire "CaB" dans la colonneF
fichier1. Ensuite, aller a la cellule en dessous fichier1 (donc A2) et
recommencer.

APRES

Tant que je n'ai pas atteint une cellule vide la colonne A fichier2 :
Je prends la valeur de la cellule A1 fichier2 (c'est une chaine de
caracteres).
Je cherche cette valeur dans la colonneA fichier1.
SI je la trouve, ALORS faire les actions necessaires (ecriture de "CaS"
dans colonne F fichier2). Ensuite, aller a la cellule en dessous fichier2
(donc A2) et recommencer.
SINON (le programme doit donc avoir balayé toute
la colonne A fichier1 sans rien trouver), ecrire "CaC" dans la colonneF
fichier2. Ensuite, aller a la cellule en dessous fichier2 (donc A2) et
recommencer.

Je sens que tu es perdu maintenant :-/ ...

"Pascal Engelmajer" escreveu na mensagem
news:
Salut,
Dans mon cas, s'il trouve la même valeur, il fait les quatre actions
demandées.

OK
S'il ne trouve pas, il doit aller jusqu'a la dernière cellule non vide
de


la
colonne pour écrire une chaîne dans la colonne F.
? la dernier cellule non vide de la colonne pour ...

la dernier cellule non vide de quelle colonne (A ? F ?) de quelle feuille
?

...
Écris un exemple avec cinq ou six lignes présentant tous les cas possibles
fic1 avant traitement
A B C D E F
A1 a a a a a

fic1 après traitement

A B C D E F
A1 a b b a OK


fic2 avant traitement
A B C D E F
A1 b b b b b
fic2 après traitement
A B C D E F
A1 b b b b OK

etc.
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel



Avatar
Pascal Engelmajer
Salut,
ok pour le mail
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"tictok" a écrit dans le message de news:

Excuses moi, je me suis trompe quelque part !
Revoici ce qu'il faut faire :
LE CODE EST DANS LES DEUX FICHIERS
La cellule de la colonne C du premier fichier est égale à celle du
deuxième fichier.
La cellule de la colonne E du premier fichier est égale à celle du
deuxième fichier.
Ecrire dans la cellule de la colonne D du premier fichier la chaîne
"N"

Ecrire dans la cellule de la colonne F du premier fichier la chaîne
"OK".
Ecrire dans la cellule de la colonne F du deuxième fichier la chaîne
"CaS".
LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
Ecrire dans la cellule de la colonne F du premier fichier la chaîne
"CaB".
Ecrire dans la cellule de la colonne D du premier fichier la chaîne
"B".

LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
Ecrire dans la cellule de la colonne F du deuxième fichier la chaîne
"CaC".
Ecrire dans la cellule de la colonne F du deuxième fichier la chaîne
"N".

Il ne fallait pas ecraser la valeur de la colonne D mais E.
Cela explique pourquoi ca ne marche pas trop (Cf. la suite).

J'ai donc excute ton code (avec les deux modifs que tu as precise) :
- moins de 5 secondes pour le faire, chapeau !
- Les colonnes F des deux fichiers sont entierement remplies. Aucune
cellule n'est vide : c'est bon signe !
- J'ai modifie ton code pour que ce soit la cellule E qui soit modifiee
(et

pas D).
Ca marche.
MAIS
- Si le code contient des lettres ou un /, il dit qu'il faut le creer.
Les

valeurs des colonnes A ne sont pas a traiter comme des valeurs
(numeriques)

mais comme des chaines de caracteres (donc le fait que ca soit inferieur
ou

superieur n'a pas de sens ...)
- J'ai essaye avec un autre couple de fichiers et la ton programme n'a
pas

marche.
Un code qui existe pourtant dans les deux fichiers (je l'ai verifie) a ete
marque comme CB (fichier1) et Cac (fichier2).
Les procedures action2 et action3 ont ete faites au lieu de action1.

Ca a marche avec le premier couple de fichiers car le code etait a la
ligne

30 (fichier1) et la ligne 70 (fichier2).
Ca n'a pas marche avec le second couple de fichiers car le code etait a la
ligne 150 (fichier1) et la ligne 40 (fichier2).
Donc, si le meme code est plus bas dans le fichier1 que dans le fichier2,
il

y a une erreur ...
C'est pour ca qu'il faudrait que le programme balaie toute la colonne de
haut en bas jusqu'a trouver le code identique ... ou ne pas le trouver.

Donc, la procedure sur la colonne E ne marche pas. Mais le reste a l'air
et

c'est deja une grande avance Pascal.
Serait t'il possible de poursuivre cette discussion par mail ? Je te
contacterai a ton mail (sans le "_spam" :D ).


"Pascal Engelmajer" escreveu na
mensagem

news:
Salut,
ça le fait.
voir dans le code ce qu'il faut modifier....
Option Explicit
Dim tA1 As Variant 'colonne A du premier fichier
Dim tA2 As Variant 'colonne A du second fichier
Dim tC1 As Variant 'colonne C du premier fichier
Dim tD1 As Variant 'colonne D du premier fichier
Dim tC2 As Variant 'colonne C du second fichier
Dim tD2 As Variant 'colonne D du second fichier
Dim tF1 As Variant 'colonne F du premier fichier
Dim tF2 As Variant 'colonne F du second fichier

Sub appareillage()
Debug.Print Time
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim plA1 As Range 'colonne A du premier fichier
Dim derA1 As Range 'cellule butoir colonne A du premier fichier
Dim plA2 As Range 'colonne A du second fichier
Dim derA2 As Range 'cellule butoir colonne A du second fichier
Dim plC1 As Range 'colonne C du premier fichier
Dim plC2 As Range 'colonne C du second fichier
Dim plD1 As Range 'colonne D du premier fichier
Dim plD2 As Range 'colonne D du second fichier
Dim plF1 As Range 'colonne F du premier fichier
Dim plF2 As Range 'colonne F du second fichier
Dim pt1 As Long
Dim pt2 As Long
Dim supPt1 As Long
Dim supPt2 As Long
Application.ScreenUpdating = False
Const maxValeur = "zzzzzzzzzzzzzzzzzzz"
'remplacer les lignes du test ================================== > > Set wb1 = ActiveWorkbook
Set wb2 = ActiveWorkbook
'par
'Set wb1 = Workbooks.Open("fic1.xls")
'Set wb2 = Workbooks.Open("fic2.xls")

Set sh1 = wb1.Sheets(1)
'============================================================== > > 'remplacer les lignes du test ================================== > > Set sh2 = wb2.Sheets(2)
'par
'Set sh2 = wb2.Sheets(1)
'============================================================== > > 'classeur 1
Set derA1 = sh1.Range("A65536").End(xlUp).Offset(1)
derA1.Value = maxValeur 'valeur destinée à borner le fichier
supPt1 = derA1.Row
Set plA1 = Range(sh1.Range("A1"), derA1)
tA1 = plA1.Value
'classeur 2
Set derA2 = sh2.Range("A65536").End(xlUp).Offset(1)
derA2.Value = maxValeur 'valeur destinée à borner le fichier
supPt2 = derA2.Row
Set plA2 = Range(sh2.Range("A1"), derA2)
tA2 = plA2.Value
'colonnes C et E
Set plC1 = Range(sh1.Range("C1"), sh1.Range("C" & supPt1))
Set plD1 = Range(sh1.Range("D1"), sh1.Range("D" & supPt1))
Set plF1 = Range(sh1.Range("F1"), sh1.Range("F" & supPt1))
Set plC2 = Range(sh2.Range("C1"), sh2.Range("C" & supPt2))
Set plD2 = Range(sh2.Range("D1"), sh2.Range("D" & supPt2))
Set plF2 = Range(sh2.Range("F1"), sh2.Range("F" & supPt2))
tC1 = plC1.Value
tD1 = plD1.Value
tF1 = plF1.Value
tC2 = plC2.Value
tD2 = plD2.Value
tF2 = plF2.Value
' Lire la première cellule du fichier Fic1, (et l'appeler cellFic1);
pt1 = 1 'on utilise les pointeurs
' Lire la première cellule du fichier Fic2, (et l'appeler cellFic2);
pt2 = 1
' DO WHILE < il y a des cellules non vides dans Fic1 ou Fic2 >
Do While (pt1 < supPt1) Or (pt2 < supPt2)
' IF cellFic1.Value < cellFic2.Value
If tA1(pt1, 1) < tA2(pt2, 1) Then
' THEN < traitement présent dans Fic2 seulement >;
action2 pt1
'< remplacer cellFic1 par la cellule
' suivante du fichier Fic1 >
pt1 = IIf(pt1 < supPt1, pt1 + 1, pt1)
' ELSE
' IF cellFic1.Value = cellFic2.Value
ElseIf tA1(pt1, 1) = tA2(pt2, 1) Then
' THEN < traitement présent dans les deux>;
action1 pt1, pt2
' < remplacer cellFic1 par la cellule
' suivante du fichier Fic1>
pt1 = IIf(pt1 < supPt1, pt1 + 1, pt1)
' < remplacer cellFic2 par la cellule
' suivante du fichier Fic2>
pt2 = IIf(pt2 < supPt2, pt2 + 1, pt2)
' ELSE < traitement présent dans Fic2 seulement>
Else
action3 pt2
' < remplacer cellFic2 par la cellule
' suivante du fichier Fic2>
pt2 = IIf(pt2 < supPt2, pt2 + 1, pt2)
End If
Loop
'écriture sur les feuilles
plC1.Value = tC1
plD1.Value = tD1
plF1.Value = tF1
plF2.Value = tF2
derA1.EntireRow.Delete 'efface la ligne maxValue
derA2.EntireRow.Delete 'efface la ligne maxValue
Application.ScreenUpdating = True
Debug.Print Time
End Sub
Sub action1(pt1 As Long, pt2 As Long)
'--> Les tableaux des deux fichiers sont tries selon la colonne A, par
ordre

'croissant, de la même façon. <--
'La colonne A sera celle a comparer.
'La colonne B ne sera jamais modifie ni comparée.
'Les colonnes C, D, E seront modifies dans certains cas mais aucunement
'comparées.

'Les colonnes A contiennent des codes (chaîne des caractères au format
texte).
'Je veux comparer les cellules des colonnes A de la façon suivante :
' LE CODE EST DANS LES DEUX FICHIERS :
' La cellule de la colonne C du premier fichier est égale à celle du
' deuxième fichier.
' La cellule de la colonne D du premier fichier est égale à celle du
deuxième fichier.
' Écrire dans la cellule de la colonne F du premier fichier la chaîne
"OK"
' Écrire dans la cellule de la colonne F du deuxième fichier la
chaîne


"CaS".
tC1(pt1, 1) = tC2(pt2, 1)
tD1(pt1, 1) = tD2(pt2, 1)
tF1(pt1, 1) = "OK"
tF2(pt2, 1) = "CaS"
End Sub
Sub action2(pt1 As Long)
'LE CODE EST DANS LE PREMIER FICHIER MAIS PAS DANS LE DEUXIEME
' Écrire dans la cellule de la colonne F du premier fichier la chaîne
'"CaB".

tF1(pt1, 1) = "CB"
End Sub
Sub action3(pt2 As Long)
'LE CODE EST DANS LE DEUXIEME FICHIER MAIS PAS DANS LE PREMIER :
' Écrire dans la cellule de la colonne F du deuxième fichier la
chaîne


'"CaC".
tF2(pt2, 1) = "CaC"
End Sub


--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel










Avatar
tictok
Avant traitement
Fichier 1 Fichier 1 Fichier 1 Fichier 1 Fichier 1 Fichier 1
A B C D E F
00002/44 fff ZZ 8,8
111/22 dfgefrd N 50
R34345 rferg B 4444
111 blablabla.. N 33,33


Avant traitement
Fichier2 Fichier2 Fichier2 Fichier2 Fichier2 Fichier2
A B C D E F
111 blablabla.. texte2 44,55
R34345 rferg 8664
009999 VLVLD FFFF 78,77


Apres traitement
Fichier 1 Fichier 1 Fichier 1 Fichier 1 Fichier 1 Fichier 1
A B C D E F
00002/44 fff B 8,8 CaB
111/22 dfgefrd B 50 CaB
R34345 rferg N 8664 OK
111 blablabla.. texte2 N 44,55 OK


Apres traitement
Fichier2 Fichier2 Fichier2 Fichier2 Fichier2 Fichier2
A B C D E F
111 blablabla.. texte2 N 44,55 CaS
R34345 rferg N 8664 CaS
00999 VLVLD FFFF N 78,77 CaC



Voila un exemple concret qui devrait t'aider a comprendre.
Je reprecise que seule la colonne E n'est pas au format texte et toutes les
cellules des autres colonnes (surtout la A !!!) sont a considerer comme des
string, meme si ce sont des valeurs numeriques.
Si es d'accord, on peut continuer par mail a
.

"Pascal Engelmajer" escreveu na mensagem
news:
Salut,
Dans mon cas, s'il trouve la même valeur, il fait les quatre actions
demandées.

OK
S'il ne trouve pas, il doit aller jusqu'a la dernière cellule non vide
de


la
colonne pour écrire une chaîne dans la colonne F.
? la dernier cellule non vide de la colonne pour ...

la dernier cellule non vide de quelle colonne (A ? F ?) de quelle feuille
?

...
Écris un exemple avec cinq ou six lignes présentant tous les cas possibles
fic1 avant traitement
A B C D E F
A1 a a a a a

fic1 après traitement

A B C D E F
A1 a b b a OK


fic2 avant traitement
A B C D E F
A1 b b b b b
fic2 après traitement
A B C D E F
A1 b b b b OK

etc.
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel



Avatar
Pascal Engelmajer
Salut,
Attention le fichier n'est pas trié par rapport à la colonne A ce qui est
indispensable pour l'algorithme
il faut :
00002/44
111
111/22
R34345


et non
00002/44
111/22
R34345
111
Amicalement
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
1 2