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

Contribuez Discussion :

Regrouper plusieurs feuilles sur une autre. (2003-2010)


Sujet :

Contribuez

  1. #21
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    un grand merci. Un gain de temps gigantesque pour une facilité déconcertante ! bien joué la macro
    Merci pour ce message congratulant

    juste un petit point d'amélioration, cela ne doit pas être très dur pour les codeurs fous, une colonne supplémentaire dans le résultat avec le fichier source et le nom de la feuille
    Pas certain d'avoir bien compris la demande mais si j'ai bien deviné, la réponse peut-être dans cette autre contribution nommée LookupLabelRange - Ajouter une colonne à une liste de données
    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

  2. #22
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Avril 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Création d'une ligne-tittre entre 2 feuilles compilées
    Bonjour,

    Je suis nouveau sur ce forum et je tiens à vous féliciter pour votre travail et vos compétences.
    La compilation de plusieurs feuilles sur une autre me convient parfaitement. Je créé un catalogue produits général (feuille d'export) regroupant plusieurs familles (feuilles à regrouper).
    J'ai juste une petite question : est-il possible de modifier la macro pour insérer entre 2 feuilles regroupée une ligne avec un titre (le nom de la feuille exportée par exemple) ?
    Merci beaucoup

  3. #23
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Phil Red,
    je tiens à vous féliciter pour votre travail et vos compétences
    Merci pour ce sympathique message

    est-il possible de modifier la macro pour insérer entre 2 feuilles regroupée une ligne avec un titre (le nom de la feuille exportée par exemple) ?
    Cela sort un peu du but de la procédure mais nul besoin d'y apporter une quelconque modification (voir lignes 7 à 11)
    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
    Sub Test()
     Dim sht As Worksheet
     Dim flag As Boolean
     ' 
     For Each sht In ThisWorkbook.Worksheets(Array("Fiche-A", "Fiche-B", "Fiche-e"))
      flag = sht.Name = "Fiche-A"
      If Not flag Then ' Insère une ligne avec le nom de la feuille à insérer après l'importation de la première   
       With shtExport.Range("A1").CurrentRegion
       .Offset(.Rows.count).Resize(1, 1) = sht.Name
       End With
      End If
      ' Exportation
      mExport.ExportTable DataSource:=sht, TargetSheet:=Worksheets("Export"), ClearSheet:=flag
     Next
    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

  4. #24
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour ,
    après de nombreuses recherches sur différents forums en vue de trouver une macro ( toute faite vu que c'est au-dessus de mes maigres compétences ) qui regroupait les différentes feuilles sur une feuille générale , je suis tombé par chance sur votre travail.
    La moindre des choses était de prendre un peu de mon temps pour m'inscrire afin de vous remercier car cela va grandement me faciliter la vie.
    Après avoir adapté le classeur avec mes différentes colonnes ,j essaye maintenant de modifier légèrement cette macro afin de ne plus avoir à sélectionner les différentes feuilles ( car j'ai toujours besoin de toutes les feuilles) et qu'elle s'exécute automatiquement lorsque j'enregistre mon classeur.( en résumé sans avoir la feuille " MENU" qui se trouve dans votre fichier )

  5. #25
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La moindre des choses était de prendre un peu de mon temps pour m'inscrire afin de vous remercier car cela va grandement me faciliter la vie.
    Merci pour ton appréciation à cette contribution.

    Après avoir adapté le classeur avec mes différentes colonnes ,j essaye maintenant de modifier légèrement cette macro afin de ne plus avoir à sélectionner les différentes feuilles ( car j'ai toujours besoin de toutes les feuilles) et qu'elle s'exécute automatiquement lorsque j'enregistre mon classeur
    La procédure ExportTable ne doit en aucun cas être modifiée pour réaliser ce que tu souhaites faire. Je te renvoie aux explications du fil #1

    Donc si tu souhaites copier la liste de données de toutes les feuilles d'un classeur A vers une feuille d'un classeur B (en supposant qu'ils sont tout les deux ouverts.
    Dans cet exemple, le classeur A (la source) se nomme Workbook_source.xlsb. la feuille cible se trouve le classeur où se trouve le code VBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub TestExport()
     Dim wkbSource As Workbook, shtSource As Worksheet, shtTarget As Worksheet
     Set wkbSource = Workbooks("Workbook_source.xlsb")
     Set shtTarget = ThisWorkbook.Worksheets("Cible")
     For Each shtSource In wkbSource.Worksheets
       ExportTable shtSource, shtTarget, ClearSheet:=shtSource.Index = 1
     Next
     Set wkbSource = Nothing: Set shtSource = Nothing: Set shtTarget = Nothing
    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

  6. #26
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Non justement , ce qui m’intéressait avec cette procédure c'était que la feuille récapitulative de toutes les autres se trouvait dans le même classeur , ce qui n'est pas le cas avec ce que vous venez de me proposer ci-dessus. Mais j'arriverai aisément à me contenter de la procédure initiale

  7. #27
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Manifestement, vous n'avez rien compris à cette contribution.
    La procédure nommée ExportTable permet de copier une liste de données d'une feuille ou d'une plage "source" vers une feuille ou une plage "cible". Cette source et cette cible peuvent faire partie du même classeur ou de classeurs différents.
    Le classeur qui est téléchargeable dans cette contribution et qui permet de regrouper sur une même feuille dont le CodeName est shtExport les feuilles sélectionnées dans un formulaire (UserForm) n'est qu'un exemple de l'utilisation de la procédure nommée ExportTable.
    J'ai proposé une autre exemple avec classeurs dans le fil #3.
    Donc pour ce qui vous concerne voici un autre Exemple de l'utilisation de cette procédure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub MainExport()
      Dim sht As Worksheet, Flag As Boolean
      With ThisWorkbook
        For Each sht In .Worksheets
          Select Case sht.Name
            Case Is <> shtExport.Name
              ExportTable sht, shtExport, ClearSheet:=Not Flag: Flag = True
          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

  8. #28
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Vraiment géniale !!!



    Comment fait on au lieu d'avoir une feuille de menu d'Avoir seulement le userform qui apparaît si on exécute la procédure ???



    Également comment faire pour avoir une selection de l'onglet auquel nous voulons l'xportation au lieu que le tout sois dans la meme onglet.


    J'ai un cas particulier auquel on pourrais utiliser dans le meme document cette fonction pour 2 ou 3 regroupement mais je ne veux pas écraser les autres ???


    en vous remerciant d'avance !!!!

  9. #29
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Vraiment géniale !!!
    Merci pour l'appréciation.

    Toutes les questions qui suivent non rien à voir avec ma contribution. Il serait préférable de poser ces différentes questions en ouvrant autant de discussions qu'il n'y a de questions.
    Comment fait on au lieu d'avoir une feuille de menu d'Avoir seulement le userform qui apparaît si on exécute la procédure ???
    Il suffit de lancer le UserForm depuis une procédure événementielle (Ouverture du classeur, activation de la feuille, etc.)

    Également comment faire pour avoir une selection de l'onglet auquel nous voulons l'exportation au lieu que le tout sois dans la meme onglet.
    Au lieu de nommer explicitement la feuille, il suffit d'utiliser ActiveSheet

    J'ai un cas particulier auquel on pourrais utiliser dans le meme document cette fonction pour 2 ou 3 regroupement mais je ne veux pas écraser les autres ???
    L'argument nommé ClearSheet sert à cela. Si sa valeur est à True, on efface le contenu de la feuille s'il est à False, les données s'ajoutent aux précédentes.
    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

  10. #30
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Bonjour monsieur Tulliez,


    merci pour votre réponse,



    Pour la dernière phrase, je crois que je me suis vraiment mal exprimé.


    Le but ultime serais de ne pas avoir de feuille export et lorsque l'on exécute la macro une nouvelle feuille avec les donnés serais générés. Ainsi, j'aurais plusieurs feuille "Export" avec les différentes sélections sans avoir a écrasé ou non les donnés.

    EJ vais donc ouvrir une discussion et en espérant avoir quelqu'un aussi génial que vous voulant m'aider !!!

  11. #31
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le but ultime serais de ne pas avoir de feuille export et lorsque l'on exécute la macro une nouvelle feuille avec les donnés serais générés. Ainsi, j'aurais plusieurs feuille "Export" avec les différentes sélections sans avoir a écrasé ou non les donnés.
    Il n'y a rien de compliqué, il suffit au moment où on lance la procédure de regroupement d'insérer une nouvelle feuille et de passer son nom à l'argument TargetSheet de la fonction ExportTable.
    L'enregistreur de macros donnera la méthode à utiliser pour effectuer cette opération.
    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

  12. #32
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Re Bonjour monsieur Tulliez,


    Si j'exécute le userform, je ne peux parametre la function ...


    je ne suis pas assez avancé en VBA pour pouvoir modifié le code et afin de généré le code dans une nouvelle page ... j'en suis désolé

  13. #33
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Mise à jour ?
    Bonjour Philippe,

    Je me permets de réactiver ce fil sur lequel je suis tombé en cherchant justement un code me permettant de compiler plusieurs feuilles sur une seule. Malheureusement, le fichier exemple ne semble pas vouloir s'exécuter avec toutes les fonctions VBA sur mon système. Je précise que j'ai autorisé les macros, à la fois à l'ouverture du fichier ainsi que dans les paramètres de sécurité. Peut-être est-ce parce que j'utilise une version récente d'excel (Office 365 pour Mac, version 16.25) ? Lorsque j'ouvre la console VBA, je peux voir le code associé à chaque feuille, mais le bouton de la feuille MENU reste muet (le curseur ne se transforme pas lorsqu'on le survole).
    Auriez-vous une idée ? Est-ce un problème de compatibilité avec les versions récentes d'Excel ? Ou est-ce parce qu'il s'agit d'Excel pour Mac ? J'aimerais tant pouvoir me servir de cette fonction, qui semble correspondre exactement à ce que je cherche (compiler une base de données fractionnée pour pouvoir éditer un fichier général CSV à injecter dans PostGreSQL).

    Merci de votre aide !
    Raphaël

  14. #34
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Raphaël,
    Peut-être est-ce parce que j'utilise une version récente d'excel (Office 365 pour Mac, version 16.25) ? Lorsque j'ouvre la console VBA, je peux voir le code associé à chaque feuille, mais le bouton de la feuille MENU reste muet (le curseur ne se transforme pas lorsqu'on le survole).
    N'ayant pas de Mac, je ne peux affirmer que le problème vient de là masi il me semble avoir déjà lu que les ActiveX ne fonctionnait pas sur les mac mais encore une fois, je n'affirme rien.

    Tu peux parfaitement utiliser la fonction ExportTable soit comme méthode soit comme fonction, je montre d'ailleurs les deux syntaxes en début de contribution
    Un autre exemple est donné dans le fil #3 suite à la question
    Est-ce par ailleurs possible d'avoir une macro permettant d'aller chercher et concaténer des feuilles se trouvant dans un ou d'autres classeur(s)?
    Je ne pense pas que les lignes de codes de la procédure ExportTable pose problème avec le MAC mais cela demande confirmation.
    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. #35
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci Philippe pour ta réponse.

    Est-ce à dire que je peux transposer le code que tu as élaboré dans une macro que j'appellerai via un raccourci clavier, puisque le mac ne supporte pas Active X ?
    J'avoue mes lacunes : je suis archéologue et pas informaticien, et je ne comprends pas ce qui distingue une méthode d'une fonction. J'ai l'impression que mes limites demanderaient trop de pédagogie et donc trop de temps de ta part.
    Néanmoins, sachant que j'ai un classeur contenant x feuilles de type A qui contiennent le même type de données et quelques feuilles de types différents (B, C, D...), ton code permettrait-il de rassembler dans une même feuille de synthèse les données des feuilles de type A en ignorant les autres ? Puis-je le fondre dans une macro ? J'ai essayé mais le débogueur me renvoie une erreur sur WS dans "ExportTable WS, shtExport, ClearSheet:=False, ValueOnly:=True, ShowMsg:=False"

    Voilà. Si tu pouvais m'éclairer ce serait l'idéal, mais je comprendrais aussi que tu juges que le jeu est trop pointu pour moi.

    Bonne fin de journée,
    Raphaël

  16. #36
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Raphaël,
    je ne comprends pas ce qui distingue une méthode d'une fonction. J'ai l'impression que mes limites demanderaient trop de pédagogie et donc trop de temps de ta part
    Alors en résumé tout codes VBA se trouvent dans des procédures (soit Sub soit Function) qui elles mêmes se trouvent dans un ou des modules.
    L'enregistreur de macros crée une procédure Sub dans un module qu'il crée s'il n'existe pas

    Personnellement dans 80% des cas je crée des procédures Function qui ont l'avantage de pouvoir être utilisée comme une méthode ou comme une fonction (qui renvoie une valeur)
    Le plus bel exemple est la fonction VBA MsgBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Appuyer sur Ok pour lancer le programme"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response = MsgBox("Attention vous allez supprimer les données. Confirmer ?", vbCritical + vbYesNo + vbDefaultButton2)
    Dans le second cas la fonction renverra à la variable Response le numéro correspondant au bouton Yes ou No et dans le premier cas, elle se contente d'afficher le message et attend que l'on clique sur OK

    Etapes à suivre

    • Insertion d'un module standard dans le classeur devant contenir la procédue
    • Copier la fonction ExportTable proposée dans la contribution
    • Coller celle-ci dans le module précédemment créé
    • Créer une nouvelle procédure qui va l'invoquer


    ton code permettrait-il de rassembler dans une même feuille de synthèse les données des feuilles de type A en ignorant les autres ?
    Bien entendu mais ce n'est pas la procédure elle même qui va se charger de faire la sélection. Elle attend juste qu'on lui passe les bons paramètres voir le premier fil de ma contribution où tout est expliqué
    Il faut juste indiquer la feuille source, la feuille cible ainsi que les arguments optionnel ValueOnly et ClearSheet si les valeurs pas défaut ne coniennent pas.

    C'est donc dans la procédure appelante qu'il faut faire la sélection des feuilles sources à copier à l'aide
    d'une structure conditionnelle telle que If Then Else ou Select Case (que je privilégie) à l'intérieur d'une structure répétitive (For To Next ou For Object Each In Collection)

    Exemple de procédure appelante
    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
    Sub ExportTableExemple_1()
      ' La feuille "cible" et les feuilles "source" sont dans le même classeur
      ' Les feuilles à copier doivent avoir les 3 premiers caractères commençant par mvt qu 
      Dim shtTarget As Worksheet
      Dim sht As Worksheet
      Dim Count As Integer
      Set shtTarget = ThisWorkbook.Worksheets("Export")
      For Each sht In ThisWorkbook.Worksheets
        Select Case Left(LCase(sht.Name), 3)
          Case "mvt"
            Count = Count + 1
            ExportTable sht, shtTarget, ValueOnly:=True, ClearSheet:=Count = 1
        End Select
      Next
    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

  17. #37
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Merci !!!
    Bonjour Philippe,


    Merci beaucoup pour deux choses : d'une part tes explications, qui m'ont permis de comprendre la différence entre une macro (une routine ponctuelle) et une fonction, que je vois comme une sorte d'extension fonctionnelle à un environnement de travail ; et merci pour ce bout de code, qui associé à la fonction me permet de faire exactement ce que je veux. Il ne fonctionnait pas au début, car je n'avais pas fait attention à la casse (minuscule) des premières lettres de chaque feuille appelée ; problème résolu et moulinette qui fonctionne parfaitement.

    Merci encore et bon week-end !

    Raphaël

  18. #38
    Nouveau membre du Club
    Homme Profil pro
    administrateur
    Inscrit en
    Mai 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : administrateur

    Informations forums :
    Inscription : Mai 2015
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    Bonjour Philippe,

    Une question sur cette super procédure
    Est il possible de la piloter depuis un classeur A avec l'ensemble de ses modules, situé dans un répertoire exemple 1
    pour récupérer une feuille de chaque classeur B ( B1,B2,B3,etc) situés dans un répertoire source exemple 2
    pour les assembler dans un classeur C situés dans un répertoire cible exemple 3
    et sans passer par la boite de sélection du répertoire mais en fixant la racine source sur un dossier.


    Merci infiniment pour ta réponse

  19. #39
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Rolando,
    Merci d'avoir apprécié cette contribution
    Est il possible de la piloter depuis un classeur A avec l'ensemble de ses modules, situé dans un répertoire exemple 1
    pour récupérer une feuille de chaque classeur B ( B1,B2,B3,etc) situés dans un répertoire source exemple 2
    pour les assembler dans un classeur C situés dans un répertoire cible exemple 3
    Je l'ai précisé de multiples fois dans mes réponses à plusieurs commentaires déposés.
    La procédure a pour but de copier une plage source en lui indiquant soit un objet Range soit un objet Worksheet (dans ce cas là, la plage de cellules DOIT commencer en cellule A1 de cette feuille vers une feuille cible (objet WorkSheet) (débutant en cellule A1.
    La source et cible peuvent être dans le même classeur ou dans des classeurs différents (que le code VBA soit présent dans un de ces classeurs ou pas.

    C'est valable dans toute procédure, bien construite, qui a pour argument un objet Range, un objet Worksheet ou autres à partir du moment où l'on associe l'objet à ses parents (Range a pour parent un objet Worksheet qui lui même a comme parent un objet Workbook)

    Dans tous les exemples ci-dessous, l'ensemble des classeurs utilisés sont ouverts

    Exemple 1 - La plage source et la feuille cible sont dans le même classeur que le code VBA
    • La source est la plage courante de la feuille [mvt-JANV]
    • La cible est la feuille nommée [Export]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Exemple_1()
     ' Philippe Tulliez - www.magicoffice.be
     ' Déclaration des variables
     Dim rngSource As Range     ' Plage source
     Dim shtTarget As Worksheet ' Feuille cible
     ' Attribution de la référence d'objet aux variables
     Set rngSource = ThisWorkbook.Worksheets("mvt-Janv").Range("A1").CurrentRegion
     Set shtTarget = ThisWorkbook.Worksheets("Export")
     ' Exportation des données
     ExportTable DataSource:=rngSource, TargetSheet:=shtTarget, ClearSheet:=True
     Set rngSource = Nothing: Set shtTarget = Nothing
    End Sub
    Exemple 2 - Le classeur où se trouve la plage source est différent du classeur où se trouve le code VBA et la feuille cible
    • La source est la plage courante (à partir de A1) de la feuille nommée [TimeSheet] du classeur nommé 1902 - TimeSheet Samia.xlsb
    • La cible est la feuille nommée [Export] du classeur où se trouve le code VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Exemple_2()
     ' Philippe Tulliez - www.magicoffice.be
     ' Déclaration des variables
     Dim rngSource As Range     ' Plage source
     Dim shtTarget As Worksheet ' Feuille cible
     ' Attribution de la référence d'objet aux variables
     Set rngSource = Workbooks("1902 - TimeSheet Samia.xlsb").Worksheets("TimeSheet").Range("A1").CurrentRegion
     Set shtTarget = ThisWorkbook.Worksheets("Export")
     ' Exportation des données
     ExportTable DataSource:=rngSource, TargetSheet:=shtTarget, ClearSheet:=True
     Set rngSource = Nothing: Set shtTarget = Nothing
    End Sub
    Exemple 3 - Le classeur où se trouve la plage source et le classeur où se trouve la feuille cible ainsi que le code VBA sont tous dans des classeurs différents
    • La source est la plage courante (à partir de A1) de la feuille nommée [TimeSheet] du classeur nommé 1902 - TimeSheet Samia.xlsb
    • La cible est la feuille nommée [2019 TimeSheet] du classeur nommé Architecte TimeSheet.xlsb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Exemple_3()
     ' Philippe Tulliez - www.magicoffice.be
     '
     ' Déclaration des variables
     Dim rngSource As Range     ' Plage source
     Dim shtTarget As Worksheet ' Feuille cible
     ' Attribution de la référence d'objet aux variables
     Set rngSource = Workbooks("1902 - TimeSheet Samia.xlsb").Worksheets("TimeSheet").Range("A1").CurrentRegion
     Set shtTarget = Workbooks("Architecte TimeSheet.xlsb").Worksheets("2019 TimeSheet")
     ' Exportation des données
     ExportTable DataSource:=rngSource, TargetSheet:=shtTarget, ClearSheet:=True
     Set rngSource = Nothing: Set shtTarget = Nothing
    End Sub
    et sans passer par la boite de sélection du répertoire mais en fixant la racine source sur un dossier.
    Pas certain d'avoir compris la question
    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

  20. #40
    Nouveau membre du Club
    Homme Profil pro
    administrateur
    Inscrit en
    Mai 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : administrateur

    Informations forums :
    Inscription : Mai 2015
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    Bonjour Philippe, et un GRAND MERCI!!!

    Pour ma dernière question "sans passer par la boite de sélection du répertoire mais en fixant la racine source sur un dossier"

    j'avais modifié comme suit la procédure, ......c'était probablement un peu tiré par les cheveux

    C'est dans wkb3 que se situent les codes
    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
     
    Sub MainExport()
     
    Dim Folder As String, FileList() As String, Elem As Long
     Dim wkb1 As Workbook, wkb2 As Workbook, wkb3 As Workbook, ShtFrom As Worksheet, shtExport As Worksheet
     Dim txt As String
     
    Application.ScreenUpdating = False
     
     Set wkb2 = Workbooks.Open("C:\Users\TOTO\Tata.xlsx")
     Set wkb3 = Workbooks("Log_bala.xlsm")
     wkb3.Activate
       Set shtExport = wkb2.Worksheets(1)
     
     Folder = "C:\Users\TOTO\Titi": If Len(Folder) = 0 Then Exit Sub
     
     txt = "Nombre de lignes importées:"
     
     FileList = FileListInFolder(Folder)
     
     For Elem = 0 To UBound(FileList)
       Set wkb1 = Workbooks.Open(Folder & FileList(Elem))
       Set ShtFrom = wkb1.Worksheets(3)
     
       Select Case Elem
       Case 0: txt = txt & vbCrLf & vbCrLf & wkb1.Name & " - " & ExportTable(ShtFrom, shtExport, ClearSheet:=True) & " lignes"
       Case Else: txt = txt & vbCrLf & wkb1.Name & " - " & ExportTable(ShtFrom, shtExport) & " lignes"
       End Select
     
       wkb1.Close
       Next
     
       wkb2.Activate
     
       With ActiveWindow
            .SplitRow = 1
            .FreezePanes = True
       End With
     
      wkb2.Close SaveChanges:=True
     
     MsgBox txt, Title:="Importation des données  " ' & Folder
     Application.ScreenUpdating = True
    End Sub
    Dans le MsgBox, pour éviter d'avoir le cumul des lignes assemblées par dossier j'ai modifié comme suit la procédure ExportTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ExportTable = rngImport.Rows.Count
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ExportTable = rngTarget.Rows.Count + rngImport.Rows.Count
    j'ai bien le nombre de lignes transférées excepté pour le 1er dossier source ou j'ai une 1 ligne de plus qui correspond à la ligne des titres
    je ne vois pas bien pourquoi

Discussions similaires

  1. Regrouper plusieurs feuilles sur une autre
    Par lleirce dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/02/2015, 13h50
  2. Regrouper plusieurs feuilles sur une autre
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 29/01/2015, 10h19
  3. Regrouper plusieurs feuilles sur une autre
    Par lilie80 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/11/2013, 11h52
  4. Réponses: 3
    Dernier message: 23/01/2008, 03h52
  5. Réponses: 6
    Dernier message: 03/02/2007, 05h29

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