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 :

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
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.