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.
Maintenant voilà mon problème :
J'obtiens l'erreur "mémoire insuffisante" après quelques recherche le problème viendrait du type de variable que j'utilise serait trop "petit" pour stocker le trop grand nombre de donnée présent dans les feuilles excel, mais j'avoue ne pas vraiment savoir où localiser le problème exactement, donc voici le code de la macro que j'utilise :
Code :
- 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
- Dim appExcel As Excel.Application
- Dim test2 As Excel.Workbook
- Dim tests2 As Excel.Worksheet
- Dim test As Excel.Workbook
- Dim tests As Excel.Worksheet
- 'parametrage d'appel des fichiers
- Set appExcel = CreateObject("Excel.Application" ) 'creation de l'objet permettant d'ouvrir le fichier excel
- Set test2 = appExcel.Workbooks.Open("chemin_vers_le_fichier_test2.xls" ) 'classeur
- Set tests2 = test2.Worksheets("nom_de_la_feuille" ) 'feuille
- Set test = appExcel.Workbooks.Open("chemin_vers_le_fichier_test.xls" )
- Set tests = test.Worksheets("nom_de_la_feuille" )
- i = 2 'initialisation du compteur à 2 car la ligne 1 contient l'en-tête de chaque donnée
- While (tests.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 (tests2.Cells(j, 3).Value <> Null) & (Trouve = 0)
-
- 'si la cellule du fichier test2 correspond à celle de test alors
- If (tests2.Cells(j, 3).Value = _
- tests.Cells(i, 2).Value) Then
- Trouve = 1
- 'On copie le code à la ligne actuelle dans une nouvelle colonne
- tests.Cells(i, 3).Value = _
- tests2.Cells(j, 2).Value
- 'sinon on passe à la ligne suivante de icatfiltre
- Else
-
- j = j + 1
-
- End If
- Wend
-
- i = i + 1
- Wend
- 'on ferme le classeur
- test.Close
- test2.Close
-
- End Sub
|
Est-ce que je m'y suis mal pris concernant le code? je suis libre à toute proposition, à savoir que les 2 fichiers se trouve dans le même dossier.
Je vous remercie d'avance
Message édité par furil le 11-05-2013 à 22:20:57