Compiler les données de 3 onglets

Fermé
Jeanne - 21 mars 2013 à 11:59
 Jeanne - 25 mars 2013 à 10:45
Bonjour à tous,
je suis sur Excel 2010
Je dispose d'un fichier comportant de multiples onglets, dont 3 (les 3 premiers) étant des bases avec le même nombre de colonnes (et la même première ligne avec les entêtes de colonnes) mais un nombre de lignes variables. Je dispose également d'un onglet "CONSO" comportant ces mêmes colonnes et entêtes.
Je voudrais consolider cest 3 premiers onglets dans l'onglet "CONSO" pour pouvoir avoir une base et effectuer des TCD dessus.
J'ai bien essayé l'option de TCD qui permet de prendre en 3 onglets en source mais cette option ne permet de moduler le TCD que sur les valeurs de la première ligne et colonne.

j'en déduis donc qu'il me faut compiler les 3 onglets voulus dans l'onglet "CONSO" créé pour l'occasion afin de pouvoir faire un TCD sur cette base complète.
Cependant je voudrais automatiser cette partie afin de ne pas avoir à refaire plusieurs copier-coller à chaque modification d'un des onglets.

Après avoir un peu recherché sur ce sujet, je pense qu'il est nécessaire de faire une macro.

Quelqu'un peut-il m'aider à construire une macro assez simple qui compilerait à la suite les données de ces onglets dans l'onglet "CONSO".
Je suis désolé mais je ne peux pas vraiment vous joindre le fichier pour que vous puissiez travailler dessus car il s'agit de données confidentielles et de plus j'aimerais bien comprende cette macro pour la réexpliquer derrière.

merci d'avance,


A voir également:

7 réponses

PHILOU10120 Messages postés 6400 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 17 janvier 2025 812
21 mars 2013 à 12:16
Bonjour

Quand vous dites compiler les données entendez-vous additionneer les 3 feuilles dans une colonne ou récuppérer les trois informations dans des colonnes différentes
Il y a conbien de ligne dans votre fichier ?
0
Merci de l'intérêt,

En fait je voudrais simplement concaténer les 3 onglets (des bases en quelques sortes) les uns au dessus des autres. Dans l'optique de me créer une "super" base sur laquelle je pourrai travailler avec des TCD.
Le premier onglet va de A5 à DU1174, le second de A2 à DU94 et le troisième de A2 à DU89. Mais des lignes sont susceptibles d'être rajoutées donc je voudrais que la macro reconnaisse également ce lignes pour les copier dans l'onglet de consolidation.
Au jour d'aujourd'hui cela me ferait une base de 1170+93+88 lignes, mais cela peut donc bouger.
0
PHILOU10120 Messages postés 6400 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 17 janvier 2025 812
22 mars 2013 à 09:14
Bonjour Jeanne

Pouvez-vous me donner un fichier modéle anonymisé
allez sur cjoint.com pour créer un lien que vous copirez dans votre réponse
Il me faut le nom des feuilles à copier
le nom du fichier
le disque sur lequel le fichier est sauvegardé
le dossier et sous dossier si nescessaire
pour mettre ces infos dans la macrocommande
j'espére pouvoir vous aider n'étant pas un spécialiste du VBA
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 714
22 mars 2013 à 09:55
Bonjour,

créer une "super" base sur laquelle je pourrai travailler avec des TCD.

Tes 3 onglets ont-ils une utilité ? Je suppose que oui

Dans ce cas, il n'est point nécessaire de créer un onglet de regroupement qui va doubler ta taille classeur alors que tu peux très facilement faire un TCD multi-onglets qui te permettra de faire tous les regroupements voulus.

des lignes sont susceptibles d'être rajoutées

Il te suffit de nommer tes plages de façon dynamique avec la fonction décaler pour ton TCD s'actualise sans souci.

Un petit exemple brut de fonderie :

https://www.cjoint.com/c/CCwj2Urj9xN
0
PHILOU10120 Messages postés 6400 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 17 janvier 2025 812
22 mars 2013 à 11:37
Merci gbinforme pour ce modéle je vais l'étudier pour pouvoir l'utiliser, j'ai testé en mettant de nouvelle lignes et cela se passe bien une fois actualisé
Encore une fois Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour et merci pour vos réponses,

PHILOU, je vais essayer de faire un fichier anonyme. Cela va me prendre un peu de temps.

Gbinform, comme je le disais, j'ai essayé la technique du TCD sur plusieurs onglets mais cela ne convenait pas dans mon cas car ce TCD consolide en fontion de la première colonne et ligne de chaque référence, donc pas possible de lui demander de consolider selon des infos dans d'autres colonnes et repasser certaines en ligne de TCD, ce qui en fait un TCD peu malléable. De plus le TCD sur plusieurs feuilles peut consolider les nombres mais pas les colonnes qui contiennent des infos au format texte ou date.
On parle ici d'une "super base" qui n'atteindra jamais plus de 2000 lignes donc pas de risque que le fichier devienne si lourd à mon avis.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 714
Modifié par gbinforme le 22/03/2013 à 23:45
Bonjour,

Dans l'onglet "CONSO" tu mets cette macro et à chaque fois que tu accèdes à cette feuille tes 3 feuilles "Feuil1", "Feuil2", "Feuil3" (à modifier dans la macro avec tes noms propres) sont regroupées et tu mets ton TCD sur une autre feuille.

Private Sub Worksheet_Activate()
Dim feu As Integer, lig As Long, nbl As Long, pos As Integer
Application.ScreenUpdating = False
Cells.ClearContents: lig = 2
For feu = 1 To Sheets.Count
    Select Case Sheets(feu).Name   ' noms onglets à regrouper
        Case "Feuil1"
            pos = 5
        Case "Feuil2"
            pos = 2
        Case "Feuil3"
            pos = 2
        Case Else
            pos = 0
    End Select
    If pos <> 0 Then
        With Sheets(feu)
            nbl = .Cells(.Rows.Count, 1).End(xlUp).Row - pos + 1
            If [A1] = "" Then .Rows(pos).Copy Destination:=[A1]
            .Rows(pos + 1).Resize(nbl).Copy Destination:=Rows(lig)
            lig = lig + nbl - 1
        End With
    End If
Next feu
Application.ScreenUpdating = True
End Sub

Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry
0
Bonjour,

Merci pour la réponse je vais essayer cette macro sur mon fichier. Je reviens vers vous pour vous dire ce qu'il en est.

Merci encore !
0