Regrouper données de plusieurs fichiers

floflo2411

XLDnaute Nouveau
Bonjour,

Je souhaite regrouper dans un tableau des données se trouvant dans de multiples fichiers différents. Chaque fichier est constitué de plusieurs feuilles mais une seule m'interesse. Les données que je souhaite recuperer sont les intitulés de colonnes de mon fichier "Tableau Recap" et ces données se trouvent dans les fichiers "Chiffrage 201212.##" dont j'ai joint deux exemples, sur la feuille "RécapGénéral".

Avant de venir poser la question j'ai déjà recherché une solution sur votre forum mais n'arrive pas à adapter à mon cas car je ne connais pas grand chose en ce qui concerne les Macros, de plus la table où se trouvent les données n'est pas sous forme de tableau classique.

J'espere avoir bien expliqué mon cas et vous remercie d'avance pour toute aide et réponse.

Cordialement,
Florent B.
 

Pièces jointes

  • Tableau Recap.xls
    17.5 KB · Affichages: 56
  • Chiffrage 201212.01.xls
    30 KB · Affichages: 76
  • Chiffrage 201212.02.xls
    32 KB · Affichages: 52
  • Tableau Recap.xls
    17.5 KB · Affichages: 70
  • Tableau Recap.xls
    17.5 KB · Affichages: 71

Robert

XLDnaute Barbatruc
Repose en paix
Re : Regrouper données de plusieurs fichiers

Bonjour Floflo et bienvenu, bonjour le forum,

Avant de commencer à te proposer quelque chose il nous faudrait des renseignements supplémentaires :
• le chemin d'accès des fichiers de chiffrage ? le même que celui du tableau Recap ?
• est-ce que le dossier qui contient les classeurs de chiffrage (et éventuelleme de Recap) ne contient qu'eux et rien d'autres ?
• Est-ce que tous les onglets source des classeurs de chiffrage se nomment RécapGénéral ? Sinon est-ce que l'onglet source est toujours le premier ?

Il existe une méthode qui permet de travailler sans ouvrir les classeurs. Je ne la connais pas donc si je te propose une solution elle passera par l'ouverture du classeur de chiffrage, la récupération des données dans le classeur Recap, la fermeture du classeur de chiffrage.
En attendant ta réponse...
 

floflo2411

XLDnaute Nouveau
Re : Regrouper données de plusieurs fichiers

Merci d'avoir répondu aussi rapidement.

• Le chemin d'accès de chiffrage n'est pas actuellement le même que celui du Tableau Recap mais cela ne pose aucun probleme de les mettres dans le mêmes dossiers.
• Pareil que la premiere question, les classeurs se trouvent dans un dossier avec d'autres classeurs et fichiers mais je peux les isoler.
• Oui tous les onglets source se nomment RécapGénéral mais ils ne sont pas en premier mais en troisieme position dans le classeur.

Voilà j'espere avoir bien répondu a vos questions
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Regrouper données de plusieurs fichiers

Bonjour Floflo, bonjour le forum,

Si tu isoles tous les classeurs de chiffrage et le tableau Récap dans un même dossier (peu importe le nom), le code ci-dessous devrait fonctionner ( en tous cas il fonctionne chez moi). Tu recopies le code dans le classeur Tableau Recap.xls. Tu pourras le relancer autant de fois que tu voudras puisqu'il commence par effacer les anciennes données collectées :
Code:
Sub Macro1()
Dim cc As Workbook 'déclare la variable cc (Classeur Cible)
Dim oc As Object 'déclare la variable oc (Onglet Cible)
Dim ch As String
Dim ad As Range 'déclare la variable ad (Anciennes Données)
Dim sf As Object 'déclare la variable sf (Systeme de Fichier)
Dim d As Object 'déclare la variable d (Dossier)
Dim fs As Object 'déclare la variable fs (FichierS du dossier d)
Dim f As Object 'déclare la variable f (Fichier)
Dim cs As Workbook 'déclare la variable cs (Classeur Source)
Dim os As Object 'déclare la variable os (Onglet Source)
Dim dest As Range 'déclare la varaible dest (cellule de Destination)

Set cc = ThisWorkbook 'définit le classeur cible
Set oc = cc.Sheets("Feuil1") 'définit l'onglet cible
ch = cc.Path 'définit le chemin d'accès
Set ad = oc.Range("A1").CurrentRegion 'définit la plage des anciennes données
If ad.Rows.Count > 1 Then 'condition : si la plage des anciennes données contient plus d'une seule ligne
    Set ad = ad.Offset(1, 0).Resize(ad.Rows.Count - 1, ad.Columns.Count) 'redéfinit la plage (sans la première ligne)
    ad.ClearContents 'efface les anciennes données
End If 'fin de la condition
Set sf = CreateObject("Scripting.FileSystemObject") 'définit le syteme de fichier sf
Set d = sf.GetFolder(ch) 'définit le dossier de travail d
Set fs = d.Files 'définit les fichiers fs du dossier d
For Each f In fs 'boucle sur tous les fichier f du dossier d
    If f.Name <> "Tableau Recap.xls" Then 'si le nom du fichier est différent de "Tableau Recap.xls"
        Workbooks.Open (f) 'ouvre le fichier
        Set cs = ActiveWorkbook 'définit le classeur source
        Set os = cs.Sheets("RécapGénéral") 'définit l'onglet source
        Set dest = oc.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination
        dest.Value = os.Range("B2") 'récupère le Numéro d'affaire
        dest.Offset(0, 1).Value = os.Range("B3") 'récupère le nom du client
        dest.Offset(0, 2).Value = os.Range("B4") 'récupère la désignation
        dest.Offset(0, 3).Value = os.Range("H2") 'récupère la date du devis
        dest.Offset(0, 4).Value = os.Range("D54") 'récupère le prix de vente négocié
        cs.Close SaveChanges:=False 'ferme le classeur source
        cc.Save 'enregistre le classeur cible
    End If 'fin de la condition
Next f 'prochain fichier de la boucle
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Regrouper données de plusieurs fichiers

Bonjour Floflo, bonjour le forum,

La seule limite c'est ta patience... Si tu du dois travailler sur beaucoup de fichiers ça va mettre du temps à tout traiter. Mais sinon, quel que soit le nombre, les fichiers s'ouvent et sont traités.
Ha non je m trompe ! Au niveau du code la limite est le nombre de ligne de ta version d'Excel (65536 sur Excel 2003) mais si tu as 65536 fichiers à traiter tu étais salement en retard il me semble...
 

floflo2411

XLDnaute Nouveau
Re : Regrouper données de plusieurs fichiers

Bonjour,
Aprés avoir réussi à récupérer les données des différents fichiers je souhaite récupérer la donnée "Prix de vente négocié" dans un autre classeur avec la fonction RECHERCHEV mais cela ne fonctionne pas (erreur #N/A). Je pense que cela vient du fait que les données proviennent de Macros. Merci de me dire si cela peut vraiment provenir des Macros et me donner une solution.

Cdt,
Florent B.
 

Discussions similaires

Statistiques des forums

Discussions
312 472
Messages
2 088 710
Membres
103 929
dernier inscrit
Tangerine9