Combiner plusieurs feuilles excel 2010 avec Macro VBA

Résolu
chris0669 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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

4 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  2. chris0669 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Si tu veux une macro personnalisée, met un exemple de ton classeur anonymisé ici

      https://www.cjoint.com/
      0
  3. chris0669 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
  4. chris0669 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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