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