Fusionner plusieurs classeurs dans une seule feuille
idieordeco
Messages postés28Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 février 2011
-
29 nov. 2007 à 18:49
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 2011
-
17 déc. 2007 à 14:27
Bonjour,
Je galère avec mes macros pour faire, je pense, un truc tout con.
Je souhaite fusionner un nombre aléatoire de classeurs Excel et mettre toutes leurs données sur une feuille contenu dans un autre classeur Excel (un nouveau).
Toutes les données dans tous les classeurs Excel à fusionner sont organisés de la même façon.
Elles doivent au final toutes arriver dans un nouveau classeur sur une même feuille à la suite.
Si vous avez une moulinette miracle, je suis plus que preneur
Merci par avance
Bière qui roule bière qui mousse
A voir également:
Fusionner plusieurs classeurs dans une seule feuille
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 30 nov. 2007 à 15:48
Salut,
Si le nombre de classeurs est aléatoire (si vous passer par la case départ etc.)
Il va falloir trouver un moyen de les compter ... par exemple en ne lançant l'application qu'après avoir chargé les classeurs concernés et ensuite comparer à Workbooks.Count
Pour ce qui est de la concaténation des données, il te faudra faire une boucle sur le nombre de classeur qui intégrera une boucle sur le nombre de feuilles par classeur et faire du Copier/Coller
idieordeco
Messages postés28Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 février 2011 30 nov. 2007 à 16:39
J'ai ça comme moulinette pour le moment qui met X classeurs sur X feuilles d'un nouveau classeur créé pour l'occasion :
Sub ConvertirFichiersEnFeuilles()
On Error GoTo gesterreur
Dim VarListeFichiers As Variant, VarFichier As Variant, WkClasseur As Workbook, WkFinal As Workbook, WsFeuille As Worksheet
VarListeFichiers = Application.GetOpenFilename(filefilter:="Classeurs eXceL,*.xls", Title:="Choisissez les Classeurs à récupérer", MultiSelect:=True)
If VarType(VarListeFichiers) = vbBoolean Then MsgBox "Abandon !": Exit Sub 'pour identifier le bouton annuler
Set WkFinal = Workbooks.Add 'générer le classeur final
For Ctr = 1 To UBound(VarListeFichiers)
MsgBox VarListeFichiers(Ctr)
Set WkClasseur = Workbooks.Open(Filename:=VarListeFichiers(Ctr))
Set WsFeuille = WkClasseur.Worksheets(1)
WsFeuille.Move before:=WkFinal.Worksheets(1)
WkClasseur.Close savechanges:=False
Next
'For Each VarFichier In VarListeFichiers
'Next VarFichier
Exit Sub
gesterreur:
'classeur vide
If Err.Number = -2147221080 Then
Resume Next
End If
End Sub
Le hic c'est qu'il ouvre les classeurs sans les renommer.
Donc comme les classeurs sont de noms et de quantités aléatoires, je ne vois pas comment après je peux concaténer via un range en détectant les lignes vide.
Bah ouais si je ne peux pas mettre de nom préformater à chaque feuille c'est chaud après pour les sélectionner
Testez la moulinette en sélectionnant par exemple deux de vos classeurs Excel.
PS : A moins que j'impose le nom des classeurs aux gens...
idieordeco
Messages postés28Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 février 2011 3 déc. 2007 à 20:06
Pas problème, je remets à plat la macro dans peu de temps. (macro dégueulasse au demeurant)
Je pense que ça pourrait servir à d'autres personnes donc je mettrais la réponse ici.
Le principe est le suivant : Fusionner X classeurs Excel en un nouveau classeur avec toutes les données à la suite sur une et une seule feuille.
Utilité : Après X extract d'un logiciel, faire un seul classeur pour faire une importation dans un logiciel tiers.
Bière qui roule bière qui mousse
Vous n’avez pas trouvé la réponse que vous recherchez ?
idieordeco
Messages postés28Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 février 2011 17 déc. 2007 à 14:04
Bon j'ai refais entièrement la macro....
J'ai mal au crane.
Le principe est toujours le même : On a X classeur Excel avec la même mise en page et on souhaite faire fusionner leurs données sur une seule feuille Excel.
Dans mon cas les fichiers Excel à fusionner n'ont qu'une feuille.
Sub ConvertirFichiersEnFeuilles()
Dim VarListeFichiers As Variant, VarFichier As Variant, WkClasseur As Workbook, WkFinal As Workbook, WsFeuille As Worksheet
VarListeFichiers = Application.GetOpenFilename(filefilter:="Classeurs eXceL,*.xls", Title:="Choisissez les Classeurs à récupérer", MultiSelect:=True)
If VarType(VarListeFichiers) = vbBoolean Then MsgBox "Abandon !": Exit Sub 'pour identifier le bouton annuler
Set WkFinal = Workbooks.Add 'générer le classeur final
For Ctr = 1 To UBound(VarListeFichiers)
Set WkClasseur = Workbooks.Open(Filename:=VarListeFichiers(Ctr))
Set WsFeuille = WkClasseur.Worksheets(1)
WsFeuille.Move before:=WkFinal.Worksheets(1)
WkClasseur.Close savechanges:=False
Next
Consolidationpourimportation
Exit Sub
End Sub
et
Sub Consolidationpourimportation()
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long
'--Suppression des messages d'alerte
Application.DisplayAlerts = False
'--Suppression des feuilles inutiles suite à l'importation
Sheets("Feuil2").Delete
Sheets("Feuil3").Delete
'--Copié/collé des données sur la Feuil1
For Ctr = 1 To Sheets.Count - 1
Sheets("feuil1").Activate
Col = "a"
NumLig = 0
With Sheets(Ctr)
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 2 To NbrLig
If .Cells(Lig, Col).Value <> "" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Sheets("feuil1").Cells(NumLig, 1).Insert Shift:=xlDown
End If
Next
End With
Next Ctr
'--Nommer "feuil1" et mise en place des noms des colonnes
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 17 déc. 2007 à 14:27
Salut,
G bien reçu ton message
Si cela fonctionne et te convient c'est l'essentiel, pour ce qui est de valider ton code, il y a toujours quelque chose à simplifier ou à synthaxer différemment mais ça c'est fonction de la perception de chacun ...
Par exemple faut il regrouper les données des feuilles dnas une seule d'un même classeur avant de transférer le tout dans la feuille du classeur de consolidation AU LIEU de transférer directement ce qui éviterait de manipuler 2 fois chaque données ? La question est ouverte
Pourquoi ne pas "Déplacer" les feuilles du classeur vers le classeur de consolidation et ensuite regrouper les données dans une feuille de ce dernier ?
Etc. Etc.
Autant de possibilités qui auront autant de défenseurs que de détracteurs (ne pas confondre avec Détraqueurs ... Ca c'est pour Harry Potter)
L'essentiel c'est que le résultat obtenu réponde à la question
Et puis je n'aime pas la bière ... ça fait penser à la mort
Pour ce qui est de la mousse ça me fait penser que ce matin encore j'ai oublié de me raser
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"></v:shapetype>Cliquer "Réponse Acceptée" Partageons Notre Savoir & Nos Acquis- JML