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 :
contenu du fichier test2.xls :
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 :
On m'a conseillé d'utiliser la méthode Find mais j'avoue ne pas savoir comment l'adapter à ce code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
A savoir que la version d'office que j'utilise est la 2007.
Partager