Récupérer des données de plusieurs Excel identiques dans un seul

Résolu
Vinsanity15 Messages postés 39 Statut Membre -  
Vinsanity15 Messages postés 39 Statut Membre -
Bonjour,

J'ai différents fichiers Excel, tous organisés de la même façon. Dans ces fichiers, je dois uniquement récupérer certaines valeurs. Il s'agit dans mon cas des lignes 9 à 40 des colonnes A, B, C et E.

Je veux pouvoir mettre toutes ces valeurs dans un unique tableau les unes en dessous des autres dans un nouveau fichier à part. Ex: Fichier 1 dans les lignes 2 à 33 ; Fichier 2 dans les lignes 34 à 65 etc...

Je suis sur Windows 7 avec Microsoft Excel 2007.

Quelqu'un aurait- il une solution à mon problème?

Merci d'avance, n'hésitez pas à me demander si j'ai oublié des informations

6 réponses

Résumé de la discussion

L’objectif est d’extraire les valeurs situées sur les lignes 9 à 40 des colonnes A, B, C et E de plusieurs classeurs et de les réunir dans un seul fichier en les empilant verticalement, chaque fichier fournissant un bloc de 32 lignes. Plusieurs approches évoquées privilégient l’utilisation d’une macro capable de parcourir des répertoires et de lire ces quatre colonnes pour chaque classeur, avec une organisation où chaque fichier contribue à une nouvelle plage dans le fichier maître. Des difficultés mentionnées incluent des cellules fusionnées dans la plage concernée et des incompatibilités lors de l’ouverture de fichiers via des programmes externes ou des conversions CSV/TXT, nécessitant des ajustements du code. Des pistes pratiques consistent à adapter une macro existante pour automatiser le traitement par dossier et à s’appuyer sur des ressources dédiées à la gestion des répertoires afin de simplifier l’import et l’agrégation des données.

Bobot (l'IA à votre service)
  1. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

    Tu peux essayer un truc de ce genre-là (en mettant le nom des fichiers en colonne A : https://www.cjoint.com/?DCyqM37tsn6
    Sinon, ça devra passer par une macro.

    A+
    0
  2. Vinsanity15 Messages postés 39 Statut Membre
     
    Merci Zoul67 pour ta réponse,

    le problème c'est qu'avec cette solution le fichier doit être ouvert sinon "#REF!" s'affiche dans la case. Je souhaite juste récupérer les informations.

    L'idéal (si possible) serait par l'appui sur un bouton d'une macro de sélectionner un dossier et que tous les informations que je souhaite soit récupérer dans chaque fichier présent dans le dossier sélectionné.

    Je ne sais pas si c'est possible et encore merci pour ton aide.
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Par macro ou par formule, le fichier appelé doit être ouvert à un moment.
      Si tous tes fichiers semblables sont dans un même dossier, je les ouvrirais tous (sélectionner tous et ouvrir) pour importer dans le classeur récapitulatif. Ensuite tu peux soit annuler le calcul automatique, soit faire un copier coller valeurs.
      Pour une macro de ce genre, je n'ai pas trop le temps et je pense que ça a déjà dû être résolu sur le forum.

      A+
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    à tester : https://www.cjoint.com/?DCysWF9VTv5
    Mettre le classeur dans le répertoire à traiter, l'ouvrir, cliquer sur le bouton.

    eric

    En essayant continuellement, on finit par réussir.
    Donc plus ça rate, plus on a de chances que ça marche.(devise Shadok)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    0
    1. Vinsanity15 Messages postés 39 Statut Membre
       
      Merci Eriiic pour la réponse,

      J'ai un problème d'incompatibilité de type avec mes fichiers. Du coup si je mets votre classeur au même format que les autres fichiers, les macros ne sont plus prisent en compte, je n'arrive donc pas à exécuter le programme.
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      J'ai un problème d'incompatibilité de type avec mes fichiers.
      C'est à dire ?

      Du coup si je mets votre classeur au même format que les autres fichiers, les macros ne sont plus prisent en compte
      Si tu le veux au format excel 2007-2010 pour conserver des formats de cellules particuliers il faut faire 'enregistrer sous...' en choisissant le type *.xlsm

      eric
      0
    3. Vinsanity15 Messages postés 39 Statut Membre
       
      Oui, en faisant plusieurs tests j'avais déjà fait cela. Mais le classeur en .xlsm ne prenait en compte qu'un seul fichier en format .xls (j'ai fais un essai pour voir si cela fonctionnait avec ce type de fichier).
      Donc le problème est que j'ai 8 fichiers par répertoire et j'ai une cinquantaine de répertoire. Et la j'ai réussi à récupérer les données que d'un classeur et en plus le seul que j'ai mis en .xls alors que je les veux en .xlsx
      Je continue de chercher et encore merci pour l'aide Eric
      0
    4. Vinsanity15 Messages postés 39 Statut Membre
       
      En fait je n'arrive plus à récupérer aucune donnée maintenant
      0
    5. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Aucune raison que ça ne fonctionne pas avec des xlsx.
      Ne touche pas au code si tu ne sais pas trop ce que tu fais.

      et j'ai une cinquantaine de répertoire
      Inutile de copier le fichier 50 fois, j'ai ajouté une sélection du répertoire.
      J'ai aussi changé le collé pour y mettre valeurs et format à la place d'une éventuelle formule.
      Je nettoie la feuille avant chaque répertoire. Si tu préfères te charger toi même du nettoyage et pouvoir cumuler la synthèse de plusieurs répertoires sur une même feuille, précise-le.
      En xlsm : https://www.cjoint.com/c/DCzlN6I3Wpj

      eric
      0
  4. Vinsanity15
     
    Merci Eric pour ton aide,
    Après quelques modifications de code, on arrive à récupérer les données de plusieurs classeurs présents dans un même dossier.
    Voici le code

    Sub synthèse()

    'lignes 9 à 40 des colonnes A, B, C et E.
    'fichier 1 dans les lignes 2 à 33 ; Fichier 2 dans les lignes 34 à 65 etc... Dim chemin As String, Fichier As String
    Dim wb As Workbook, wb2 As Workbook, sh As Worksheet, sh2 As Worksheet
    Dim chemin As String, Fichier As String, nbFich As Long
    Dim derlig As Long
    Set wb = ThisWorkbook
    Set sh = Worksheets(1)

    With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = ActiveWorkbook.Path & "\"
    .Show
    If .SelectedItems.Count > 0 Then
    chemin = .SelectedItems(1) & "\"
    Else
    Exit Sub
    End If
    End With

    Application.ScreenUpdating = False
    derlig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    If derlig > 1 Then Range("A2:A" & derlig).EntireRow.Delete
    Fichier = Dir(chemin & "*.xl*") ' 1er fichier
    Do While (Len(Fichier) > 0)
    If Fichier <> wb.Name Then
    Workbooks.Open chemin & Fichier
    ' traitement
    Set wb2 = ActiveWorkbook
    ' Set sh2 = ActiveSheet
    Set sh2 = Worksheets(1)
    wb.Activate
    sh2.[A9:C40].Copy
    sh.Cells(nbFich * 32 + 2, 2).Select
    Selection.PasteSpecial Paste:=xlPasteValues
    'Selection.PasteSpecial Paste:=xlPasteFormats

    sh2.[E9:E40].Copy
    sh.Cells(nbFich * 32 + 2, 5).Select
    Selection.PasteSpecial Paste:=xlPasteValues
    'Selection.PasteSpecial Paste:=xlPasteFormats
    sh.Cells(nbFich * 32 + 2, 1) = Fichier
    nbFich = nbFich + 1
    wb2.Close
    End If
    Fichier = Dir() ' fichier suivant
    Loop
    [A1].Select
    End Sub

    Mais maintenant on aimerait récupérer les données de tous les dossiers présents dans un répertoire en une seule fois.
    Comment dois je faire ? ajouter une boucle ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Pour ça je te conseille l'excellent site de J Boigontier.
    Sur cette page tu trouveras 'Arborescence des sous-répertoires d'un répertoire'

    eric
    0
    1. Vinsanity15
       
      Merci pour le conseil je vais y faire un tour
      0
    2. Vinsanity15 Messages postés 39 Statut Membre
       
      Si par rapport au code que j'ai laissé je dois maintenant récupérer les 3 premières colonnes uniquement sur le premier fichier et l'a colonne E sur tous, que dois-faire ?
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      rajouter un test.
      Si tu permets je vais partir du fichier que j'avais déposé plutôt que du truc illisible que tu as collé.
                  If nbFich = 0 Then 'ligne à ajouter
                      sh2.[A9:C40].Copy
                      sh.Cells(nbFich * 32 + 2, 2).Select
                      Selection.PasteSpecial Paste:=xlPasteValues
                      'Selection.PasteSpecial Paste:=xlPasteFormats
                  End If 'ligne à ajouter
      

      eric
      0
    4. Vinsanity15 Messages postés 39 Statut Membre
       
      Ah super déjà un problème de moins merci beaucoup. Et si les lignes récupérées individuellement je décide de les mettre cote à cote plutôt que l'une en dessous de l'autre ?

      Et merci beaucoup de prendre du temps pour m'aider c'est très gentil
      0
    5. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Là ça oblige à reprendre la structure.

      1) Si tu mets tous les répertoires dans un même classeur difficile de faire figurer les noms de fichiers. A moins d'afficher sur 2 lignes, ou de le mettre en commentaire de cellule.
      Inutile, ou bien quel est ton choix ?
      2) sur 2003 on est limités à 256 colonnes. Ca sera toujours 50 répertoires ? Sinon sur quelles versions c'est sensé tourner et quoi faire si on atteint la limite 2003 ?

      Tu ferais mieux de déposer ton fichier avec les dernières modif si tu veux limiter les adaptations.

      eric
      0
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Dans VBE regarde dans 'Outils / Références...' si tu peux activer Microsoft Scripting Runtime.

    Il le faut pour utiliser le FileSystemObject (fso) et toutes les versions d'excel ne l'ont pas.
    Sinon ici : lister les répertoires avec Dir() (sans fso donc)

    eric

    En essayant continuellement, on finit par réussir.
    Donc plus ça rate, plus on a de chances que ça marche.(devise Shadok)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    0
    1. Vinsanity15 Messages postés 39 Statut Membre
       
      Fait!
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      ok, n'oublie pas de mettre en résolu alors stp
      eric
      0
    3. Vinsanity15 Messages postés 39 Statut Membre
       
      Pas résolu encore je parlais de cocher la case
      0
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      ok, si tu n'y arrives pas et que tu veux un coup de main pense à poster la dernière version.
      eric
      0
    5. Vinsanity15 Messages postés 39 Statut Membre
       
      Oui besoin d'aide.
      https://www.cjoint.com/?3CCnVmwS5n2 Voici le programme qui fonctionne sans l'ouverture des sous dossiers

      Et la voici une des voies vers laquelle nous nous dirigeons sans savoir si elle fonctionne ou non
      https://www.cjoint.com/?3CCnYYpTb1d

      Donc on arrive a récupérer les informations des 50 sous dossiers 1 par 1 mais ce qu'on veut c'est sélectionner le dossier qui contient ces 50 sous dossiers et tout récup d'un coup
      0