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é".
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
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
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
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.
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
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.
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
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é...
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
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é...
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...
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...