Bonjour à tous,
J'ai un problème concernant un de mes scripts VBA. Je vais tenter d'être le plus clair possible.
Sur mon fichier Excel1, j'ai une suite de nombres tels que ci-dessous, avec des lignes vides parfois (obligatoire):
5250035
5250037
5430111
5450039
5450044
1010068
1010070
1030322
Ensuite, j'ai un fichier Excel3, où il y a les nombres du fichier Excel 1 mais aussi des nombres qui n'y sont pas, ainsi qu'une deuxième colonne avec d'autres nombres. Ici, il n'y a pas de lignes vides:
1010070 3
1030322 5
1050590 3
1050597 5
1580128 2
J'avais trouvé sur un ancien topic de futura-sciences une personne cherchant à comparer deux fichiers excel, comme moi, le script ci-dessous que j'ai tenté de modifier à ma sauce:
Code :
- Option Explicit
- Sub Macro1000()
- Dim Cellule As Range
- Dim Excel3 As Workbook
- Dim LastLine As Integer
- Dim LastLine2 As Integer
- Dim Tableau1() As Variant
- Dim Tableau2() As Variant
- Dim I As Integer
- Dim J As Integer
- Dim K As Integer
-
- ' On cherche le numéro de la dernière ligne utilisée dans la colonne A
- LastLine = Cells(Rows.Count, "A" ).End(xlUp).Row
-
- ' On redimensionne le tableau de façon dynamique
- ReDim Tableau1(LastLine)
-
- ' On charge le tableau avec les valeurs de la colonne A
- For I = 1 To LastLine
- Tableau1(I) = Range("A" & Trim(Str(I)))
- Next I
-
- ' On ouvre le fichier excel3.xlsm et on lui donne le focus
- Workbooks.Open Filename:=ActiveWorkbook.Path & "\Excel3.xlsm"
- Set Excel3 = ActiveWorkbook
- Excel3.Activate
-
- ' On cherche le numéro de la dernière ligne utilisée dans la colonne A
- LastLine2 = Cells(Rows.Count, "A" ).End(xlUp).Row
- ' On a besoin de stocker les valeurs de 1 colonne
- ReDim Tableau2(LastLine2)
-
- ' On scanne la colonne "Pointeur" avec les valeurs contenues dans le tableau
- For J = 1 To LastLine
- Set Cellule = ActiveSheet.Range("Pointeur" ).Find(Tableau1(I), lookat:=xlWhole)
- Tableau2(J) = Cellule.Offset(0, 1).Value
- Next J
-
- 'On referme le classeur excel3.xls dont on n'a plus besoin
- Excel3.Close
-
- ' On recopie le contenu du tableau dans la colonne B
- For K = 1 To LastLine
- Tableau2(J) = Range("B" & Trim(Str(K)))
- Next K
- End Sub
|
Si vous comprenez là où je veux en venir, c'est que sur mon Excel1, je retrouve les nombres de la deuxième colonne du fichier Excel3, et ainsi laisser vide les cellules où les nombres n'y sont pas, ainsi avoir, si on reprend l'exemple précédent:
5250035
5250037
5430111
5450039
5450044
1010068
1010070 3
1030322 5
Cependant, lorsque je tente de lancer le script, j'ai l'erreur suivante:
Erreur d'exécution "9"
L'indice n'appartient pas à la sélection
Selon moi, c'est le Tableau1 qui ne fonctionne pas bien, car il n'arrive pas à voir les lignes vides et celles qui n'existent pas dans la correspondance Excel1 <-> Excel3
J'ai tenté de mettre une itération "If", cependant je n'ai pas été avancé, et comme le VBA, je ne suis pas un spécialiste, je bloque.
C'est ainsi que je sollicite l'aide de personnes plus expérimentées que moi, car là je sèche.
Merci pour votre aide
Message édité par El_Cypriano le 29-01-2015 à 16:06:50