Regroupement de fichiers Excel
Crysta17
Messages postés
19
Statut
Membre
-
Crysta17 Messages postés 19 Statut Membre -
Crysta17 Messages postés 19 Statut Membre -
Bonjour à tous,
Je suis actuellement en stage et ma mission est de regrouper plusieurs fichiers Excel dans un seul. Je m'explique. J'ai une vingtaine de fichiers Excel contenant chacun plusieurs onglets. Chaque onglet possède un tableau de la même structure. Je dois regrouper dans un fichier récapitulatif tous les tableaux de tous les fichiers dans un seul grand tableau commun.
Après de nombreuses recherches et à force de persévérance je suis arrivée au code suivant :
Sub CreationSynthese()
Dim Ws As Worksheet
Dim collectivite As Range
' Parcours de tous les fichiers
' -----------------------------
ChDir "I:\Volumes de données" 'Chemin d'accès au répértoire
LesFichiers = Dir("I:\Volumes de données\*.xlsx") 'Récupère le premier fichier
While Len(LesFichiers) > 0 'Tant que le nom du ficher a plus de 0 caractères
Workbooks.Open LesFichiers
For Each Ws In ActiveWorkbook
collectivite = Range("A1").Value
AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("A15:W" & AvantDerniereLigne).Copy
Workbooks("Récapitulatif.xlsm").Activate 'Activation du fichier récap
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("A" & DebutNomFichier).Select
ActiveSheet.Paste
Range("A2:A" & ActiveSheet.UsedRange.Rows.Count) = collectivite
Workbooks(LesFichiers).Close
LesFichiers = Dir 'Passage au fichier suivant
Next Ws
Wend
End Sub
Néanmoins ce programme ne marche pas, et je suis totalement à cours d'idée ! Quelqu'un aurait-il la gentillesse de bien vouloir essayer de m'aider ? :)
Je suis actuellement en stage et ma mission est de regrouper plusieurs fichiers Excel dans un seul. Je m'explique. J'ai une vingtaine de fichiers Excel contenant chacun plusieurs onglets. Chaque onglet possède un tableau de la même structure. Je dois regrouper dans un fichier récapitulatif tous les tableaux de tous les fichiers dans un seul grand tableau commun.
Après de nombreuses recherches et à force de persévérance je suis arrivée au code suivant :
Sub CreationSynthese()
Dim Ws As Worksheet
Dim collectivite As Range
' Parcours de tous les fichiers
' -----------------------------
ChDir "I:\Volumes de données" 'Chemin d'accès au répértoire
LesFichiers = Dir("I:\Volumes de données\*.xlsx") 'Récupère le premier fichier
While Len(LesFichiers) > 0 'Tant que le nom du ficher a plus de 0 caractères
Workbooks.Open LesFichiers
For Each Ws In ActiveWorkbook
collectivite = Range("A1").Value
AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("A15:W" & AvantDerniereLigne).Copy
Workbooks("Récapitulatif.xlsm").Activate 'Activation du fichier récap
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("A" & DebutNomFichier).Select
ActiveSheet.Paste
Range("A2:A" & ActiveSheet.UsedRange.Rows.Count) = collectivite
Workbooks(LesFichiers).Close
LesFichiers = Dir 'Passage au fichier suivant
Next Ws
Wend
End Sub
Néanmoins ce programme ne marche pas, et je suis totalement à cours d'idée ! Quelqu'un aurait-il la gentillesse de bien vouloir essayer de m'aider ? :)
A voir également:
- Regroupement de fichiers Excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Explorateur de fichiers - Guide
7 réponses
Je te remercie de ta réponse si rapide.
Après application de ta solution le débogueur m'indique :
For Each Ws In ActiveWorkbook -> Propriété ou méthode non gérée par cet objet
Aurais-tu une idée ?
Encore merci !
Après application de ta solution le débogueur m'indique :
For Each Ws In ActiveWorkbook -> Propriété ou méthode non gérée par cet objet
Aurais-tu une idée ?
Encore merci !
Essaie en ajoutant
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Dim Wk as Workbook Dim Ws '... Set WK = Workbooks.Open(LesFichiers) For Each Ws In Wk.Worksheets '.....
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
C'est mieux ! Mon programme accepte ma boucle For Each avec ta solution.
Néanmoins lors de l'exécution, ma macro me copie en boucle infinie les entêtes de mes tableaux (qui sont tous les mêmes), et non leurs contenus...
Au moins quelque chose s'exécute, j'ai bon espoir ! ;)
Merci à toi !
Néanmoins lors de l'exécution, ma macro me copie en boucle infinie les entêtes de mes tableaux (qui sont tous les mêmes), et non leurs contenus...
Au moins quelque chose s'exécute, j'ai bon espoir ! ;)
Merci à toi !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Remplace
Au début de ta Sub, ajoute
et modifie le code suivant dans ta boucle:
Par
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Countpar
AvantDerniereLigne = ws.UsedRange.Rows.Count
Au début de ta Sub, ajoute
Dim WkRecap As Workbook Dim WsRecap As Worksheet Dim DerLigRecap as long Set WkRecap = ThisWorkbook Set WsRecap = WkRecap.Worksheets(1)
et modifie le code suivant dans ta boucle:
AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("A15:W" & AvantDerniereLigne).Copy
Workbooks("Récapitulatif.xlsm").Activate 'Activation du fichier récap
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("A" & DebutNomFichier).Select
ActiveSheet.Paste
Range("A2:A" & ActiveSheet.UsedRange.Rows.Count) = collectivite
Workbooks(LesFichiers).Close
Par
DerLigRecap = WsRecap.UsedRange.Rows.Count + 1
Ws.Range("A15:W" & AvantDerniereLigne).Copy WsRecap.Range("A" & DerLigRecap)
WsRecap.Range("A2:A" & WsRecap.UsedRange.Rows.Count) = collectivite
Wk.Close
Set Wk = Nothing
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
J'ai remplacé mon code par les éléments que tu m'as donné. Et nouvelle erreur, qui à mon avis n'a absolument rien à voir avec ta solution.
Erreur D'exécution 1004, fichier untel.xls introuvable.
Pourtant ce fichier est bien présent dans mon dossier. J'ai tenté de le supprimer pour essayer ta solution sur les autres, mais toujours la même erreur, avec un autre fichier...
C'est vraiment à y perdre la tête !...
Merci de prendre sur ton temps pour me répondre, c'est vraiment gentil de ta part.
Crysta
Erreur D'exécution 1004, fichier untel.xls introuvable.
Pourtant ce fichier est bien présent dans mon dossier. J'ai tenté de le supprimer pour essayer ta solution sur les autres, mais toujours la même erreur, avec un autre fichier...
C'est vraiment à y perdre la tête !...
Merci de prendre sur ton temps pour me répondre, c'est vraiment gentil de ta part.
Crysta
Voilà la fonction que j'utilise pour récupérer tous les fichiers d'un répertoire connu:
Je passe le chemin du dossier et un tableau par référence que je vais utiliser pour boucler sur mes fichiers.
Ce qui donne pour ton cas
PS: J'ai fait ça de mémoire, il y a peut être des erreurs de syntaxe, mais c'est le principe que j'utilise.
Public Sub RecupFichiers(Byval Chemin As String, Byref mTab())
Dim Fichier As String
Dim i as long
Fichier = Dir(Chemin & "*.xls*")
Do While Len(Fichier) > 0
Redim Preserve mTab(i)
mTab(i) = Chemin & Fichier
i = i + 1
Fichier = Dir()
Loop
End Sub
Je passe le chemin du dossier et un tableau par référence que je vais utiliser pour boucler sur mes fichiers.
Ce qui donne pour ton cas
Sub CreationSynthese()
Dim mTab()
Dim i As Long
Dim Wk as Workbook
Dim Ws
'.....
Call RecupFichiers("I:\Volumes de données\", mTab)
For i = LBound(mTab()) to UBound(mTab())
Set Wk = Workbooks.Open(mTab(i)
'.......
Next i
End Sub
PS: J'ai fait ça de mémoire, il y a peut être des erreurs de syntaxe, mais c'est le principe que j'utilise.