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 :

Consolider plusieurs feuilles dans un seul onglet


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Consolider plusieurs feuilles dans un seul onglet
    Bonjour à tous,

    Voici mon problème , j'ai plusieurs onglet identique , je voudrais les consolider dans un seul onglets, il faudrait que les données ce met les une au dessous de l'autre , et je veux prendre que certaines colonnes (les mêmes dans chaque onglets).
    voici un les procédures VBA que je fais , mais dans ma feuille consolidation , j'ai tous les colonnes , alors que moi j'en ai besoin que jusqu'à la colonne H.
    MERCI POUR VOTRE AIDE
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    'Déclaration des variables au niveau du Module
    Dim dernierecolonne As Integer
    Dim i As Integer, j As Integer, k As Integer
    Dim DerniereLigne As Integer
    Dim LastRowSource As Integer
     
     
    '***************************************************
    ' Procédure permettant d'effacer les données de
    ' la consolidation afin d'éviter les doublons
    '***************************************************
     
    Sub EffaceConsolidation()
     
    'On se positionne sur la feuille Source
    Worksheets("source").Select
     
     
    'On sélectionne la plage correspondante aux données à effacer
    Rows("2:1000000").Select
     
     
    'On efface le contenu et la mise en forme
     
     
    Selection.Clear
     
     
    'On se repositionne sur le premier enregistrement à copier
     
    Range("A23").Select
     
     
    End Sub
     
    '***************************************************
    ' Procédure permettant de réaliser une consolidation
    ' ou synthèse sur autre feuille.
     
    '**************************************************
    Sub Consolidation()
     
    'On désactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = False
    'On appelle la procédure permettant d'effacer les données
    EffaceConsolidation
    'On va créer une boucle permettant de lire toutes les feuilles à consolider
    'ici nous avons x feuilles en fonction du nombre des collaborateurs
    For j = 1 To 2
    'on parcours les 12 premières feuilles
    'On sélectionne la première feuille
    Sheets(j).Select
     
    'On se positionne sur la dernière ligne non vide
    DerniereLigne = Range("A1000000").End(xlUp).Row
    'On parcours tout le tableau à partir de la ligne pour copier chacune ligne
     
    For i = 13 To DerniereLigne
     
    'On sélectionne la première feuille
    Sheets(j).Select
    'On sélectionner la première ligne
    Rows(i).Select
     
    'On copie la ligne
    Selection.Copy
    'Où, sur la feuille consolidation, il faut donc la sélectionner
    Sheets("Source").Select
     
    'Il faut trouver la dernière ligne non vide de la feuille source
    LastRowSource = Range("A1000000").End(xlUp).Row + 1
    'On sélectionne la cellule vide et la première colonne
    Cells(LastRowSource, 1).Select
     
    'Une fois positionné, on colle les données
    ActiveSheet.Paste
    Application.CutCopyMode = False
     
    Next i
     
    Next j
     
    'On réactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = True
    'On affiche un message qui prévient que la consolidation est terminée
    MsgBox "La consolidation est terminée..."
     
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    utiliser par exemple Columns("A:H") lors de la copie …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    dois-je créer une variable ou bien la mettre comme ça , j'avais essayer mais ça ne marche pas .

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Merci de ne pas citer inutilement l'intégralité du post juste précédent, cela nuit à la lisibilité !

    Modifier l'instruction effectuant la copie, voir par exemple l'aide VBA de la méthode Range.Copy
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Es que dois-je ranger ma variable de dernière ligne et remplacer par une autre qui me permet de sélectionner une plage de cellules qui va A13 à H13 , et qui va jusqu'à la ligne A1000000. Mais je ne sais pas comment formuler ça .

    Merci d'avance , si vous aviez des proposition

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Rows("13:" & DerniereLigne).Columns("A:H")

    Columns("A:H").Rows("13:" & DerniereLigne)

    [A13:H13].Resize(DerniereLigne - 12)

    Range("A13:H" & DerniereLigne)

    • …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suppose que tu parles de regroupement de feuilles sur une seule et pas de consolidation comme Excel l'entend dans l'outil Consolidation de l'onglet [Données]-Outils de données
    Si c'est le cas je propose une fonction "clé sur porte" dans cette contribution Regrouper plusieurs feuilles sur une autre. (2003-2010)
    Après le regroupement, il suffira de supprimer les colonnes en trop.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    du coup j'ai code comme ça : je sais pas ou les placer pour les mettre dans une boucle , es qu'elles remplace ma variables derniereligne= range("A1000000").End(xlUP).Row ou bien je les met après je sais pas trop , merci pour votre aide
    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
    Application.ScreenUpdating = False
    EffaceConsolidation
    For j = 1 To 2
    Sheets(j).Select
    DerniereLigne = Range("A1000000").End(xlUp).Row
    Rows("13:" & DerniereLigne).Columns ("A:H")
    Columns("A:H").Rows ("13:" & DerniereLigne)
    [A13:H13].Resize (DerniereLigne - 12)
    Range ("A13:H" & DerniereLigne)
    For i = 13 To DerniereLigne
    Sheets(j).Select
    'On sélectionner la première ligne
    Rows(i).Select
    Rows("13:" & Dernierligne).Columns ("A:H")
    Selection.Copy
    Sheets("Source").Select
    LastRowSource = Range("A1000000").End(xlUp).Row + 1
    Cells(LastRowSource, 1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = Fasle
    Next i
    Next j
     Application.ScreenUpdating = True
    MsgBox "La consolidation est terminée..."
    End Sub

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Oui c'est exact ,je parle du regroupement des plusieurs feuilles sur un seul , c'est vrai on peu supprimer les colonnes en trop , sauf que j'ai 8000 colonnes , et j'ai besoin que des 7 premier colonnes pour faire ma source , donc quand je supprime Excel m'envoyé un boite de dialogue on me disant qu'il ne peut pas finir cette taches car il y a trop donnée , j'ai essayer même colonne par colonne rien de marche. Voila pourquoi , je voudrais que préalablement j'ai les colonnes qu'il me faut dans ma source(recap) , et on plus de ça le fichier devient lourd et prend beaucoup d'espace

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Oui c'est exact ,je parle du regroupement des plusieurs feuilles sur un seul , c'est vrai on peu supprimer les colonnes en trop , sauf que j'ai 8000 colonnes , et j'ai besoin que des 7 premier colonnes pour faire ma source
    8000 colonnes ?
    Une solution est l'utilisation du filtre avancé d'excel sans y placer de critère. Le filtre avancé à un avantage de pouvoir exporter certaines colonnes d'une liste de données
    Une autre solution est d'utiliser la propriété CurrentRegion de l'objet Range combinée à la propriété Resize pour ne prendre que les sept premières colonnes et ce avec la méthode Copy

    Petit exemple : Copie des sept premières colonnes de la feuille nommée db du classeur où se trouve le code VBA vers la cellule A1 de la feuille nommée Feuil4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub TestCopy()
     With ThisWorkbook
     .Worksheets("db").Range("A1").CurrentRegion.Resize(columnsize:=7).Copy .Worksheets("Feuil4").Range("A1")
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Et comment va se présenter le code vba , comment je vais l'intégrer dans une boucle avec ces conditions.

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    comment je vais l'intégrer dans une boucle avec ces conditions
    Exemple avec une boucle + utilisation de la structure décisionnelle Select Case (lire éventuellement l'aide de VBA pour la comprendre) et il faut modifier la partie en rouge car il faut bien entendu copier après la dernière ligne remplie et effacer la ligne de titre si elle est copiée ou rectifier avant la copie pour ne copier qu'à partir de la deuxième ligne (il faut alors utiliser la propriété Offset)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub TestCopy()
     Dim sht As Worksheet
     With ThisWorkbook
      For Each sht In .Worksheets
       Select Case Trim(LCase(sht.Name))
        Case "db", "db1", "db2"
         sht.Range("A1").CurrentRegion.Resize(columnsize:=7).Copy .Worksheets("Feuil4").Range("A1")
       End Select
      Next
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    8000 colonnes ?
    Une solution est l'utilisation du filtre avancé d'excel sans y placer de critère. Le filtre avancé à un avantage de pouvoir exporter certaines colonnes d'une liste de données
    Une autre solution est d'utiliser la propriété CurrentRegion de l'objet Range combinée à la propriété Resize pour ne prendre que les sept premières colonnes et ce avec la méthode Copy

    Petit exemple : Copie des sept premières colonnes de la feuille nommée db du classeur où se trouve le code VBA vers la cellule A1 de la feuille nommée Feuil4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub TestCopy()
     With ThisWorkbook
     .Worksheets("db").Range("A1").CurrentRegion.Resize(columnsize:=7).Copy .Worksheets("Feuil4").Range("A1")
     End With
    End Sub
    Je vous remercie pour votre aide , si j'ai bien compris c'est une fonction a part ,ou bien elle est à l'intérieur de la fonction (consolidation). De plus je dois consolider 20 onglets , je reprend cette fonction 20 fois , ou bien je crée une variable et je la met dans une boucle et ensuite je sélection cette boucle. Pouvez vous m'éclairer sur la codification de cette variable qui va me permettre de sélection que les 7 colonnes de chaque onglet pour et coller sur la feuille (consolider) , merci beaucoup

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voir l'exemple sur la boucle dans mon message précédent.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  15. #15
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je vais tester ça demain ,et je reviens vers vous pour vous dire si ça marche

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/03/2016, 16h28
  2. [XL-2003] Copier plusieurs feuilles dans une seule
    Par RussellD dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2010, 15h20
  3. Récapitulatif de plusieurs feuilles dans une seule
    Par Elumastebit dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 04/12/2008, 19h11
  4. Import de tableaux de plusieurs feuilles dans une seule
    Par Jibicas dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 22/04/2008, 08h40
  5. import de données de plusieurs feuilles dans une seule
    Par naevus dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 10/01/2008, 13h32

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