Combiner plusieurs feuilles excel 2010 avec Macro VBA
Résolu/Fermé
chris0669
Messages postés
52
Date d'inscription
lundi 19 novembre 2018
Statut
Membre
Dernière intervention
24 mars 2022
-
Modifié le 4 août 2020 à 11:44
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 6 août 2020 à 13:05
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 6 août 2020 à 13:05
A voir également:
- Combiner plusieurs feuilles excel 2010 avec Macro VBA
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Si et excel - Guide
- Fusionner plusieurs feuilles excel en une seule - Guide
4 réponses
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
4 août 2020 à 16:39
4 août 2020 à 16:39
Bonjour,
voir ceci pour copier une plage de cellule
https://docs.microsoft.com/fr-FR/office/vba/api/Excel.Range.Copy
pour la coller dans la dernière ligne + 1 de la feuille3
https://excel-malin.com/tutoriels/vba-tutoriels/vba-trouver-la-derniere-cellule-utilisee/
et enfin pour lancer la macro avec l’événement Activate de la feuille3
https://silkyroad.developpez.com/VBA/EvenementsFeuille/#LII-A
voilà
voir ceci pour copier une plage de cellule
https://docs.microsoft.com/fr-FR/office/vba/api/Excel.Range.Copy
pour la coller dans la dernière ligne + 1 de la feuille3
https://excel-malin.com/tutoriels/vba-tutoriels/vba-trouver-la-derniere-cellule-utilisee/
et enfin pour lancer la macro avec l’événement Activate de la feuille3
https://silkyroad.developpez.com/VBA/EvenementsFeuille/#LII-A
voilà
chris0669
Messages postés
52
Date d'inscription
lundi 19 novembre 2018
Statut
Membre
Dernière intervention
24 mars 2022
5 août 2020 à 08:22
5 août 2020 à 08:22
bonjour,
merci pour ton retour mais je suis vraiment trop novice pour m'en sortir seul.
j'ai trouvé un code qui correspond pratiquement a se que je veux faire mais dans ce code on sélection des lignes et pas de plages de cellule.
je te le colle ci dessous tu peux peut-être m'aider.
Merci d'avance.
'Déclaration des variables au niveau du Module
Dim i As Integer, j As Integer, k As Integer
Dim DerniereLigne As Integer
Dim LastRowConsolidation As Integer
'***************************************************
' Procédure permettant d'effacer les données de
' la consolidation afin d'éviter les doublons
'***************************************************
Sub EffaceConsolidation[]
'On se positionne sur la feuille Consolidation
Worksheets["Consolidation"].Select
'On sélectionne la plage correspondante aux données à effacer
Rows["6:1000000"].Select
'On efface le contenu et la mise en forme
Selection.Clear 'ou Selection.delete shift:=xlUp
'On se repositionne sur le premier enregistrement à copier
Range["A6"].Select
End Sub
'****************************************************
' Procédure permettant de réaliser une consolidation
' ou synthèse sur autre feuille.
'****************************************************
Sub Consolider[]
'On désactive le raffraichissement de l'écran scintillement
Application.ScreenUpdating = False
'On appelle la procédure permettant d'effacer les données
EffaceConsolidation
'On va créer une boucle permettant de lire toutes les feuilles à consolider
'ici nous avons 12 feuilles Janvier à Décembre
For j = 1 To 12 'on parcours les 12 premières feuilles
'On sélectionne la première feuille
Sheets[j].Select
'On se positionne sur la dernière ligne non vide
DerniereLigne = Range["j10000000"].End[xlUp].Row
'On parcours tout le tableau à partir de la ligne pour copier chacune ligne
For i =j10 To DerniereLigne
'On sélectionne la première feuille
Sheets[j].Select
'On sélectionner la première ligne
Rows[i].Select
'On copie la ligne
Selection.Copy
'Où, sur la feuille consolidation, il faut donc la sélectionner
Sheets["Consolidation"].Select
'Il faut trouver la dernière ligne non vide de la feuille consolidation
LastRowConsolidation = Range["j1000000"].End[xlUp].Row + 1
'On sélectionne la cellule vide et la première colonne
Cells[LastRowConsolidation, 1].Select
'Une fois positionné, on colle les données
ActiveSheet.Paste
Application.CutCopyMode = False
Next i
Next j
'On réactive le raffraichissement de l'écran scintillement
Application.ScreenUpdating = True
'On affiche un message qui prévient que la consolidation est terminée
MsgBox "La consolidation est terminée...", vbOKOnly + vbInformation, "Message"
End Sub
merci pour ton retour mais je suis vraiment trop novice pour m'en sortir seul.
j'ai trouvé un code qui correspond pratiquement a se que je veux faire mais dans ce code on sélection des lignes et pas de plages de cellule.
je te le colle ci dessous tu peux peut-être m'aider.
Merci d'avance.
'Déclaration des variables au niveau du Module
Dim i As Integer, j As Integer, k As Integer
Dim DerniereLigne As Integer
Dim LastRowConsolidation As Integer
'***************************************************
' Procédure permettant d'effacer les données de
' la consolidation afin d'éviter les doublons
'***************************************************
Sub EffaceConsolidation[]
'On se positionne sur la feuille Consolidation
Worksheets["Consolidation"].Select
'On sélectionne la plage correspondante aux données à effacer
Rows["6:1000000"].Select
'On efface le contenu et la mise en forme
Selection.Clear 'ou Selection.delete shift:=xlUp
'On se repositionne sur le premier enregistrement à copier
Range["A6"].Select
End Sub
'****************************************************
' Procédure permettant de réaliser une consolidation
' ou synthèse sur autre feuille.
'****************************************************
Sub Consolider[]
'On désactive le raffraichissement de l'écran scintillement
Application.ScreenUpdating = False
'On appelle la procédure permettant d'effacer les données
EffaceConsolidation
'On va créer une boucle permettant de lire toutes les feuilles à consolider
'ici nous avons 12 feuilles Janvier à Décembre
For j = 1 To 12 'on parcours les 12 premières feuilles
'On sélectionne la première feuille
Sheets[j].Select
'On se positionne sur la dernière ligne non vide
DerniereLigne = Range["j10000000"].End[xlUp].Row
'On parcours tout le tableau à partir de la ligne pour copier chacune ligne
For i =j10 To DerniereLigne
'On sélectionne la première feuille
Sheets[j].Select
'On sélectionner la première ligne
Rows[i].Select
'On copie la ligne
Selection.Copy
'Où, sur la feuille consolidation, il faut donc la sélectionner
Sheets["Consolidation"].Select
'Il faut trouver la dernière ligne non vide de la feuille consolidation
LastRowConsolidation = Range["j1000000"].End[xlUp].Row + 1
'On sélectionne la cellule vide et la première colonne
Cells[LastRowConsolidation, 1].Select
'Une fois positionné, on colle les données
ActiveSheet.Paste
Application.CutCopyMode = False
Next i
Next j
'On réactive le raffraichissement de l'écran scintillement
Application.ScreenUpdating = True
'On affiche un message qui prévient que la consolidation est terminée
MsgBox "La consolidation est terminée...", vbOKOnly + vbInformation, "Message"
End Sub
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 août 2020 à 10:44
5 août 2020 à 10:44
Si tu veux une macro personnalisée, met un exemple de ton classeur anonymisé ici
https://www.cjoint.com/
https://www.cjoint.com/
chris0669
Messages postés
52
Date d'inscription
lundi 19 novembre 2018
Statut
Membre
Dernière intervention
24 mars 2022
5 août 2020 à 14:53
5 août 2020 à 14:53
Bonjour
je t'ai mis mon fichier
il y a un mode passe pour l'ouvrir: test
le but est de récupérer les cellules de J10à M117 de chaque feuilles des 12 mois et de les mettre sur la feuille consolidation se que me permettra de faire des tableaux croisé dynamique et des graphiques.
merci d'avance de ton aide.
Chris
https://www.cjoint.com/c/JHfmWzKGvyv
je t'ai mis mon fichier
il y a un mode passe pour l'ouvrir: test
le but est de récupérer les cellules de J10à M117 de chaque feuilles des 12 mois et de les mettre sur la feuille consolidation se que me permettra de faire des tableaux croisé dynamique et des graphiques.
merci d'avance de ton aide.
Chris
https://www.cjoint.com/c/JHfmWzKGvyv
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
Modifié le 5 août 2020 à 15:59
Modifié le 5 août 2020 à 15:59
voilà, valable 4 jours
https://www.cjoint.com/c/JHfnOwrMqmQ
une petite erreur à corriger:
a cette ligne ajouter +1
coller sur la ligne en dessous de la dernière ligne
Voilà
Bonne lecture
@+ Le Pivert
https://www.cjoint.com/c/JHfnOwrMqmQ
une petite erreur à corriger:
a cette ligne ajouter +1
DerniereLigneUtilisee = Worksheets("Consolidation").Range("D" & Rows.Count).End(xlUp).Row + 1 'où X est la colonne donnée
coller sur la ligne en dessous de la dernière ligne
Voilà
Bonne lecture
@+ Le Pivert
chris0669
Messages postés
52
Date d'inscription
lundi 19 novembre 2018
Statut
Membre
Dernière intervention
24 mars 2022
6 août 2020 à 11:55
6 août 2020 à 11:55
Bonjour,
je te remercie pour ton aide.
je vais essayer de me servir de tes code pour automatiser la sélection sans avoir a choisir moi par moi mais la totalité des 12 moi.
A+
je te remercie pour ton aide.
je vais essayer de me servir de tes code pour automatiser la sélection sans avoir a choisir moi par moi mais la totalité des 12 moi.
A+
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
6 août 2020 à 13:05
6 août 2020 à 13:05
Si tu ne veux pas d'UserForm mettre ceci dans un module:
si tu veux garder l'UserForm , mais que les mois soient sélectionnés mettre ceci à la place dans le module de l'UserForm:
a toi de voir
@+ Le Pivert
Option Explicit Dim mois As String Dim i As Integer Sub lancercopie() Application.ScreenUpdating = False For i = 3 To Worksheets.Count - 4 mois = Worksheets(i).Name copie Next Worksheets("Consolidation").Activate Application.ScreenUpdating = True End Sub Sub copie() Dim DerniereLigneUtilisee As Long DerniereLigneUtilisee = Worksheets("Consolidation").Range("D" & Rows.Count).End(xlUp).Row + 1 'où X est la colonne donnée Worksheets(mois).Range("J10:M117").Copy _ Destination:=Worksheets("Consolidation").Range("D" & DerniereLigneUtilisee) End Sub
si tu veux garder l'UserForm , mais que les mois soient sélectionnés mettre ceci à la place dans le module de l'UserForm:
Option Explicit Dim mois As String Dim i As Byte Private Sub CommandButton1_Click() Application.ScreenUpdating = False 'boucle sur les éléments de la listbox For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) = True Then mois = ListBox1.List(i) copie End If Next i Worksheets("Consolidation").Activate Application.ScreenUpdating = True End Sub Sub copie() Dim DerniereLigneUtilisee As Long DerniereLigneUtilisee = Worksheets("Consolidation").Range("D" & Rows.Count).End(xlUp).Row + 1 'où X est la colonne donnée Worksheets(mois).Range("J10:M117").Copy _ Destination:=Worksheets("Consolidation").Range("D" & DerniereLigneUtilisee) End Sub Private Sub UserForm_Initialize() 'Déclare la variable objet Worksheet Dim Ws As Worksheet 'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris 'en compte. 'ThisWorkbook correspond à l'objet classeur contenant la macro For Each Ws In ThisWorkbook.Worksheets 'Renvoie le nom de chaque feuille ListBox1.AddItem (Ws.Name) Next Ws ListBox1.ListStyle = fmListStyleOption ListBox1.MultiSelect = fmMultiSelectMulti For i = 2 To 13 ListBox1.Selected(i) = True Next i End Sub
a toi de voir
@+ Le Pivert