vba comparaison 2 fichiers excel
Bonjour à tous, voilà on a 2 fichiers l'un s'appelant test et l'autre test2, mon fichier test est mis a jour régulièrement mais il a besoin d'une donnée particulière dans le fichier test2.
contenu du fichier test.xls :
http://img11.hostingpics.net/pics/776534test.png
contenu du fichier test2.xls :
http://img11.hostingpics.net/pics/950254test2.png
On peut identifier les utilisateur de façon unique avec leur "id" présent dans chacun des fichiers, on voudrais dans le cas où on parle du même utilisateur ajouter les données de la colonne "code" de test2 aux utilisateurs correspondants dans test.
A savoir que ce sont bien sûr 2 fichiers excel et que je dois répéter plusieurs fois cette action car en réalité il y a des milliers d'utilisateurs.
Voilà un code fonctionnel pour cet exemple mais j'obtiens l'erreur "dépassement de capacité" pour les plus gros fichiers :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
Sub comparaison()
'Evite de voir les opérations intermédiaire sur les fichiers
Application.ScreenUpdating = False
'déclarations des variables
Dim i As Integer
Dim j As Integer
Dim Trouve As Integer
i = 2 'initialisation du compteur à 2 car la ligne 1 contient l'en-tête de chaque donnée
While (Workbooks("test.xlsm" ).Sheets(1).Cells(i, 2).Value <> "" ) ' tant que dans le fichier test la cellule en (ligne i, colonne B) n'est pas vide
j = 2
Trouve = 0 'cette variable sert d'indicateur si c'est à 0 on a rien trouvé ou 1 on a trouvé la cellule correspondante
While (Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 3).Value <> Null) & (Trouve = 0)
'si la cellule du fichier test2 correspond à celle de test alors
If (Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 3).Value = _
Workbooks("test.xlsm" ).Sheets(1).Cells(i, 2).Value) Then
Trouve = 1
'On copie le code à la ligne actuelle dans une nouvelle colonne
Workbooks("test.xlsm" ).Sheets(1).Cells(i, 3).Value = _
Workbooks("test2.xlsm" ).Sheets(1).Cells(j, 2).Value
'sinon on passe à la ligne suivante de icatfiltre
Else
j = j + 1
End If
Wend
i = i + 1
Wend |
On m'a conseillé d'utiliser la méthode Find mais j'avoue ne pas savoir comment l'adapter à ce code.
A savoir que la version d'office que j'utilise est la 2007.