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 :

Macro permettant de récupérer des données de différents onglets dans un seul


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Macro permettant de récupérer des données de différents onglets dans un seul
    Bonjour,
    Je me permets de solliciter votre aide car je cherche à réaliser une macro devant me permettre de récupérer et de consolider des données venant de n onglets dans un seul onglet de "consolidation"...
    J'ai bien vu que de nombreuses discussions traitaient de sujets similaires sur ce forum cependant ne connaissant absolument rien en VBA je ne parviens pas à adapter les différents éléments que j'ai pu trouver à mon besoin précis.

    Mon besoin est le suivant:
    Je souhaite consolider dans le premier onglet de mon classeur des données provenant de "N" onglets.
    Les "N" onglets ont tous la même "forme" mais je dois récupérer des informations dans différentes cellules non contigues et les regrouper au sein d'un tableau dans mon onglet "consolidation".
    Idéalement je souhaiterai qu'à chaque fois qu'on rajoute un onglet l'onglet de consolidation soit automatiquement enrichi.

    je me suis permis de mettre un exemple simplifié dans le fichier en PJ...ce serait vraiment super si vous pouviez m'aider.

    Merci beaucoup et excellente soirée à tous
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Un exemple simple de ce que tu peux faire
    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
    Option Explicit
    Sub Consolider()
    Dim Ws As Integer
    Dim Source As Worksheet, Cible As Worksheet
    Dim Ligne As Long
        Application.ScreenUpdating = False
        Ligne = 4
        Set Cible = Worksheets("Consolidation")
        For Ws = 2 To Worksheets.Count
            If UCase(Left(Worksheets(Ws).Name, 7)) = "REPONSE" Then
                Set Source = Worksheets(Ws)
                Cible.Range("A" & Ligne) = Source.Name 'N° Réponse
                Cible.Range("B" & Ligne) = Source.Range("H2") 'Nom
                Cible.Range("C" & Ligne) = Source.Range("H3") 'Prenom
                Cible.Range("D" & Ligne) = Source.Range("H4") 'Age
                Cible.Range("E" & Ligne) = Source.Range("C7") 'Choix 1 - Marque
                Cible.Range("F" & Ligne) = Source.Range("D7") 'Choix 1 - Modèle
                Cible.Range("G" & Ligne) = Source.Range("E7") 'Choix 1 - Année
                Cible.Range("H" & Ligne) = Source.Range("C8") 'Choix 2 - Marque
                Cible.Range("I" & Ligne) = Source.Range("D8") 'Choix 2 - Modèle
                Cible.Range("J" & Ligne) = Source.Range("E8") 'Choix 2 - Année
                Cible.Range("K" & Ligne) = Source.Range("C9") 'Choix 3 - Marque
                Cible.Range("L" & Ligne) = Source.Range("D9") 'Choix 3 - Modèle
                Cible.Range("M" & Ligne) = Source.Range("E9") 'Choix 3 - Année
                Ligne = Ligne + 1
            End If
        Next Ws
        Application.ScreenUpdating = False
        Set Source = Nothing
        Set Cible = Nothing
    End Sub
    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonsoir Adrien,

    Une variante au modèle de gFZT82 (qui a été plus rapide que moi) :

    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
    Sub adrien1001()
     
    Dim ws As Worksheet
    Dim i As Integer
     
    ' on efface le tableau dans l'onglet "Consolidation"
    Worksheets("Consolidation").Range("A4:M65000").ClearContents
     
    'i va correspondre au numéro de la ligne dans le tableau "Consolidation"
    i = 1
     
    ' On parcours le classeur
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "Consolidation" Then 'tous les onglets sauf "Consolidation"
            With Worksheets("Consolidation")
                .Range("A" & 3 + i).Value = ws.Name
                .Range("B" & 3 + i).Value = ws.Range("G" & 2).Value
                .Range("C" & 3 + i).Value = ws.Range("G" & 3).Value
                .Range("D" & 3 + i).Value = ws.Range("G" & 4).Value
                .Range("E" & 3 + i).Value = ws.Range("C" & 7).Value
                .Range("F" & 3 + i).Value = ws.Range("D" & 7).Value
                .Range("G" & 3 + i).Value = ws.Range("E" & 7).Value
                .Range("H" & 3 + i).Value = ws.Range("C" & 8).Value
                .Range("I" & 3 + i).Value = ws.Range("D" & 8).Value
                .Range("J" & 3 + i).Value = ws.Range("E" & 8).Value
                .Range("K" & 3 + i).Value = ws.Range("C" & 9).Value
                .Range("L" & 3 + i).Value = ws.Range("D" & 9).Value
                .Range("M" & 3 + i).Value = ws.Range("E" & 9).Value
                i = i + 1
            End With
        End If
    Next
     
    End Sub
    Bertrand

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Re-bonsoir,

    Merci beaucoup à vous deux pour votre amabilité et votre grande réactivité!
    Après quelques heures de tatonnement pour "déchiffrer" vos éléments (au passage merci Bear the French pour les quelques explications en français dans le texte qui m'ont fait me sentir un peu moins ignorant...;-)) cela semble parfaitement fonctionner!

    Encore merci,
    Adrien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Récupérer des données de différents classeurs
    Par fmailys dans le forum VBA Access
    Réponses: 7
    Dernier message: 29/11/2012, 16h31
  2. Réponses: 2
    Dernier message: 12/06/2012, 18h19
  3. Réponses: 1
    Dernier message: 01/04/2010, 22h23
  4. Récupérer des données d'une feuille dans une autre
    Par pedroo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2009, 16h58
  5. Réponses: 3
    Dernier message: 01/09/2008, 13h46

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