XL 2019 Consolider deux fichiers de tailles différentes (nombre de ligne différent)

Excellerateur

XLDnaute Occasionnel
Bonjour chers membres,

je voudrais consolider deux fichiers issus de deux onglets différents sur une nouvel onglet.
Les deux fichiers auront toujours le même nombre de range (colonnes) mais vont varier sur le nombre de ligne.

L'idée c'est que la macro doit copier le premier fichier dans son ensemble (entête comprise) et le coller sur le nouvel onglet.
Puis il devra copier les données du deuxième fichier (sans l'entête car déjà collée sur la feuille de destination) à partir de la ligne 2 et les coller juste en dessous de la dernière ligne du premier fichier de manière à constituer un nouveau fichier que j'ai appelé tout simplement "consolidé".


Exemple sur la pièce jointe.

merci d'avance.

Excellement votre
 

Pièces jointes

  • Classeur test.xlsm
    36.6 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
Bonjour

avec ce code
VB:
Sub Consolider()
With Sheets("BILL") 'avec la feuille BILL'
    .UsedRange.Copy Destination:=Sheets("Consolide").Range("A1") 'on copie toute la feuille'
    fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère le numéro de la premiere ligne vide de la colonne A'
End With
With Sheets("GATES")
    .UsedRange.Offset(1, 0).Copy Destination:=Sheets("Consolide").Range("A" & fin) 'on copie la feuille - ligne d'entet (offset (1,0))
End With
End Sub
 

chris

XLDnaute Barbatruc
Bonjour à tous

Une requête PowerQuery, intégré à Excel, fait cela en quelques clics sans VBA

Je ne dit pas cela pour Excellerateur qui semble ne pas vouloir entendre parler des nouveautés (quoique 12 ans...) ou se passer de VBA mais pour ceux qui auraient le même problème et chercheraient sur la forum

 
Dernière édition:

Excellerateur

XLDnaute Occasionnel
Bonjour

avec ce code
VB:
Sub Consolider()
With Sheets("BILL") 'avec la feuille BILL'
    .UsedRange.Copy Destination:=Sheets("Consolide").Range("A1") 'on copie toute la feuille'
    fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère le numéro de la premiere ligne vide de la colonne A'
End With
With Sheets("GATES")
    .UsedRange.Offset(1, 0).Copy Destination:=Sheets("Consolide").Range("A" & fin) 'on copie la feuille - ligne d'entet (offset (1,0))
End With
End Sub
Bonjour mes chers tous!

Merci aussi pour vos contributions qui m'éclaircissent beaucoup!
@vgendron j'ai essayé ton code mais il marche en partie, je ne sais pas si c'est moi qui l'ai mal adapté ou si il manque un truc. En fait il n'y a que la feuille "BILL qui est copiée et collée sur la feuille "Consolider", la feuille "GATES" n'est pas collée là où elle devrait l'être.

Merci d'avance
 

Excellerateur

XLDnaute Occasionnel
Bonjour à tous

Une requête PowerQuery, intégré à Excel, fait cela en quelques clics sans VBA

Je ne dit pas cela pour Excellerateur qui semble ne pas vouloir entendre parler des nouveautés (quoique 12 ans...) ou se passer de VBA mais pour ceux qui auraient le même problème et chercheraient sur la forum

Merci pour le petit tacle @chris 😁. Je suis bien disposé à apprendre PowerQuery si cela m'aide à avancer plus efficacement.

mais je t'avoue que là je ne saurais aller au delà d'excel
 

Excellerateur

XLDnaute Occasionnel
Bonjour
normalement, j'ai essayé le code que j'ai proposé.. et ca marchait..
peut on voir ce que tu as adapté, et comment?
Ok voici ci-dessous.

Je rappelle que moi je ne sais pas écrire en dur comme vous, j'essaye tant que mieux de modifier les codes vba.

VB:
Worksheets.Add After:=ActiveSheet
    ActiveSheet.Name = "Consolide"
    Sheets("BILL").Select
    
    ActiveSheet.Range("$A$1:$L$4900").AutoFilter Field:=3, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "4/30/2021", 1, "5/31/2021", 1, "6/30/2021")
        
        With Sheets("BILL") 'avec la feuille LiMa'
    .UsedRange.Copy Destination:=Sheets("Consolide").Range("A1") 'on copie toute la feuille'
    Fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère le numéro de la premiere ligne vide de la colonne A'
End With
With Sheets("GATES")
    .UsedRange.Offset(1, 0).Copy Destination:=Sheets("Consolide").Range("A" & Fin) 'on copie la feuille - ligne d'entet (offset (1,0))
End With

Par ailleurs j'apprécie beaucoup les commentaires que tu mets car ils m'aident énormément à comprendre ce que je fais.
 

vgendron

XLDnaute Barbatruc
Ok, c'est ma faute,
j'ai pas bien vérifié que toutes les lignes étaient correctement copiées;

With Sheets("BILL") 'avec la feuille LiMa'
...
Fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère le numéro de la premiere ligne vide de la colonne A'
...
end with
avec ca, tu récupères la dernière ligne de la feuille BILL
alors qu'on a besoin de la dernière linge de la feuille Consolide
essai ca
VB:
Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "Consolide"
Sheets("BILL").Select
    
 ActiveSheet.Range("$A$1:$L$4900").AutoFilter Field:=3, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "4/30/2021", 1, "5/31/2021", 1, "6/30/2021")
        
With Sheets("BILL") 'avec la feuille LiMa'
    .UsedRange.Copy Destination:=Sheets("Consolide").Range("A1") 'on copie toute la feuille'
End With
with Sheets("Consolide")
Fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère le numéro de la premiere ligne vide de la colonne A'
end with
With Sheets("GATES")
    .UsedRange.Offset(1, 0).Copy Destination:=Sheets("Consolide").Range("A" & Fin) 'on copie la feuille - ligne d'entet (offset (1,0))
End With
 

Excellerateur

XLDnaute Occasionnel
Ok, c'est ma faute,
j'ai pas bien vérifié que toutes les lignes étaient correctement copiées;

With Sheets("BILL") 'avec la feuille LiMa'
...
Fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère le numéro de la premiere ligne vide de la colonne A'
...
end with
avec ca, tu récupères la dernière ligne de la feuille BILL
alors qu'on a besoin de la dernière linge de la feuille Consolide
essai ca
VB:
Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "Consolide"
Sheets("BILL").Select
   
 ActiveSheet.Range("$A$1:$L$4900").AutoFilter Field:=3, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "4/30/2021", 1, "5/31/2021", 1, "6/30/2021")
       
With Sheets("BILL") 'avec la feuille LiMa'
    .UsedRange.Copy Destination:=Sheets("Consolide").Range("A1") 'on copie toute la feuille'
End With
with Sheets("Consolide")
Fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère le numéro de la premiere ligne vide de la colonne A'
end with
With Sheets("GATES")
    .UsedRange.Offset(1, 0).Copy Destination:=Sheets("Consolide").Range("A" & Fin) 'on copie la feuille - ligne d'entet (offset (1,0))
End With
Magnifique ça marche comme sur des roulettes;

Grand merci @vgendron tu es un as.
 

chris

XLDnaute Barbatruc
@chris Hello

je suis sous excel 2010 et je n'ai pas Power Query, MAISje viens de découvrir à l'instant que je pouvais l'installer en tant que add on gratuit..==> j'avoue, je n'avais jamais vraiment regardé... ;)
On aidera tous ceux qui veulent s'y mettre : nombre de forumeurs qui ne connaissaient pas l'ont découvert et adopté.
Plus y a de fous , plus y a de riz...

Pour commencer j'ai testé : 6 clics

SI vous êtes décidés, j'explique...
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh