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 :

Rapatrier des données de plusieurs onglets vers 1 onglet récapitulatif [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut Rapatrier des données de plusieurs onglets vers 1 onglet récapitulatif
    Bonjour,

    Je sollicite votre aide car malgré pas mal d'info sur ce sujet je n'ai pas réussi à réaliser une macro me permettant de faire ce que je souhaites:

    J'ai actuellement un fichier eXcel qui possède plusieurs onglets (une 20aine)
    Certains onglets possède un planning.
    Si un onglet possède un planning, ce planning occupe toujours les mêmes lignes et colonnes (de C60 à AC60)

    En revanche le nombre d'onglet possédant un planning peut varier.
    Les onglets (qui possède un planning) doivent alimenter l'onglet "récapitulatif". Pour les identifier par rapport aux onglets ne possédant pas de planning j'ai mis un "X" en case A1.

    Le but est donc de rapatrier les informations de tous les onglets dont la case A1 est un X dans l'onglet récapitulatif.
    Les lignes (1 ligne par onglet: de C60 à AC60) doivent s'afficher les unes après les autres dans le format existant (il y a parfois des mises en forme conditionnelle, elles sont à maintenir). A partir de la cellule A5 de l'onglet récapitulatif (car les lignes précédentes sont déjà utilisées)

    Afin de lancer le rapatriement, je souhaites pouvoir le faire depuis un bouton depuis l'onglet récapitulatif. Ce bouton entraînera les étapes suivantes:
    1- Suppression des données existantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Worksheets("RECAPITULATIF").Range("A5").Offset(3, 0).Select
    ActiveSheet.AutoFilterMode = False
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Range("AC5")).Select
    Selection.ClearContents
    2- Rapatriement des éléments des autres onglets concernés

    La je sèche...

    Merci de votre aide!!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2007
    Messages : 272
    Par défaut
    Bonjour,

    Une façon simple de le faire, en étant sûr de traiter tel que souhaité, est de faire un enregistrement de macro.
    Ensuite à partir de cette macro enregistrée, il suffira de reprendre le code et l'insérer dans une boucle.

    A+

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour copier des données et conserver les propriétés de l'objet source, il y a la méthode Copy de l'objet Range avec comme argument Destination.
    L'enregistreur de macros ne propose pas cette option mais utilise le copier/coller
    Pour faire ce que tu souhaites, il faut faire une boucle (par exemple For Each...In...Next) vérifier s'il y a un x en cellule A1 et effectuer la copie si la condition est remplie.
    Au préalable, il faudra vérifier combien de lignes contient déjà la feuille nommée RECAPITULATIF
    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

  4. #4
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut
    Merci de vos réponses!
    J'avance!

    Voici le code que j'ai créé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each ws In Worksheets
    If ws.Range("A1") = "X" Then
    ws.Range("A59").Copy
    Worksheets("RECAPITULATIF").Range("A5").PasteSpecial
    ws.Range("B60:AC60").Copy
    Worksheets("RECAPITULATIF").Range("B5:AC5").PasteSpecial
    End If
    Next
    Plusieurs problèmes:
    1- Toutes les lignes (copiées) des onglets possédant un "X" en A1 sont écrites au même endroit sur l'onglet RECAPITULATIF
    Il faut que je créé un code qui puisse décaler d'une ligne l'écriture entre 2 onglets. La encore je cale
    2- Je n'arrive pas à enclencher cette macro depuis mon bouton. Bon la je devrai finir par réussir! Mais si vous avez des conseils je suis preneur!

    Encore merci!

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonsoir à tous
    Une solution bricolée par un autodidacte "clé en main" non recommandée par les membres de ce super forum pour vous incitez à apprendre
    alors je réponds et je fouis
    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
    Sub collecterDonnées()
    Application.ScreenUpdating = False 'juste pour arrêter affichage écran et améliorer le temps d'exécution du macro
    Dim derligne As Long
    j = 5 'tu demande que les données seront classées dans la feuille RECAP à partir de a ligne 5
    With Sheets("RECAPITULATIF")
    derligne = .Range("A" & Rows.Count).End(xlUp).Row 'chercher la dernière ligne non vide de la feuille RECAP
    '*********************************************vider les ligne à partir de la ligne 5
    .Range("A5:AA" & derligne).ClearContents
     ' *****************************************Importer les données dans la feuille RECAP
     For i = 1 To Worksheets.Count
            If Worksheets(i).Name <> "RECAPITULATIF" And Worksheets(i).Range("A1") = "X" Then
                Worksheets(i).Range("C60:AC60").Copy .Range("A" & j)
                j = j + 1
            End If
        Next i
    End With
    Application.ScreenUpdating = True
    End Sub

  6. #6
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut
    Merci!

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

Discussions similaires

  1. [XL-2010] Copier des données depuis plusieurs classeurs vers un classeur de Recap
    Par bdel1724 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/11/2014, 21h14
  2. Réponses: 2
    Dernier message: 20/03/2014, 11h34
  3. [XL-2010] extraire des données d'un tableau vers différents onglets selon la valeur d'une cellule
    Par piloupilou82 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 17/11/2013, 18h38
  4. Réponses: 2
    Dernier message: 11/10/2010, 15h47
  5. export des données de plusieurs formulaires vers word
    Par adelsunwind dans le forum IHM
    Réponses: 2
    Dernier message: 11/02/2009, 20h44

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