Partage
  • Partager sur Facebook
  • Partager sur Twitter

Importer des donnes xlsx en VBA

    8 décembre 2020 à 20:53:59

    Bonjour à tous, 

    Je m'appelle Guillaume et je suis en ce moment sur un gros projet sur Excel. 

    Cependant, je suis claqué en VBA et j'ai bien peur que la seul solution à mon problème est réalisable en VBA. Je m'explique:

    Je possède dans un dossier, environ 150 fichiers en xlsx qui contiennent chacun un tableau (B15:I38) qui correspond à des ingrédients pour recettes de cuisines…

    Je souhaite que dans mon dossier, il y est un fichier (ex : global.xlsm) avec du VBA qui puisse allez me récupérer chaque tableaux des 150 fichiers (150 est variables ici, cela peut très bien être 12, ou 390, mais ce sera toujours tout les ficher du dossiers)

    Pour ensuite les coller dans mon fichier global. Par la suite, j'effectue diverses traitements que je suis capable de concevoir. 

    Mais le VBA, je n'ai pas vraiment le temps de plonger dedans, donc si quelqu'un peut me filer un coup de mains, se serait sympa.

    PS : j'ai déjà passer quelques heures dessus pour le faire sans VBA, et à chaque fois, il y a plusieurs problèmes comme le fais que avec la méthode INDIRECT par exemple, il faut que le ficher soit ouvert. Donc 150 Excel ouverts, j'ai beau avoir un bon pc, je sais que ça tiendra pas. :D

    Merci pour votre aide qui me sera précieuse

    • Partager sur Facebook
    • Partager sur Twitter
      9 décembre 2020 à 10:32:18

      il ne faut pas les ouvrir tous en même temps, mais les uns après les autres en les fermant à chaque fois après avoir copier ce qui nous intéresse.

      un code pour copier la 1ère feuille de chaque classeur xlsx dans le classeur qui a la macro (ici elle se déclenche avec un bouton "activeX" sur la 1ère feuille)

      Private Sub CommandButton1_Click()
          Dim fichier As String
          Dim wb As Workbook
          
          Application.ScreenUpdating = False ' ne met pas à jour l'affichage
          Application.DisplayAlerts = False ' n'affiche pas les alertes
          fichier = Dir(ThisWorkbook.Path & "/*.xlsx") 'on récupère le 1er fichier .xlsx dans le répertoire de ce classeur
          While fichier <> "" And fichier <> ThisWorkbook.Name 'on traite le fichier si il y en a un et si ce n'est pas ce classeur
              Debug.Print fichier 'affichage du nom du fichier dans la console de debug
              Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "/" & fichier, ReadOnly:=True) 'on ouvre le fichier xlsx
              wb.Worksheets(1).Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) 'on copie la feuille 1 après la 1ère feuille du classeur courant
              wb.Close SaveChanges:=False 'on ferme le fichier xlsx
              fichier = Dir 'on récupère le prochain fichier
          Wend
          
      End Sub
      



      • Partager sur Facebook
      • Partager sur Twitter
        9 décembre 2020 à 14:58:06

        Salut umfred,

        Merci beaucoup pour ta réponse, j'ai compris le code dans les grandes lignes et il fonctionne très bien. J'ai juste désactivé la pop-up de mise à jour des données, et c'est nikel. Merci

        • Partager sur Facebook
        • Partager sur Twitter
          6 janvier 2021 à 18:05:49

          Re,

          Besoin de votre aide encore un peu. Je souhaite faire la même chose sur Mac. Est-ce possible ?

          • Partager sur Facebook
          • Partager sur Twitter
            6 janvier 2021 à 18:24:48

            Je pense que oui, a priori le seul truc à changer dans le code serait de remplacer le / par Application.PathSeparator (en plus, ça rend le code "portable")

            Private Sub CommandButton1_Click()
                Dim fichier As String
                Dim wb As Workbook
                 
                Application.ScreenUpdating = False ' ne met pas à jour l'affichage
                Application.DisplayAlerts = False ' n'affiche pas les alertes
                fichier = Dir(ThisWorkbook.Path & Application.PathSeparator & "*.xlsx") 'on récupère le 1er fichier .xlsx dans le répertoire de ce classeur
                While fichier <> "" And fichier <> ThisWorkbook.Name 'on traite le fichier si il y en a un et si ce n'est pas ce classeur
                    Debug.Print fichier 'affichage du nom du fichier dans la console de debug
                    Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & Application.PathSeparator & fichier, ReadOnly:=True) 'on ouvre le fichier xlsx
                    wb.Worksheets(1).Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) 'on copie la feuille 1 après la 1ère feuille du classeur courant
                    wb.Close SaveChanges:=False 'on ferme le fichier xlsx
                    fichier = Dir 'on récupère le prochain fichier
                Wend
                 
            End Sub



            • Partager sur Facebook
            • Partager sur Twitter
              6 janvier 2021 à 19:20:42

              Merci beaucoup, super rapide. Je teste ça dès que je peux.
              • Partager sur Facebook
              • Partager sur Twitter

              Importer des donnes xlsx en VBA

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown