Compilation données 100 fichiers en 1

yannlion

XLDnaute Junior
Bonjour le forum,

Une question pour rassembler des données et les comparer.

J'ai plus de 100 fichiers dans 1 dossier qui sont tous structurés de la même façon avec 29 onglets FPOU, FBEN, FMIN, etc. qui représente des catégories.
ex de fichier : http://demo.ovh.eu/fr/50d0477013f86a7c57b1c2106fde1577/

J'aimerais copier dans des fichiers au nom des catégories (FPOU, FBEN, FMIN, etc.) les colonnes F, G, H, AO et AP des onglets relatif à la catégorie de tous ces fichiers (catégories qui commencent par F ou M).
J'aimerais copier dans des fichiers au nom des catégories (DPOU, DBEN, DMIN, etc.) les colonnes F, G, H, AW et AX des onglets relatif à la catégorie de tous ces fichiers (catégories qui commencent par D ou E ou G ).

ex : un fichier FPOU avec toutes les données des onglets FPOU des 100 fichiers (colonnes F, G, H, AO et AP)
ex : un fichier DACAD avec toutes les données des onglets DCAD des 100 fichiers (colonnes F, G, H, AW et AX)

Attention parfois l'onglet n'est pas visible car aucune donnée et le nombre de ligne diffère d'un fichier à l'autre (de la ligne 4 à ...).

L'objectif étant à la fin de faire un classement (voir ci-joint).

Merci d'avance pour votre aide.
Yannlion
 

Pièces jointes

  • DCAD.xlsx
    12.2 KB · Affichages: 36
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Compilation données 100 fichiers en 1

Bonjour ,

La fonction Recherche est trés pratique sur ce forum,

Il y a plein d'exemples sur ce sujet dont certain par moi ( Au moins pour les réunir ensuuite les comparer doit être trés facile ?) .

Essaies d'adapter et reviens vers nous avec un ficher xlsm et son code en nous disant ce qui cloche.
 

yannlion

XLDnaute Junior
Re : Compilation données 100 fichiers en 1

Bonjour camarchepas,

J’ai essayé mais le nombre de fichiers, le fait que le nombre de lignes soit différent pour chaque onglet et le fait de devoir les copier à la suite des autres rend la formule trop compliqué.

Je plus parti sur du VBA à priori.

Merci pour ta réponse
Yannlion
 

camarchepas

XLDnaute Barbatruc
Re : Compilation données 100 fichiers en 1

Et oui pour cela on est bien d'accord il faut du vba .

Il faut déjà commencer par le début

Essaies déjà d'ouvrir un des fichiers de données par VBA puis de récupérer le nombre de lignes .

Et oui , il faut comprendre ce que tu fais , sinon la maintenance sera impossible et ton appli sera éphémère.

donc essaies de saisir ceci et de le faire fonctionner en mettant les bonnes valeurs dans chemin et fichier.

ensuite nous irons plus loin

Code:
Sub synthese()
Dim Fichier As String, Chemin As String
Dim NbLignes As Long
Chemin = "c:\temp\"
Fichier = "Test.xls"
If Dir(Chemin & Fichier) = "" Then MsgBox "Le chemin ou / et le nom de fichier sont incorrects": Exit Sub
Workbooks.Open Filename:=Chemin & Fichier

NbLignes = ActiveWorkbook.ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
MsgBox "Nombre de lignes = " & NbLignes
Close Fichier
End Sub
 

yannlion

XLDnaute Junior
Re : Compilation données 100 fichiers en 1

Bonjour camarchepas,

Voici où j'en suis avec mon code.

Code:
Private Function GetValue(path, file, sheet, ref)
'   Retrieves a value from a closed workbook
    Dim arg As String
'   Make sure the file exists
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File Not Found"
        Exit Function
    End If
'   Create the argument
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
      Range(ref).Range("A1").Address(, , xlR1C1)
'   Execute an XLM macro
    GetValue = ExecuteExcel4Macro(arg)
End Function


'------------------------------------------------------------------------------
' Macro qui permet de compiler les informations contenues dans
' différents fichier pour les regrouper dans un fichier récapitulatif
' GCXL
'-------------------------------------------------------------------------------
Sub Creer_Recapitulatif()
Dim wbRecap As Workbook         'fichier recap
Dim wsRecap As Worksheet        'feuille où on écrit les données
Dim wbSource As Workbook        'fichier à ouvrir
Dim wsSource As Worksheet       'feuille où on cherche les données
Dim DernLign As Integer         'ligne où on écrit les données
Dim vFichiers As Variant        'noms des fichiers
Dim i As Integer, k As Integer
Dim rgRecap As Range            'plage où on copie les données


Set wbRecap = ThisWorkbook       'Fichier récapitulatif
Set wsRecap = wbRecap.Sheets(1)  'on écrit dans la feuille 1 du fichier récapitulatif

' --- Ouvrir boite de dialogue pour sélectionner les fichiers à ouvrir
    vFichiers = Selectionner_Fichiers("Sélectionner les fichiers à compiler") 'Appel de Fonction pour ouvrir fichiers

' --- Vérifier qu'au moins un fichier à été sélectionné
If Not IsArray(vFichiers) Then
        Debug.Print "Aucun fichier sélectionné."
        MsgBox "Erreur! Aucun/Mauvais fichier sélectionné."
Exit Sub
End If
On Error Resume Next

    Application.ScreenUpdating = False

' --- Boucle à travers les fichiers
For k = 1 To UBound(vFichiers)
        Application.StatusBar = ">> Lecture du fichier #" & k & "/" & UBound(vFichiers)

' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' C'est ici qu'on écrit les instructions
Set wbSource = Workbooks.Open(vFichiers(k))                        'on ouvre le fichier
Set wsSource = wbSource.Sheets(1)                                  'On copie les données de la feuille 1
        DernLign = wbRecap.Sheets(1).Range("A60000").End(xlUp).Row + 1     'ligne pour écrire le log des fichiers compilés

' - On copie les données vers le fichier Recapitulatif; à adapter
Set rgRecap = wsRecap.Range("A65000").End(xlUp).Offset(1, 0)
        rgRecap = "DCAD"
With wsSource
            rgRecap.Offset(0, 1) = wbSource.Sheets("DCAD").Range("F4")
            rgRecap.Offset(0, 2) = wbSource.Sheets("DCAD").Range("G4")
            rgRecap.Offset(0, 3) = wbSource.Sheets("DCAD").Range("H4")
            rgRecap.Offset(0, 4) = wbSource.Sheets("DCAD").Range("AW4")
            rgRecap.Offset(0, 5) = wbSource.Sheets("DCAD").Range("AX4")
End With

        wbSource.Close              'fermer fichier
Set wbSource = Nothing
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Next k

    Application.ScreenUpdating = True
    Application.StatusBar = False

End Sub

Function Selectionner_Fichiers(sTitre As String) As Variant
Dim sFiltre As String, bMultiSelect As Boolean

    sFiltre = "Fichiers XYZ (.xls)(.xlsm), *.xls*"
    bMultiSelect = True 'Permet de choisir plusieurs fichiers à la fois
    Selectionner_Fichiers = Application.GetOpenFilename(Filefilter:=sFiltre, Title:=sTitre, MultiSelect:=bMultiSelect)
End Function

Le résultat est là mais il me reste encore :
- adapter la copie pour la plage entière (de la ligne 4 à la dernière rempli) car là cela ne fonctionne que pour la ligne 4
J'ai tenté sans succès :
HTML:
            rgRecap.Offset(0, 1) = wbSource.Sheets("DCAD").Range("F4:H" & Range("F65536").End(xlUp).Row)
            rgRecap.Offset(0, 4) = wbSource.Sheets("DCAD").Range("AW4:AX" & Range("F65536").End(xlUp).Row)

- de ne pas avoir à choisir les fichiers et les ouvrir un a un ...
- ne rien copier si l'onglet n'est pas visible

J'ai trouvé cette fonction :
HTML:
Private Function GetValue(path, file, sheet, ref)
'   Retrieves a value from a closed workbook
    Dim arg As String
'   Make sure the file exists
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File Not Found"
        Exit Function
    End If
'   Create the argument
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
      Range(ref).Range("A1").Address(, , xlR1C1)
'   Execute an XLM macro
    GetValue = ExecuteExcel4Macro(arg)
End Function

Mais n'ai pas réussi à l'intégrer dans mon code ... chaque chose en son temps !

Merci
Yannlion
 

Pièces jointes

  • DCAD.xlsm
    24.5 KB · Affichages: 23

camarchepas

XLDnaute Barbatruc
Re : Compilation données 100 fichiers en 1

Bonjour ,

Pourquoi ne pas avoir mis ce code dés le début ,

Tu essaies d'utiliser du code que tu ne comprends pas au lieu de faire l'effort d'essayer d'adapter celui que je te propose .

en posant des questions sur ce que tu ne comprends pas .

Je crois que l'on est vraiement à l'époque du jetable.

Cela nous fait perdre du temps à tout les 2 .

Et pour le coup je n'essayerais pas de déchiffrer celui que tu proposes trouvé je ne sais ou .

Donc en conclusion je passe la main , trop l'impression d'être pris pour une girouette des fois ...

Bonne chance et bon courage pour la suite
 

yannlion

XLDnaute Junior
Re : Compilation données 100 fichiers en 1

C'est parce que je ne l'avais pas encore créé !

Voilà ce que j'avais à partir de ton code :

HTML:
Sub synthese()
Dim Fichier As String, Chemin As String
Dim NbLignes As Long
Chemin = "C:\Users\Yannick\Desktop\2015\"
Fichier = "*.xls"
If Dir(Chemin & Fichier) = "" Then MsgBox "Le chemin ou / et le nom de fichier sont incorrects": Exit Sub
Workbooks.Open Filename:=Chemin & Fichier

NbLignes = ActiveWorkbook.ActiveSheet.Range("F" & Rows.Count).End(xlUp).Row
MsgBox "Nombre de lignes = " & NbLignes
Close Fichier
End Sub

A+
Yannlion
 

Discussions similaires

Statistiques des forums

Discussions
312 224
Messages
2 086 410
Membres
103 201
dernier inscrit
centrale vet