Code VBA non fonctionnel

Bonjour,

je cherche à créer une unique feuille excel dans un nouveau classeur qui reprendrais les données de 200 classeurs excel semblables (1 seule feuille excel, 26 colonnes comportant les mêmes en-têtes mais un nombre de ligne variable selon le fournisseur). J'ai mis tous ces fichiers .xlsx dans un seul dossier à part : C:\Users\Documents\fournisseurs\

J'ai trouvé ce code VBA en fouillant sur internet mais il ne fonctionne pas ? Erreur 1004.
Quand je décompose, ça bloque à l'étape 7. Le 1er fichier s'ouvre, une copie est créée mais ça s'arrête là

1. Sub recup()
2. Range("A1").Select
3. Chemin = "C:\Users\Documents\fournisseurs\"
4. Fichier = Dir(Chemin & "*.xlsx")
5. Do While Fichier <> ""
6. Workbooks.Open Filename:=Chemin & Fichier
7. Range("acopier").Copy
8. ThisWorkbook.Activate
9. ActiveSheet.Paste
10. Windows(Fichier).Activate
11. Application.CutCopyMode = False
12. ActiveWorkbook.Close savechanges:=False
13. ThisWorkbook.Activate
14. Range("A65536").End(xlUp).Offset(1, 0).Select
15. Fichier = Dir ' Fichier suivant
16. Loop
17. End Sub

J'ajoute que j'ai quand même fini par ouvrir chaque dossier 1 par 1 pour définir à chaque fois la plage de donnée "acopier" citée à cette étape 7. WTF ?

Ce sont mes premiers pas dans cet univers. Je crois que j'aurai été plus rapide à copier/coller tout seul mais je m'acharne ! et compte sur vous maintenant …

Merci d'avance !

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Teste comme ceci, la variable Dl définie la dernière ligne de chaque classeur ouvert
    Option Explicit
    
     Sub recup()
      Dim Dl%, Chemin$, Fichier$
      Range("A1").Select
      Chemin = "C:\Users\Documents\fournisseurs\"
      Fichier = Dir(Chemin & "*.xlsx")
        Do While Fichier <> ""
          Workbooks.Open Filename:=Chemin & Fichier
          Dl = Range("A" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne A
          Range("A1:A" & Dl).Copy 'Sélection de la cellule A2 à la cellule A et dernière ligne (à modifier suivant valeur à copier)
          ThisWorkbook.Activate
          ActiveSheet.Paste
          Windows(Fichier).Activate
          Application.CutCopyMode = False
          ActiveWorkbook.Close savechanges:=False
          ThisWorkbook.Activate
          Range("A65536").End(xlUp).Offset(1, 0).Select
          Fichier = Dir ' Fichier suivant
        Loop
     End Sub
    
    1. Merci pour la réponse ! J'ai essayé. Le code tourne. Les fichiers s'ouvrent les uns après les autres, je vois que les zones sélectionnées semblent bonnes, mais il n'y a rien de collé dans mon fichier macro.

      Je n'ai pas modifié la ligne 12, peut être est-ce là que le bas blesse : Range("A1:A" & Dl).Copy 'Sélection de la cellule A2 à la cellule A et dernière ligne (à modifier suivant valeur à copier) ?

      Je fais des tests pour voir...
    2. Re,
      Sans exemple devant mon nez, je ne peut deviner
    3. Un grand merci M-12 ! Ca fonctionne en paramétrant cette ligne 12 à ma guise. Respect pour l'aide généreuse.
  2. Bonjour,

    Une facon de faire relativement simple. Sans les entetes, que vous devez avoir sur le classeur collecteur
    nom de feuille classeur de donnees a adapter
    Sub recup()
        'Application.ScreenUpdating = False  'enlever le ' des que ok
        Chemin = "C:\Users\Documents\fournisseurs\"
        Fichier = Dir(Chemin & "*.xlsx")
        Do While Fichier <> ""
            Workbooks.Open Filename:=Chemin & Fichier
            TN_1 = Worksheets("feuil1").Range("A2:Z" & Range("A" & Rows.Count).End(xlUp).Row)       'mise en memoire
            Workbooks(Fichier).Close False
            Worksheets("feuil2").Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(UBound(TN_1, 1), UBound(TN_1, 2)) = TN_1
          Fichier = Dir ' Fichier suivant
        Loop
        ThisWorkbook.Save
        Application.ScreenUpdating = True
    End Sub


    vu le nombre de fichiers (200), il faudrait plutot s'orienter vers une recuperation de donnees classeurs fermes
    1. Merci pour l'aide ! J'ai utilisé le système d'M-12. Avec ce script, j'ai une erreur type 9 qui m'est signalée après la ligne 7. je vais faire des tests.
    2. Bonjour,
      Le nom de feuille....
  3. Si une âme charitable passe par ici… N'hésitez pas, il manque pas grand chose, je suis sur que pour quelqu'un d'expérimenté, c'est une affaire de minute...