extraction de données depuis plusieurs fichiers xls Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
j
jodo279
Jeune membre
Jeune membre
Messages : 35
Inscrit le : 14 février 2010
Version d'Excel : 2002 FR

Message par jodo279 » 14 février 2010, 10:42

Bonjour à tous,

Je suis nouveau et je voudrais faire une macro qui me permettent de récupérer les données de fichiers xls sans les ouvrir. tous les fichiers sont dans le même dossier : "C:\donnees".
Le dossier comporte plusieurs dizaine de fichiers xls. Il faut aller chercher les données de l'onglet "synth" dans chaque fichier. J'ai aussi besoin d'avoir le nom du fichier source dans la 1ere colonne et en face de chaque ligne recopiée.
Pouvez vous m'aider ? je ne m'en sort pas.

Merci d'avance
v
vba-new
Passionné d'Excel
Passionné d'Excel
Messages : 3'003
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 14 février 2010, 11:28

Bonjour et bienvenue jodo279,

Oui on peut t'aider, c'est le but du forum non :lol:
Par contre, pour faciliter la tâche, peux-tu joindre un bout de fichier source et dire quoi recopier exactement ? Peux-tu également joindre un bout du fichier principal en explicitant où copier les données ?
jodo279 a écrit :une macro qui me permettent de récupérer les données de fichiers xls sans les ouvrir
Si ça te l'ouvre et te le referme c'est bon ?
vba-new
j
jodo279
Jeune membre
Jeune membre
Messages : 35
Inscrit le : 14 février 2010
Version d'Excel : 2002 FR

Message par jodo279 » 14 février 2010, 12:20

Bonjour,

Voici quelques compléments
je veux copier la ligne complete car les données à copier comportent beaucoup de colonnes et plusieurs 100aines de lignes. Les données de chaque fichiers doivent être collées à la suite et sans ligne vide. D'autre part j'ai au moins une bonne 60aintes de fichiers a copier, il faut mieux (a mon avis) lire et copier sans ouvrir et fermer le fichier

Ci-joint un dossier avec les fichiers xls et le résultat que je souhaites.

Merci à vous
exemple.zip
(10.72 Kio) Téléchargé 1187 fois
v
vba-new
Passionné d'Excel
Passionné d'Excel
Messages : 3'003
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 14 février 2010, 13:48

jodo279 a écrit :D'autre part j'ai au moins une bonne 60aintes de fichiers a copier, il faut mieux (a mon avis) lire et copier sans ouvrir et fermer le fichier
T'inquiètes ! Chaque fichier est ouvert et refermé de suite. Je ne sais pas faire sans ouvrir le fichier.

Voici la macro :
Sub importDonnees()
Dim principal As ThisWorkbook
Dim repertoire As String, fichier As String
    Application.ScreenUpdating = False
    Set principal = ThisWorkbook
    repertoire = "C:\donnees"
    ChDir repertoire
    fichier = Dir("*.xls")
    Do While fichier <> ""
        If fichier <> principal.Name Then
            Workbooks.Open fichier
            On Error GoTo suivant
            With Sheets("synth")
                On Error GoTo 0
                On Error Resume Next
                .[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
                .[A:A].Insert Shift:=xlToRight
                .Range("A1:A" & .[b65536].End(xlUp).Row) = Left(fichier, Len(fichier) - 4)
                .UsedRange.EntireRow.Copy Destination:=principal.Sheets(1).[a65536].End(xlUp).Offset(1)
            End With
            ActiveWorkbook.Close False
        End If
suivant:
        If Err.Number = 9 Then MsgBox "Pas de feuille ""synth"" dans le fichier " & fichier, vbExclamation: ActiveWorkbook.Close False
        fichier = Dir
    Loop
End Sub
Les données sont copiées dans la première feuille du classeur de synthèse.
vba-new
j
jodo279
Jeune membre
Jeune membre
Messages : 35
Inscrit le : 14 février 2010
Version d'Excel : 2002 FR

Message par jodo279 » 14 février 2010, 15:57

Re bonjour,
La macro ne fonctionne pas complètement, j'obtiens en colonne A sur les 4 1ere lignes "fichier 2" puis en colonne B "fichier 1" et puis rien d'autre. Les données des classeurs ne sont pas copiées.

Merci de votre aide
v
vba-new
Passionné d'Excel
Passionné d'Excel
Messages : 3'003
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 14 février 2010, 16:43

Voici les fichiers de test :
exemple_v1.zip
(12.72 Kio) Téléchargé 1484 fois
Lance la macro importDonnees du fichier résultat voulu. Chez moi ça marche. J'ai modifié la macro pour qu'elle copie les données des fichiers qui se trouvent dans le même répertoire que le fichier principal.
vba-new
j
jodo279
Jeune membre
Jeune membre
Messages : 35
Inscrit le : 14 février 2010
Version d'Excel : 2002 FR

Message par jodo279 » 14 février 2010, 17:22

Merci beaucoup la macro fonctionne très bien !

Serait-il possible de la perfectionner : est-il possible de la compléter afin de copier la ligne seulement si elle contient le texte "Y35" ou "G3", etc (par exemple en allant chercher ces valeurs dans les cellules A1:A2 de l'onglet feuil1)

Encore merci
v
vba-new
Passionné d'Excel
Passionné d'Excel
Messages : 3'003
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 14 février 2010, 18:14

Ok ! Comment ça se fait qu'elle fonctionnait pas avant ?? Une erreur de répertoire ?
jodo279 a écrit :Serait-il possible de la perfectionner : est-il possible de la compléter afin de copier la ligne seulement si elle contient le texte "Y35" ou "G3", etc (par exemple en allant chercher ces valeurs dans les cellules A1:A2 de l'onglet feuil1)
Tu donnes en exemple les cellules A1:A2, mais le texte "Y35" ou "G3" peut être sur toute la colonne A n'est-ce pas ? Et pourquoi tu parles de l'onglet feuil1 ? C'est plus l'onglet "synth" ?
vba-new
j
jodo279
Jeune membre
Jeune membre
Messages : 35
Inscrit le : 14 février 2010
Version d'Excel : 2002 FR

Message par jodo279 » 14 février 2010, 19:04

Euh en faite oui , le répertoire était pas le bon (erreur de frappe) ...

Voila dans l'onglet "feuil1" cellule A1:A2(du fichier "resultat voulu") j'indique les valeurs que je recherche "Y35" ou "G3" . Dans le dossier "C:\donnees" et parmi les fichiers xls de ce dossier pour l'onglet "synth" je recherche et je copie la ou les lignes qui contiennent "Y35" ou "G3" (sur toutes les colonnes A des fichiers). Si la ligne ne contient pas "Y35" ou "G3" elle ne doit pas être copié. (mais si elle contient "TotoY35" elle doit être copiée)
Toutes les données contenues dans les fichiers ne m'intéressent pas, c'est pour sélectionner celle que je veux analyser par la suite
Pour que ce soit plus claire je joint le fichier :

Merci de votre aide
exemple_v2.zip
(14.82 Kio) Téléchargé 534 fois
v
vba-new
Passionné d'Excel
Passionné d'Excel
Messages : 3'003
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 14 février 2010, 21:10

Voici :
exemple_v3.zip
(17.41 Kio) Téléchargé 1366 fois
Pour les critères, il faut que tu mettes le nom du champ contenant les critères. J'ai mis une petite explication dans l'onglet "Feuil1".

Le répertoire est à adapter. Si problème, reviens.
vba-new
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message