Faire un tableau regroupant les données de fichiers journaliers

Fermé
AlbanExcel Messages postés 2 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 1 juillet 2013 - 27 juin 2013 à 16:18
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 1 juil. 2013 à 12:11
Bonjour à tous,

Je m'attaque à du VBA pour récupérer des données de plusieurs fichiers excel.. J'ai vu pas mal de choses sur les forums mais j'arrive pas à adapter le code ..

J'ai un logiciel qui me génère un fichier Excel chaque jour (pour suivre des consommations d'énergie) et qui me les stoch dans un fichier ('C:\xx\xx\Global)
Bref, les fichiers sont renommés xxx_01_01_2011 (pour le 1er janvier ;) ) et ainsi de suite
Ils contiennent chacun une seule feuille nommée : xxx_01_01_2011, idem

Mon but c'est de faire un tableau unique qui récupère les cellules B2 / B5 à B12 de chaque fichier et qui me les met en lignes de Ai à I i (avec i la ligne qui s'incrémente) de mon fichier final : synthèse

J'suis sous Office 2010 pour précision :)

Merci d'avance pour votre aide !

Alban

3 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
29 juin 2013 à 08:21
Bonjour

Ne sachant pas, comment vous ouvrez vos fichiers (si c'est en VBA à partir d'une liste ou bien ouverture par Fichier/ouvrir)
et si vous avez commencé par écrire un bout de code pour ouvrir chaque classeur, vous pouvez y coller quelque chose comme ceci, en l'adaptant à vos noms de classeur.


'on relève les données du fichier consommation énergie**********
ReDim Donnees(9) As String
For i = 1 To 9
If i = 1 Then
Donnees(i) = Cells(2, 2)
Else: Donnees(i) = Cells(i + 3, 2)
End If
Next i

'on recopie les données dans fichier global ****
Windows("Global.xlsm").Activate
DerLig = Range("A100000").End(xlUp).Row + 1
For i = 1 To 9
Cells(DerLig, i) = Donnees(i)
Next i

on ferme le fichier énergie, et on ouvre le fichier suivant et on recommence le cycle


si vous ne savez pas faire, envoyez votre code et nous l'adapterons.
cdlt
0
AlbanExcel Messages postés 2 Date d'inscription jeudi 27 juin 2013 Statut Membre Dernière intervention 1 juillet 2013
1 juil. 2013 à 11:01
Bonjour Frenchie83,

Merci pour votre réponse !
J'ai réussi à faire une synthèse générale. Mon code est pas très optimisé je pense, mais ça m'ouvre les fichiers et me fait ce que je veux puis ferme les fenêtres.

Mon problème qui persiste c'est que j'aimerai ne pas avoir à coder le nom des fichiers à ouvrir (si ce sont des fichiers avec des noms complètement différents ..)
Savez-vous sil est possible de coder une macro, qui ouvrirait chaque excel un à un sans avoir besoin du nom ?

Merci :)

Alban
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
1 juil. 2013 à 12:11
Bonjour

"Savez-vous sil est possible de coder une macro, qui ouvrirait chaque excel un à un sans avoir besoin du nom ? "

Oui, à condition que tous les fichiers soient sous le même répertoire, y compris le fichier global

avec ceci, ça devrait fonctionner

Sub Importe()
    Dim dossier As Object, Fichier As Object, Chemin As String, DerLig As Integer
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Range("A2:B100000").ClearContents
    Chemin = ThisWorkbook.Path
    FichName = Dir(Chemin & "\" & "*.xls")
    Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
    
    For Each Fichier In dossier.Files
        NomFichier = Fichier.Name
        If Not Fichier.Name = "Global.xlsm" Then
            DerLig = Range("A100000").End(xlUp).Row + 1
            Workbooks.Open Filename:=Chemin & "/" & NomFichier
            On Error Resume Next
                With Workbooks(NomFichier)
                    'on relève les données du fichier consommation énergie**********
                     ReDim Donnees(9) As String
                     For i = 1 To 9
                     If i = 1 Then
                     Donnees(i) = Cells(2, 2)
                     Else: Donnees(i) = Cells(i + 3, 2)
                     End If
                     Next i
                    
                     'on recopie les données dans fichier global ****
                     Windows("Global.xlsm").Activate
                     DerLig = Range("A100000").End(xlUp).Row + 1
                     For i = 1 To 9
                     Cells(DerLig, i) = Donnees(i)
                     Next i
                    .Close
                End With
        End If
    Next
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub


bonne réception
cdlt
0