Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer plusieurs cellules d'un fichier Excel

    19 novembre 2020 à 15:36:09

    Bonjour, 

    Ce sujet a déjà été abordé, mais dans des post assez lointains et je ne trouve pas mon "bonheur"...

    Je souhaiterai un code VBA qui me permette de récupérer plusieurs cellules de fichiers excel et me les colle dans un autre.

    En détail, cela donne:

    Dans un dossier nommé "Dossier_AA", j'ai de nombreux fichiers Excel ayant tous exactement le même format. Pour tous ces fichiers, je souhaiterai récupérer les cellules B12 - C13 et E15 de la feuille "Onglet_A" et que ces valeurs arrivent dans les cases A1-B1 et C1 de mon fichier de compilation nommé "fichier_compil".

    Pourriez-vous m'aider à écrire ces quelques lignes de code ?

    En complément, je souhaiterai que la totalité des fichiers contenus dans "Dossier_AA" soit traité à la suite (en boucle?) et que ces fichiers se referment sans action de ma part (ie sans que j'ai besoin de choisir si je souhaite les enregistrer ou non).

    Merci beaucoup si quelqu'un peut m'aider pour ma première tentative de programmation :-)

    Eléonore

    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2020 à 16:43:37

      pour parcourir les fichiers, je pense que la fonction dir()

      Chemin="c:\temp\"
      fichier=dir(chemin & "*.xls*") 'récupère le premier fichier de type xls, retourne une chaine vide si pas de fichiers
      while(fichier<>"")
          'faire les actions sur les fichiers
          'à la fin de la boucle, on va chercher le fichier suivant
          fichier=dir() // on récupère le prochain fichier du type xls
      Wend
      

      Pour ouvrir un fichier excel, c'est Workbook.open

      dim wb as Workbook  'pour récupérer une référence sur le workbook et l'utiliser simplement ensuite
      set wb = Workbook.open(FileName:=Chemin & fichier, ReadOnly:=True) ' pour le fichier en mode lecture seule

      Pour fermer un fichier Excel, c'est la méthode close

      wb.close SaveChanges:=False 'pour dire de ne pas enregistrer les modifications


      Pour ne pas avoir les messages d'alertes, c'est Application.DisplayAlerts = False (remettre à True pour les avoir afficher à nouveau ensuite)

      Pour copier une cellule, il peut y avoir plusieurs façons (comme tes 3 cellules ne forment pas une plage continue, le plus simple est de copier chacune des cellules)

      ' copie direct de cellule à cellule en gardant la mise en forme de la cellule copiée
      wb.Sheets("Onglet_A").Range("B12").Copy Destination:=ThisWorkbook.Sheets(1).Range("A1")
      ' copie uniquement de la valeur
      wb.Sheets("Onglet_A").Range("C13").Copy
      ThisWorkbook.Sheets(1).Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
      ' Note ThisWorkbook fait référence au classeur contenant la macro, c'est à dire ton fichier_compil


      Et je suppose qu'une ligne correspond aux 3 cellules d'un fichier, donc il faudra changer de ligne pour chaque fichier, donc utiliser un compteur (cpt) incrémenté à chaque itération de boucle pour incrémenter la ligne, donc Range("A" & cpt) par exemple, ou Range("A1").offset(cpt,0) pour la cellule de destination.

      Reste plus qu'à mettre les morceaux dans le bon ordre.

      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2020 à 15:16:07

        Bonjour, 

        Merci beaucoup pour ces éléments, cependant je n'arrive pas à les mettre en ordre.

        Il doit me manquer des passages, je suis complètement novice et je n'ai pas (pour l'instant), la logique de programmation VBA.

        Ce qui fait, que pour l'instant, au premier bug, je ne sais pas m'en sortir, je ne vois pas et surtout, comprends pas ce qui me manque.

        Vous serait-il possible de m'aider davantage ? 

        Merci beaucoup d'avance !

        Eléonore

        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2020 à 16:06:26

          il faut utiliser le debugger au mieux (clic droit sur une ligne où tu veux t'arrêter > basculer > point d'arrêt, ça mettra un point rouge en face (en cliquant dans la zone où il apparait on peut activer/désactiver le point d'arrêt sur la ligne)

          et ensuite utiliser F8 pour avancer pas à pas dans le code.

          On peut voir les variables locales à la procédure (fonction) en cours dans la fenêtre des variables locales (Menu Affichage > Fenêtre Variables locales)

          Mets le bout de code que tu as fait et indiques ce qui manque/ne marche pas

          • Partager sur Facebook
          • Partager sur Twitter

          Récupérer plusieurs cellules d'un fichier Excel

          × 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