Fusionner plusieurs classeurs dans une seule feuille

idieordeco Messages postés 28 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 20 février 2011 - 29 nov. 2007 à 18:49
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Derniè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

6 réponses

JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
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


Et voilà la moulinette sera opérationnelle












<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??>
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">

</v:shapetype>


 


Cliquer "Réponse Acceptée


"






Partageons Notre Savoir & Nos Acquis


- JML
0
idieordeco Messages postés 28 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 20 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...

Bière qui roule bière qui mousse
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
3 déc. 2007 à 10:22
Salut,
Trop confus pour moi ... Je sors
JML
0
idieordeco Messages postés 28 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 20 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
idieordeco Messages postés 28 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 20 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


ActiveSheet.Name = "importation"
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Select
ActiveCell.FormulaR1C1 = "Date"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Ville"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Nom"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Sexe"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Age"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Salaire"
Range("G1").Select
ActiveCell.FormulaR1C1 = "Nombre d'enfants"


'--Suppression des onglets sauf celui qui est actif


  For Ctr = Sheets.Count To 1 Step -1
    If Sheets(Ctr).Name <> ActiveSheet.Name Then
      Sheets(Ctr).Delete
    End If
  Next

'--Mise en page

Cells.Select
Selection.Columns.AutoFit
Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlGuess, _
    orderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal


End Sub

RM : au début une fenètre de dialogue s'ouvre ; c'est ce moment là que l'on sélectionne les X classeurs à fusionner.

Si quelqu'un passe pour voir ce qu'il en pense...

Bon courage





Bière qui roule bière qui mousse
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
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
0
Rejoignez-nous