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

Résolu/Fermé
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014 - Modifié par Vinsanity15 le 24/03/2014 à 16:23
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014 - 2 avril 2014 à 16:43
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
A voir également:

6 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
24 mars 2014 à 16:39
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
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
24 mars 2014 à 17:08
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
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
24 mars 2014 à 17:15
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 24/03/2014 à 18:50
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
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
25 mars 2014 à 10:03
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 25/03/2014 à 10:17
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
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
25 mars 2014 à 10:45
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
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
25 mars 2014 à 10:51
En fait je n'arrive plus à récupérer aucune donnée maintenant
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
25 mars 2014 à 11:41
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
Vinsanity15
26 mars 2014 à 14:15
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
26 mars 2014 à 15:29
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
Vinsanity15
26 mars 2014 à 15:44
Merci pour le conseil je vais y faire un tour
0
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
27 mars 2014 à 10:01
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
27 mars 2014 à 10:29
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
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
27 mars 2014 à 10:38
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
27 mars 2014 à 11:07
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 27/03/2014 à 19:26
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
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
28 mars 2014 à 09:04
Fait!
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
28 mars 2014 à 10:26
ok, n'oublie pas de mettre en résolu alors stp
eric
0
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
28 mars 2014 à 10:30
Pas résolu encore je parlais de cocher la case
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
28 mars 2014 à 10:34
ok, si tu n'y arrives pas et que tu veux un coup de main pense à poster la dernière version.
eric
0
Vinsanity15 Messages postés 39 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 24 avril 2014
28 mars 2014 à 13:52
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