Macro consolidation onglets d'un plan d'actions

calimero44

XLDnaute Nouveau
bonjour à tous,

Je viens vers vous après plusieurs tentatives soldées d'échecs pour ma macro. Il s'agit d'un sujet hélas déjà traité, mais même en tentant d'adapter les macros des autres, je bloque. Je voudrais surtout arriver à comprendre les principes pour être en capacité ensuite de me débrouiller.

Mon fichier: contient une feuille appelée synthèse, sur laquelle je souhaite copier coller à la suite les tableaux des différents onglets (le fichier présent ici n'a pas encore tous les onglets, j'ai voulu démarrer simple, j'en ai un dizaine à rajouter).
Les onglets: sont chacun au même format, seul leur nombre de lignes diffère. Je souhaite trouver un moyen d'avoir le nom de l'onglet en colonne A sur la feuille de synthèse, afin de faire des filtres.

Ce que j'ai essayé:
Code:
Sub Copie()
Dim i As Long
'efface les données précédentes sur la première feuille
Sheets(1).[A3:E65536].Clear
'compte le nombre de feuilles
For i = 2 To Worksheets.Count

With Worksheets(i)
.Range(.[A7], .[A65536].End(xlUp)).Resize(, 14).Copy Sheets(1).[A65536].End(xlUp)(2)

End With
Next
End Sub

Code:
Sub Recup()

    Dim Fe As Worksheet
    Dim Plage As Range
    Dim DernLigne As Long
    
  'efface le contenu du tableau des lignes 2 à 2000
  Sheets("synthese").Activate
  Range("2:2000").Select
  Selection.ClearContents
   
       'parcour la collection en évitant la feuille de consolidation

   For Each Fe In ThisWorkbook.Worksheets
    
        If Fe.Name <> "synthese" Then
        
            With Fe
    'définit la plage
    DernLigne = Range("B" & Rows.Count).End(xlUp).Row
    Set Plage = Range("A6:Z" & DernLigne)
    Plage.Select
           
            End With
    'colle les valeurs dans la feuille de consolidation
             Plage.Copy _
            Worksheets("synthese").Range("A65536").End(xlUp).Offset(1, 0)
  'selectionne A65536 dans synthèse, va jusqu'à la dernière cellule non vide de la colonne et descend d'une ligne puis colle
        End If
        
    Next Fe

End Sub

Quelqu'un pourrait il m'éclairer?

Merci d'avance!

Pascale
 

Pièces jointes

  • modèle PAQ-V3.xlsm
    81 KB · Affichages: 36
  • modèle PAQ-V3.xlsm
    81 KB · Affichages: 45
  • modèle PAQ-V3.xlsm
    81 KB · Affichages: 43

Spacegraphiste

XLDnaute Nouveau
Re : Macro consolidation onglets d'un plan d'actions

Bonsoir Pascale, le forum

A partir du moment ou tous les onglets(à part "synthèse") sont identiques et que l'onglet "synthese" se trouve tjs en premier, cette macro fonctionnera

Code:
Sub synthèse()
Dim nb As Long, ligne As Long, i As Long, j As Long, col As Long, flag As Boolean
Range("a2:L100").ClearContents
nb = Worksheets.Count 'nombre de feuilles total
ligne = 2

For i = 2 To nb 'on lit les feuilles à partir de la deuxieme
lignefeuille = Sheets(i).Range("B65536").End(xlUp).Row
ligne = Sheets("synthese").Range("B65536").End(xlUp).Row + 1
flag = False 'permet de savoir si le nom de l onglet a deja ete ajouté
For j = 7 To lignefeuille 'on deroule chaque feuille jusqua la derniere cellule non vide colonne B
For col = 2 To 12 'on lit les 11 colonnes apres la premiere
If flag = False Then
Sheets("synthese").Cells(ligne, 1) = Sheets(i).Name
flag = True
End If
Sheets("synthese").Cells(ligne, col) = Sheets(i).Cells(j, col)
Next col
ligne = ligne + 1 'on passe a la ligne suivante
Next j
Next
End Sub
 

Pièces jointes

  • modèle PAQ-V3.xlsm
    83.5 KB · Affichages: 57
  • modèle PAQ-V3.xlsm
    83.5 KB · Affichages: 65
  • modèle PAQ-V3.xlsm
    83.5 KB · Affichages: 63
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Macro consolidation onglets d'un plan d'actions

Bonjour Caliméro , Spacegraphiste,

J'ai gardé la même phylosophie que la tienne ,

juste arrangée un peu , voir les commentaires :

Code:
Sub Recup()

    Dim Fe As Worksheet
    Dim Plage As Range
    Dim DernLigne As Long, DernLigne2 As Long, DernLigne3 As Long
    
'Il y a une événementiel dans la feuille synthése, l'activation déclenche donc celle ci et perturbe le fonctionnement de la macro
  
 
  'efface le contenu du tableau des lignes 2 à 2000
'  Sheets("synthese").Activate
'  Range("2:2000").Select
'  Selection.ClearContents
'Ré écriture sans activation

   With Sheets("synthese")
    DernLigne2 = .Range("B" & Rows.Count).End(xlUp).Row
    .Range("A2:Z" & DernLigne2).Clear

       
       
       'parcour la collection en évitant la feuille de consolidation

   For Each Fe In ThisWorkbook.Worksheets
    
    If Fe.Name <> "synthese" Then
        
      With Fe
      'définit la plage
       DernLigne = .Range("B" & .Rows.Count).End(xlUp).Row 'Là , il manquait les point de rattachement au with
       Set Plage = .Range("A6:Z" & DernLigne) 'ici aussi
      ' Plage.Select 'ne sert en fait à rien sinon au debug pour vérifier que plage correspond à la zone attendue
           
      End With
      
      DernLigne2 = .Range("B" & Rows.Count).End(xlUp).Row
       'colle les valeurs dans la feuille de consolidation, Réserve la place pour le nom d'onglet
             Plage.Copy _
            Worksheets("synthese").Range("B" & DernLigne2).Offset(1, -1)
      DernLigne3 = .Range("B" & Rows.Count).End(xlUp).Row
           'Note le nom de l'onglet
            Worksheets("synthese").Range("A" & DernLigne2 + 1 & ":A" & DernLigne3) = Fe.Name
       'selectionne A65536( Si Excel 2007 et plus , c'est bien plus en ligne donc prendre plutot la formule générique ,  dans synthèse, va jusqu'à la dernière cellule non vide de la colonne et descend d'une ligne puis colle
    End If
        
   Next Fe
   End With
End Sub
 

calimero44

XLDnaute Nouveau
Re : Macro consolidation onglets d'un plan d'actions

Bonjour à tous les deux,

J'ai testé les deux solutions, c'est exactement ce que je voulais faire, et je vous en remercie!!! Ça faisait 15 jours que je patinais avec ce fichier...
Merci également pour les lignes de commentaires, j'espère bien capitaliser à partir de ce fichier pour devenir autonome. Je manipule vba depuis un petit moment mais je pense qu'il faudrait que je fasse une formation pour bien comprendre les logiques et les éléments de base de syntaxe, je "décode" plus que je ne code!!!

Merci encore!!
 

calimero44

XLDnaute Nouveau
Re : Macro consolidation onglets d'un plan d'actions

Après avoir testé les deux solutions, c'est celle de camarchepas qui correspond le plus à ce que je recherche, car la macro conserve la mise en forme et les couleurs et duplique le nom d'onglet sur chacune des lignes.

Mon esprit curieux cherche à comprendre, pourquoi la mise en forme est conservée dans un cas et pas dans l'autre?:cool:

J'ai une dernière question: j'ai rajouté un onglet consignes, mais du coup l'intitulé "consignes" se met dans la ligne de titre... Je suis en train de chercher pourquoi... est ce dû à la fonction offset?
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Macro consolidation onglets d'un plan d'actions

Re ,

Lorsque l'on copie la plage de range en fait , l'on récupére les caractéristiques de la range d'origine .

Si ton onglet est constitué de la même structure ,cela doit fonctionner .

L'offset permet un décalage en lignes et colonnespar rapport à la range d'origine .
 

Discussions similaires

Réponses
7
Affichages
292

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou