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
Bonjour a tous,

je voudrais faire une macro qui permette de récupérer a fur et a mesure des saisie de plusieurs feuille excel les données dans une autre feuilles
Exemple:les cellules sélectionner de B1à D8 de la feuille 1 et feuille 2 se copie sur la feuille 3 a suite avec d'éventuelle même donnée mais pas la même date

colonne: Libelle , date ,montant,

pouvez vous m'aider.

merci d'avance
A voir également:

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
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à
0
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
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
0
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
Si tu veux une macro personnalisée, met un exemple de ton classeur anonymisé ici

https://www.cjoint.com/
0
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
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
0
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
voilà, valable 4 jours

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
0
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
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+
0
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
Si tu ne veux pas d'UserForm mettre ceci dans un module:

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
0