IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Regrouper des données de plusieurs onglets


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Par défaut Regrouper des données de plusieurs onglets
    Bonsoir,

    J'ai un fichier qui est constitué de presque 200 onglets, avec dans chaque, les composant d'un indice (500 pour être exact) pour un mois donné.
    J'aimerais regrouper tout cet historique en un seul onglet en prenant en compte le fait que d'un mois à l'autre, un composant peut ne pas être présent dans les mois suivants.

    J'ai donc pensé à la méthode suivante :
    dans l'onglet final, je copie/colle les 500 valeurs de ma première page. Pour chaque onglet (différent de l'onglet final) je récupère les 500 noms (ainsi que les 500 valeurs associées) et je fais pour chacun un ctrl+f dans l'onglet final pour y copier la valeur associée.
    Si le nom n'existe pas, il est rajouté à la suite de la liste dans mon onglet final. Et ainsi de suite pour les 200 onglets... Mais ça prend un temps fou ! Je suis certain qu'il y a une autre méthode plus rapide et plus efficace ?

    Je ne suis pas certain par ailleurs d'avoir juste à mon code (en tout cas il tourne, et j'ai vérifié, à chaque date, j'ai bien 500 valeurs dans ma colonne correspondante dans mon onglet final) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Option Base 1
    Sub create_data()
     
    Application.ScreenUpdating = False
     
    Dim s As Worksheet
    Dim c As Range
    Dim nom() As String, var() As Variant ', MV() As Double
    Dim index_row As Integer, index_column As Integer
     
    index_column = 2
     
        'je boucle pour chaque feuille dans mon classeur
        For Each s In ThisWorkbook.Worksheets
        i = 1
        k = 1
     
            'je regarde si la feuille choisie n'est pas la feuille de récapitulation des données
            If s.Name <> "all data" Then
     
            'je détermine la plage de référence avec les 500 noms
            s.Activate
            date_ref = Range("B1")
            Range("B3").Select
            Set plage = Range(Selection, Selection.End(xlDown))
     
     
            ReDim nom(plage.Rows.Count)
            ReDim var(plage.Rows.Count)
            ReDim MV(plage.Rows.Count)
     
                'je stocke les 500 noms et 500 valeurs dans 2 arrays en bouclant sur la plage
                For Each c In plage
                nom(i) = c.Value
                var(i) = c.Offset(, 1)
                'MV(i) = c.Offset(, 2)
                i = i + 1
                Next c
     
            'je vais dans la feuille récapitulative
            Sheets("All data").Activate
            Cells(1, index_column + 1) = date_ref
            'index row mesure le nbre de lignes et donc de titres différents, 500 au départ
            index_row = Range("A2").End(xlDown).Row - 1
            'index_column = index_column + 1
            Row = index_row
     
                'je boucle pour chaque valeur contenue dans l'array nom
                For k = 1 To UBound(nom)
                Set valeur = Cells.Find(what:=nom(k), after:=ActiveCell)
                    'si la valeur n'est pas trouvée dans la feuille récapitulative, je demande à créer cette valeur
                    If valeur Is Nothing Then
                    Cells(Row + 1, 1) = nom(k)
                    Cells(Row + 1, index_column + 1) = var(k)
                    Row = Row + 1
                    Else
                    'cas standard, la valeur est retranscrite
                    Cells.Find(what:=nom(k), after:=ActiveCell).Activate
                    ActiveCell.Offset(, index_column) = var(k)
                    End If
                Next k
     
     
            End If
     
        index_column = index_column + 1
        Next s
     
    Application.ScreenUpdating = True
     
    End Sub
    Le fichier pèse 4MO, il sera difficile de le poster.

    D'avance merci à tous.

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous

    ... Et ainsi de suite pour les 200 onglets... Mais ça prend un temps fou ! ...
    Si tes tableaux sont positionnés au même endroit dans tes feuilles peut-être (je dis bien peut-être car je ne connais pas la forme de tes tableaux) que tu peux utiliser une fonctionnalité d'Excel qui s'appelle "la consolidation"

    Vois si cela conviens car c'est plutôt rapide !

    à bientôt

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Par défaut
    Rebonsoir,

    Je mets en PJ le fichier (j'ai supprimé les 3/4 des onglets, ils sont tous du même format).

    Je vais me renseigner sur cette méthode de consolidation.


    Merci
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonsoir
    je viens de regarder ton classeur et en regardant attentivement ton code et ton post j'ai l'impression que tu es en train de créer un tableau croisé avec
    -en ligne tes noms
    -en colonnes tes dates avec les valeurs en dessous

    Est-ce que c'est bien cela ?

    @+

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Par défaut
    Bonsoir,

    C'est bien ça. Il y a plus de noms de titres qui figureront en ligne que de dates en colonne. C'est pour ça que j'ai choisi cette présentation.

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Dans ce cas Moi je ferais une macro qui regroupe la totalité de tes onglets dans un nouvel onglet 200*500 = 100 000 lignes ce que Excel2007 gère parfaitement
    puis je ferais un tableau croisé dynamique automatique

    C'est plus simple et beaucoup plus rapide

    le coup d'après tu n'a qu'a mettre à jour ta liste et ton tableau

    qu'en dis-tu ?

    à bientôt

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/06/2014, 10h44
  2. Macro : Récupérer des données dans plusieurs onglets et fichiers
    Par roidurif dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/12/2011, 21h35
  3. regrouper des données en colonne
    Par antakini dans le forum Access
    Réponses: 4
    Dernier message: 24/11/2006, 14h35
  4. Réponses: 2
    Dernier message: 23/08/2006, 16h24
  5. Réponses: 10
    Dernier message: 15/09/2005, 12h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo