Bonjour,
Je possède un dossier ("mon_dossier") qui contient "n" fichiers Excel (fiche1.xlsm, fiche2.xlsm,...) alliant tous la même architecture : 4 onglets différents dont le dernier "Compil" reprend les informations des précédents.
Je souhaite récupérer, dans la feuille "ma_feuille," les lignes non-vides des colonnes B à AX de l'onglet "Compil" de tous ces fichiers.
Ces lignes ainsi récupérées devront s'incrémenter les unes à la suite des autres afin de ne constituer qu'un seul fichier.
Pour cela j'ai créé une macro VBA dans le fichier "ma_feuille" qui récupère les informations de l'onglet "Compil" des fichiers "fiche*.xlsm" et les incrémente les unes après les autres.
L'utilisateur devra appuyer sur un bouton de commande pour lancer la macro. Ce bouton de commande est dans le fichier "ma_feuille" dans l'onglet "Execution" tandis que les informations récupérés des autre fichiers sont dans l'onglet "Base".
Voici mon 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Sub Transfert() Application.DisplayAlerts = False 'Evite les messages d'Excel Application.EnableEvents = False 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts ChDir ThisWorkbook.Path ' Répertoire application nb = ActiveSheet.UsedRange.Rows.Count 'Compte le nombre de ligne de la feuille Range("B" & nb + 1).Select nf = Dir("fiche*.xlsm") ' Première fiche MsgBox "Vous êtes en train de compiler le fichier " & nf Do While nf <> "" Workbooks.Open Filename:=nf Sheets("Compil").Activate nb_ligne = ActiveSheet.UsedRange.Rows.Count - 8 'Compte le nombre de ligne du fichier Compil Range("B9:AX" & nb_ligne).Copy ' Copie les données de la feuille Compil Windows("ma_feuille.xlsm").Activate Sheets("Base").Activate 'Colle la mise en forme Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _ , SkipBlanks:=False, Transpose:=False 'Colle les valeurs Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows(nf).Activate ActiveWorkbook.Close savechanges:=False ' Recopie le nom du fichier dans la première colonne ActiveCell.Offset(0, -1) = nf ActiveCell.Offset(nb_ligne + 1, 0).Select nf = Dir() ' Fiche suivante Loop 'Supprime l'extension du nom de fichier Columns("A:A").Replace ".xlsm", "" 'Ajustement des colonnes Cells.EntireColumn.AutoFit 'Supprime les lignes vides For Lin = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1 If Rows(Lin).Find("*") Is Nothing Then Rows(Lin).Delete Next Lin MsgBox "Compilation terminée" Sheets("Execution").Activate Application.EnableEvents = True Application.DisplayAlerts = True End Sub
Mon code est fonctionnel dans un certains cas: lorsque j'enregistre un fichier "fiche*.xlsm" lorsque le fichier "ma_feuille" est ouvert. Ainsi la macro se lance bien. Le problème que je rencontre est que si jamais j'ai enregistré le fichier "fiche*.xlsm" la veille ou que je n'ai pas enregistré ce fichier "fiche*.xlsm" lorsque le ficher "ma_feuille" est ouvert alors ma macro ne veut pas se lancer.
Je ne sais pas d'où vient ce problème, ni comment le résoudre. Avez-vous une idée?
Je vous remercie par avance de votre aide
Julie
Partager