Regrouper le contenu de plusieurs feuilles dans une seule

dd54

XLDnaute Nouveau
Bonjour à tous,

Oui je sais, tout le monde se pose la même question ! Le problème c'est que je trouve quelques éléments de réponses mais jamais ce qu'il me faut précisément. Et puis je suis ignorante des codes VBA. Je sais simplement copier-coller un code donné et l'exécuter. Je recherche donc une aide précieuse et complète !

Voilà, j'ai un Plan d'Action composé de plusieurs feuilles excel (plusieurs plan d'action selon le service) et je souhaiterais pouvoir regrouper toutes les actions des différentes feuilles dans une feuille de récap.
Chaque feuille à la même construction, mais le nombre de ligne remplies (actions) diffère.
Attention, j'ai également deux feuilles de notice, qui ne doivent pas êtres prises en compte dans le récap. De même, dans chaque feuille, il y a une en-tête à ne pas prendre en compte. Je peux donner un nom à chaque plage de références à prendre en compte et donc regrouper les données de ces différentes plages.

Ne me proposez pas de tableaux dynamiques, cela ne conviendra pas à l'équipe !

Évidemment il faut que la feuille récap puisse se mettre à jour en fonction de la saisie dans les autres feuilles.

Est-ce que quelqu'un peut m'aider par un super code VBA et explications claires qui vont avec ?

Merci infiniment à mon/mes futurs sauveurs !!!!
 

dd54

XLDnaute Nouveau
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Merci c'est exactement cela.
En fait, les cellules en colonne B sont bien vides mais celles d'autres colonnes peuvent être remplies de formules par défaut. Du coup, cela me copiait toutes les lignes.
 

Dranreb

XLDnaute Barbatruc
Re : Regrouper le contenu de plusieurs feuilles dans une seule

La version précédente ne copiait que jusqu’à la dernière cellule non réellement vide de la colonne B seulement, sans tenir compte des autres colonnes. Donc votre explication n'explique rien.
La dernière ne copie que les lignes dont la colonne B contient des valeurs constantes. Des formules ne seraient pas copiées non plus.
Cordialement.
 

dd54

XLDnaute Nouveau
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Allez, une dernière pour la route :
Peut-on ne pas copier l'en-tête (ligne 6). Je vais la pré-copier dans la feuille récap afin de lui appliquer un filtre automatique...
 

dd54

XLDnaute Nouveau
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Voici ce que j'ai fait, mais cela ne fonctionne pas "erreur d'exécution '91' : variable objet ou variable de bloc With non définie".

Private Sub Worksheet_Activate()
Dim Source As Range, ZonSrc As Range, Cible As Range, N As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Me.[2:65536].Delete
Set Cible = Me.[A2]
'Set Source = Worksheets(Me.Index - 1).[A6:N6]
'Source.Copy Destination:=Cible
For N = 3 To (Me.Index - 1)
For Each ZonSrc In Source.Areas: Set Cible = Cible.Offset(ZonSrc.Rows.Count): Next
Set Source = Worksheets(N).[B17:B65536]
Set Source = Intersect(Source.Offset(0, -1).Resize(, 14), _
Source.SpecialCells(xlCellTypeConstants).EntireRow)
Source.Copy Destination:=Cible
Next N
Me.[A2].Select
Application.Calculation = xlCalculationAutomatic
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Oui. Je vois. C'est intentionnellement que je vous ai dit ne mettre en commentaire que juste l'instruction Source.Copy Destination et pas la précédente qui initialise Source. Certes, puisqu'on ne la copie plus ça paraît inutile de l'initialiser. Seulement voilà: je l'utilise dans la boucle pour incrémenter la position de la cible de la quantité de lignes précédemment présumées copiées. Il faut donc l'initialiser quand même. Mais vous pourriez l'initialiser à quelque chose de plus simple: Set Source = Me.[A1] (n'importe quoi pourvu que ça ait 1 ligne, qui est le nombre de ligne à sauter après le titre)
Cordialement.
 
Dernière édition:

dd54

XLDnaute Nouveau
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Me revoilà !

Voici le dernier code utilisé :

Private Sub Worksheet_Activate()
Dim Source As Range, ZonSrc As Range, Cible As Range, N As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Me.[2:65536].Delete
Set Cible = Me.[A2]
Set Source = Worksheets(Me.Index - 1).[A16:R16]
'Source.Copy Destination:=Cible
For N = 3 To (Me.Index - 1)
For Each ZonSrc In Source.Areas: Set Cible = Cible.Offset(ZonSrc.Rows.Count): Next
Set Source = Worksheets(N).[B17:B65536]
Set Source = Intersect(Source.Offset(0, -1).Resize(, 18), _
Source.SpecialCells(xlCellTypeConstants).EntireRow)
Source.Copy Destination:=Cible
Next N
Me.[A2].Select
Application.Calculation = xlCalculationAutomatic
End Sub



Il subsiste un soucis : Dans mon fichier de base, il y aura X onglets de plan d'action. Tous ne seront pas renseignés, c'est-a-dire que certains, vierges, n'auront aucune action démarrée, donc pas de n° d'action. Dans ce cas, actuellement, la macro "bug" et il faut "déboguer", ce qui ne me pose pas de problème. Seulement voilà, cet outil sera utilisé par d'autres personnes, par forcément douée en excel, et ça ne leur conviendra pas d'avoir ce messages d'erreur d'autant plus qu'il apparait à chaque fois que la macro "tourne".
J'imagine que tout se joue en lignes 12 ou 13 du code, mais je n'arrive pas traduite le (Source.Offset(0, -1).) et Source.SpecialCells(xlCellTypeConstants).EntireRow.

J'aurais donc besoin encore un peu d'aide...

Si quelqu'un a encore un peu de temps à consacrer à ma demande, ce serait merveilleux !
Merci d'avance,
 

Dranreb

XLDnaute Barbatruc
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Bonjour.
Bon ben pour finir on va quand même supprimer l'initialisation de Source :rolleyes:
Essayez comme ça :
VB:
Private Sub Worksheet_Activate()
Dim Source As Range, ZonSrc As Range, Cible As Range, N As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Me.[2:65536].Delete
Set Cible = Me.[A3]
For N = 3 To (Me.Index - 1)
   If Not Source Is Nothing Then
      For Each ZonSrc In Source.Areas: Set Cible = Cible.Offset(ZonSrc.Rows.Count): Next
      End If
   Set Source = Worksheets(N).[B17:B65536]
   On Error Resume Next
   Set Source = Intersect(Source.Offset(0, -1).Resize(, 18), _
      Source.SpecialCells(xlCellTypeConstants).EntireRow)
   If Err Then Set Source = Nothing
   On Error GoTo 0
   If Not Source Is Nothing Then Source.Copy Destination:=Cible
   Next N
Me.[A2].Select
Application.Calculation = xlCalculationAutomatic
End Sub
Source.Offset(0, -1).Resize(, 18) représente 18 colonnes à partir de la colonne immédiatement à gauche de Source.
Source.SpecialCells(xlCellTypeConstants).EntireRow prend les lignes entière des cellules de Source contenant une constante.
L'intersection des deux prend donc les lignes de 18 colonnes à partir de la A où il y a quelque chose dans la B.
À +
 
Dernière édition:

dd54

XLDnaute Nouveau
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Bonjour,

Je suis en train de finaliser mon outil et je souhaitais verrouiller des cellules et protéger les feuilles. Le problème c'est que la macro bug dès que je protège les feuilles sources et la feuille de la macro. Y-a-t-il une solution ou pas ?

Merci d'avance,
:confused:
 

Dranreb

XLDnaute Barbatruc
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Bonjour.
Plutot que de lever la protection dans la macro, on peut confirmer (oui, je dis bien confirmer) la protection du classeur au moment de son ouverture dans une procédure Workbook_Open de ThisWorkbook mais en spécifiant le paramètre UserInterfaceOnly:=True. Voir dans l'aide la méthode Protect.
Cordialement.

Bonjour Staple.
 

dd54

XLDnaute Nouveau
Re : Regrouper le contenu de plusieurs feuilles dans une seule

Merci pour la rapidité de vos réponses !
Je suis allée voir dans l'aide ce dont vous me parlez, et ... je n'ai pas vraiment compris comment appliquer vos méthodes...
Pouvez-vous être plus clair s'il vous plait ?
 

Discussions similaires

Réponses
26
Affichages
388