Bonjour,
je suis débutant en VBA EXCEL et je suis en train d'écrire une MACRO qui me permettra de copier le contenu de différents tableaux, tous du même modèle, dans un seul tableau.
Je rencontre de gros problèmes pour réaliser cette opération toute bête.
On m'a conseillé la syntaxe suivante, qui est tout à fait conforme à ce qui se trouve sur tous les sites mais elle ne fonctionne pas dans mon cas :
j'ai essayé plusieurs syntaxes pas très élégantes telle que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Worksheets("Fichierdestination").Sheets(1).Range("A1").Offset(I) =Worksheets("Fichiersource").Sheets(1).Range("A1").Offset(J,K).Value
Ou bien encore :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Worksheets("Fichiersource").Sheets(1).Activate Range("A1").Offset(J,K).Select Selection.Copy Worksheets("Fichierdestination").Sheets(1).Activate Range("A1").Offset(I).Select ActiveSheet.Paste
Mais tout ça ne fonctionne pas. J'arrive à un résultat avec cette syntaxe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Worksheets("Fichiersource").Sheets(1).Activate Nom = Range("A1").Offset(J,K).Value Worksheets("Fichierdestination").Sheets(1).Activate Range("A1").Offset(I).Value = NOM
Ce code est destiné à me permettre d'intégrer dans mon fichier de destination les données contenues dans les 12 premières colonnes des fichiers sources file(I), tant que les lignes du fichier source ne sont pas vides (test du while). La variable LIGNE permet de copier le contenu des différents fichiers source les uns à la suite des autres. La variable CURSEUR de démarre la copie au bon endroit dans le fichier source.
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 While Range("A1").Offset(CURSEUR + 4).Value <> "" Workbooks(FICHRESULTAT).Sheets(1).Activate Range("A1").Offset(LIGNE).Value = DEPT For Z = 0 To 12 CLASSEUR.Activate Sheets(FEUILLLGT).Select VARIABLE = Range("A1").Offset(CURSEUR + 4, Z).Value Workbooks(FICHRESULTAT).Activate Sheets(1).Select Range("B1").Offset(LIGNE, Z) = Z & VARIABLE Next LIGNE = LIGNE + 1 CURSEUR = CURSEUR + 1 CLASSEUR.Sheets(FEUILLLGT).Activate Wend
Sauf que ça ne fonctionne pas toujours.
A savoir, pour certains fichiers, ça marche impeccable : il n'y a donc pas d'erreur au niveau des indices.
Pour d'autres je parviens à coller la valeur de la variable DEPT dans la première colonne, puis rien du tout. En fait je me suis apperçu que le contenu collé dans le fichier de destination était nul car si je fais coller la concaténation de l'indice Z avec le contenu de la variable VARIABLE, les valeurs de Z sont insérées au bon endroit et avec la bonne valeur, dans mon fichier de destination.
Je me demande si le problème ne varie pas en fonction du contenu des cellules, textes et nombre par exemple, mais ce n'est même pas certain. Bref, je patauge.
Si quelqu'un pouvait m'aider, je lui en serait très reconnaissant.
L'ensemble de mon code donne à peu près cela :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 Set fs = Application.FileSearch ' Exploration du répertoire REPERTOIRE With fs .LookIn = REPERTOIREBASE .Filename = "*." & EXTENSION For I = 1 To .FoundFiles.Count 'J'execute une boucle pour traiter tous les fichiers xls du répertoire Workbooks(FICHRESULTAT).Sheets(2).Activate Range("A1").Offset(I).Value = .FoundFiles(I) 'j'inscris le nom du fichier courant dans la 1ere colonne de la feuille 2 du fichier de sortie Workbooks.Open Filename:=.FoundFiles(I) Set CLASSEUR = ActiveWorkbook FEUILLLGT = "Logements" DEPT = "" 'Mise à zero de la valeur DEPT CURSEUR = 0 ' Mise à zero de la valeur CURSEUR NEANT = True 'je supppose par défaut que le fichier est vide CLASSEUR.Activate Sheets(FEUILLLGT).Select '(je ne recopie pas le code qui m'a permis de trouver le contenu de la variable DEPT et les indices I et J, tout va bien de ce côté) Range("A1").Offset(J, K).Select DEPT = Selection.Offset(0, 1).Value If Not NEANT Then While Range("A1").Offset(CURSEUR + 4).Value <> "" Workbooks(FICHRESULTAT).Sheets(1).Activate Range("A1").Offset(LIGNE).Value = DEPT For Z = 0 To 12 CLASSEUR.Activate Sheets(FEUILLLGT).Select VARIABLE = Range("A1").Offset(CURSEUR + 4, Z).Value Workbooks(FICHRESULTAT).Activate Sheets(1).Select Range("B1").Offset(LIGNE, Z) = Z & VARIABLE Next LIGNE = LIGNE + 1 CURSEUR = CURSEUR + 1 CLASSEUR.Sheets(FEUILLLGT).Activate Wend Else Workbooks(FICHRESULTAT).Sheets(3).Activate Range("A1") = "Fichiers néant" Range("A1").Offset(I + 1) = DEPT End If Workbooks(FICHRESULTAT).Sheets(2).Activate Range("A1").Offset(I).Value = CURSEUR - 3 - J CLASSEUR.Close Next I Else ' Si aucun fichier ne correspond à l'extension EXTENSION MsgBox "Aucun fichier n'a été trouvé." End If End With
Partager