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 :

Réunir le contenu de plusieurs onglets dans une même feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    chargée de prod
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chargée de prod
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Par défaut Réunir le contenu de plusieurs onglets dans une même feuille
    Bonjour à tous et à toutes,

    J'ai réussi à faire pas mal de choses avec mon fichier Excel qui me sert au boulot, mais je bloque sur une chose.
    Voici le fichier pour mieux suivre la conversation : MODELE Budget.xlsm
    Les onglets "Budget" et "Récap" ne bougent pas. (Ainsi que les onglets masqués).
    Toutefois, sur la base de l'onglet "Modèle", je créé de nouveaux onglets "Modèle 2" etc... En tout, il y a aura une trentaine d'onglets identiques basés sur l'onglet "Modèle".
    Le récapitulatif budgétaire simple de ces onglets créés au fur et à mesure est répertorié dans l'onglet "BUDGET". Ca, pas de problème.

    Or, dans l'onglet "RECAP" j'aimerais avoir, sur cette unique feuille "RECAP", l'affichage des données comprises entre A8-AA8 à A167-AA167 de chaque onglet "Modèle" à la suite.
    Donc on aurait les lignes de 8 à 167 de l'onglet "Modèle", puis les lignes de 8 à 167 de l'onglet "Modèle 2" et ainsi de suite...

    J'ai regardé un peu les macros et j'ai vu que des choses étaient possibles, mais je ne sais pas s'il est possible d'avoir une macro générique qui s'adapterait à la création de nouveaux onglets modèles ?

    Si on peut aussi pousser le vice à n'avoir le récap que des lignes de 10 à 29, 34 à 53, 58 à 77, 82 à 101, 106 à 110, 115 à 119, 124 à 128, 133 à 166 de chaque onglet dans l'onglet "RECAP", c'est encore mieux.

    Si jamais quelqu'un a une idée pour moi, elle est le bienvenue.
    Merci de votre aide !

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour MusicAlegria, bonjour le forum,

    En pièce jointe le fichier avec juste l'onglet RECAP tel qu'il doit être pour que le code fonctionne. Remplace cet onglet dans ton fichier originale et clique sur le bouton MAJ... pour mettre à jour les données de tous les onglets Modèle...


    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
    Private Sub CommandButton1_Click() 'bouton mise a jour
    Dim O As Object 'déclare la variable O (Onglets)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
     
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Rows("3:" & Application.Rows.Count).Delete 'efface les anciennes données
    For Each O In Sheets 'boucle sur tous les onglets du classeur
        Select Case Left(O.Name, 6) 'agit en fontion des 6 premiers caratères du nom de l'onglet
            Case "Modèle" 'cas "Modèle"
                'définit la plage PL
                Set PL = Application.Union(O.Range("A10:AA29"), O.Range("A34:AA53"), O.Range("A58:AA77"), O.Range("A82:AA101"), O.Range("A106:AA110"), O.Range("A115:AA119"), _
                    O.Range("A124:AA128"), O.Range("A133:AA166"))
                'définit la cellule de destination DEST
                Set DEST = Sheets("RECAP").Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)
                PL.Copy DEST 'copie la plage PL dans DEST
        End Select 'fin de l'action en fonction des 6 premiers caractères du nom de l'onglet
    Next O 'prochain onglet de la boucle
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub
    Sinon, MusicAlegria, c'est quoi le prochain concert que tu organises ?
    Fichiers attachés Fichiers attachés

  3. #3
    Membre habitué
    Femme Profil pro
    chargée de prod
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chargée de prod
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Par défaut
    Bonjour Thautème,

    J'ai réussi (tant bien que mal) à copier la commande et le bouton dans mon fichier...Puis, quand j'ai cliqué sur MAJ, c'était magique !
    MERCI, c'est à priori LA piste à suivre !

    Toutefois :
    - Quand je rajoute un onglet, ça ne s'ajoute pas à la suite du récap (même en recliquant sur MAJ)
    - Quand je renomme l'onglet, ça ne marche plus... (Or, je compte nommer mes onglets DATE/VILLE)

    Je me dis donc :
    1) Sois, il faut que je copie autre chose que la commande avec le bouton, et dans ce cas, c'est une incompétence de ma part de ne pas savoir copier un onglet vers un autre classeur.
    2) Pour l'histoire du nom, je me dis que si je créé une occurence du type "A- DATE/VILLE", je peux jouer sur la fonction qui "agit en fontion des 6 premiers caratères du nom de l'onglet" sur l'occurrence "A-"
    3) Pour le fait que ça ne reproduit pas les autres onglets, là je ne vois pas où ça intervient dans le code. Peut-être peux-tu à nouveau m'éclairer ?

    Le prochain concert c'est dans 3h à Villepinte, autour des Antilles, mélange tambour Ka (Sonny Troupé) et hip-hop (Casey) ! Ca va donner !

    Merci encore.
    A bientôt.

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour MusicAlegria, bonjour le forum,

    Dans ton premier post tu dis que les nouveaux onglets s'appellent Modèle2, Modèle3, etc... Le code passe les onglets un par un et ne récupère les données que des onglets commençant par Modèle avec les lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select Case Left(O.Name, 6)
       Case "Modèle"
    Si tes nouveaux onglets ne commencent plus par "Modèle", évidemment ça ne fonctionne plus !

    Si tu veux utiliser A- alors modifie le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select Case Left(O.Name, 2)
       Case "A-"

  5. #5
    Membre habitué
    Femme Profil pro
    chargée de prod
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chargée de prod
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Par défaut
    Bonjour Thautème,

    Ok c'est bien ce que j'avais compris pour le nom. J'ai fait la modification. Merci.
    Mais donc, je me suis mal exprimée la première fois, mais même sans changer le nom de l'onglet, quand j'ajoutais un onglet, dans le récap n'apparaissait pas le récap des autres onglets.
    Donc, là j'ai bien mon code :

    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
    Private Sub CommandButton1_Click() 'bouton mise a jour
    Dim O As Object 'déclare la variable O (Onglets)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
     
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Rows("3:" & Application.Rows.Count).Delete 'efface les anciennes données
    For Each O In Sheets 'boucle sur tous les onglets du classeur
        Select Case Left(O.Name, 2) 'agit en fontion des 2 premiers caratères du nom de l'onglet
            Case "A-" 'cas "Modèle"
                'définit la plage PL
                Set PL = Application.Union(O.Range("A10:AA29"), O.Range("A34:AA53"), O.Range("A58:AA77"), O.Range("A82:AA101"), O.Range("A106:AA110"), O.Range("A115:AA119"), _
                    O.Range("A124:AA128"), O.Range("A133:AA166"))
                'définit la cellule de destination DEST
                Set DEST = Sheets("RECAP").Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)
                PL.Copy DEST 'copie la plage PL dans DEST
        End Select 'fin de l'action en fonction des 6 premiers caractères du nom de l'onglet
    Next O 'prochain onglet de la boucle
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub
     
    Mais quand j'ajoute un deuxième onglet, ça ne se rajoute pas à la suite.
    J'imagine que c'est dans cette ligne là qu'il faut modifier quelque chose ?
        Set DEST = Sheets("RECAP").Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)
    Merci !
    Bonne journée !

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir MusicAlegria, bonsoir le forum,

    En fait, ça ne se fait pas automatiquement ! Il te faut cliquer sur le bouton MAJ pour que les données du nouvel onglet soit récupérées.
    On pourrait le faire automatiquement en mettant le code dans le composant ThisWorkbook dans la procédure NewSheet. Mais j'ai pensé que tu allais d'abord remplir ce nouvel onglet et une fois les données éditées, là, tu récupèrerais dans RECAP ces données. C'est pour cette raison que j'ai préféré le bouton qui commence par tout supprimer dans l'onglet RECAP et refait la boucle sur tous les onglets pour récupérer un par un.
    J'ai pensé que de cette manière tu aurais toujours les données à jour en appuyant sur le bouton MAJ qui, comble de l'ironie, signifie Mise A Jour. Comme quoi il n'y a pas de hasard...
    Mais si tu préfères de l'automatique à la création d'un nouvel onglet, pas de problème, je te recode tout ça en écoutant de la música alegria do Brasil...

Discussions similaires

  1. [XL-2003] afficher le contenu de plusieurs cellule dans une seule
    Par Philippe76 dans le forum Excel
    Réponses: 4
    Dernier message: 02/04/2011, 19h00
  2. Mettre le contenu de plusieurs lignes dans une seule case
    Par bellamouna dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 09/12/2008, 12h11
  3. Concaténer le contenu de plusieurs cellules dans une cellule
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/03/2008, 15h15
  4. Insertion de plusieurs graphiques dans une même feuille
    Par cmoicv dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/03/2008, 22h22
  5. Réponses: 12
    Dernier message: 10/08/2007, 15h45

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