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 :

Concaténer 1er onglet de plusieurs classeurs différents


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 35
    Points
    35
    Par défaut Concaténer 1er onglet de plusieurs classeurs différents
    Bonjour,

    Je dispose de 150 classeurs excel partant chacun le nom d'un établissement différent (etab1, etab2, etab3...).

    Chacun de ces classeurs possède le "même" 1er onglet : liste de personnes avec différentes informations. Ces 1ers onglets ont donc toujours le même nb de colonnes (14 de A à N) mais pas le même nb de lignes (nb de personnes différents).

    Le ligne 10 (A10 à N10) contient le nom de mes variables.
    La liste de personnes commence à la ligne 11 (A11 à N11) et descend jusqu'à la ligne X (différente dans chaque classeur).

    Je souhaite donc que chaque liste de personne (chaque 1er onglet) soit copier les unes en dessous des autres mais je dois garder l'information de l'établissement (nom du classeur). Il faut donc qu'en plus de concaténer les listes, je créé une nouvelle colonne qui récupère le nom du classeur pour chaque liste.

    Je suis très novice en VBA.
    Pouvez-vous m'aider ?
    Je vous remercie par avance

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    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 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonjour
    Je dispose de 150 classeurs excel partant chacun le nom d'un établissement différent (etab1, etab2, etab3...).
    il s'agit bien des classeurs avec adresse différentes ou bien des onglets ??
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  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
    12 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Fonction "clé sur porte" dans cette contribution titrée Regrouper plusieurs feuilles sur une autre. (2003-2010)
    Par contre la liste des données doit commencer à la cellule A1 avec en première ligne, les titres.
    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
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonjour

    il s'agit bien des classeurs avec adresse différentes ou bien des onglets ??
    Non 150 fichiers excel avec un onglet chacun. Chaque fichier excel porte le nom d'un établissement.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Fonction "clé sur porte" dans cette contribution titrée Regrouper plusieurs feuilles sur une autre. (2003-2010)
    Par contre la liste des données doit commencer à la cellule A1 avec en première ligne, les titres.
    Il ne s'agit pas d'onglets différents dans un même fichier mais de 150 fichiers avec chacun un onglet.

  6. #6
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il ne s'agit pas d'onglets différents dans un même fichier mais de 150 fichiers avec chacun un onglet.
    J'ai bien lu ta demande et ai bien compris qu'il s'agissait de plusieurs classeurs mais as-tu pris la peine de lire les discussions de la contribution que j'ai référencée car je réponds au fil #3 a exactement la même problématique

    Seul mon classeur déposé initialement utilise des feuilles du même classeur mais dans la discussion dont référence ci-dessous j'ai proposé une autre démonstration.

    La seule chose qui diffère de ta demande c'est que les plages de données commence en cellule A1 et qu'il n'y a pas de colonne prévue pour ajouter le nom du classeur source mais j'attendais d'obtenir une réaction avant de continuer.
    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

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Merci ! et désolée... Effectivement j'avais mal compris. J'ai repris ton petit exemple et c'est la base de mon problème.
    Il reste à voir comment commencer la concaténation à A10 (noms de mes variables) et ajouter une colonne reprenant le nom du classeur.

    Petite chose supplémentaire, en réalité je n'ai pas qu'un onglet dans mes classeurs... Je souhaite concaténer chaque 3ème onglet. Ils portent tous le même nom quelque soit le classeur.

  8. #8
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Petite chose supplémentaire, en réalité je n'ai pas qu'un onglet dans mes classeurs... Je souhaite concaténer chaque 3ème onglet. Ils portent tous le même nom quelque soit le classeur.
    En ce qui concerne ta remarque sur le fait que c'est le 3ème onglet, c'est un peu désespérant de constater que c'est pourtant bien expliqué dans le fil #3 référencé plus haut.

    Voilà ce que j'ai écrit : "Pour la procédure ExportTable, c'est tout à fait transparent (que la feuille provienne du même classeur ou d'un autre classeur)."
    Nulle part il est écrit que ce doit être la première feuille.

    J'ai bien expliqué que la seule chose non prévue dans la procédure c'est de commencer ailleurs qu'en cellule A1 mais bon ce n'est pas compliqué à modifier, c'est la ligne 33
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rngImport = FromSheet.Range("A1").CurrentRegion
    et que je n'ajoute pas la colonne du classeur Source mais cela je vais regarder dans mes archives pour publier ce qu'il faut faire. Sans doute ce soir
    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

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Je suis vraiment désolée mais que signifie "Cet exemple considère que toutes les feuilles à rassembler dans la feuille shtExport sont seules dans les classeurs ou tout au moins se trouvent en première position." et "Il faut juste sélectionner le répertoire où se trouve les classeurs dont la première feuille contient la liste de données à exporter vers shtExport" ?
    J'ai davantage essayé de comprendre le code présenté dans l'exemple Excel - Export by AdvancedFilter.zip. Avec l'application, pour moi c'est plus concret... Je n'ai donc pas vu de "A1"... Dans tous les cas merci pour ton aide et désolée si j'ai du mal à m'y retrouver.

  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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suis vraiment désolée mais que signifie "Cet exemple considère que toutes les feuilles à rassembler dans la feuille shtExport sont seules dans les classeurs ou tout au moins se trouvent en première position."
    Alors dans la contribution Regrouper plusieurs feuilles sur une autre. (2003-2010) , les deux arguments qui définissent la source et la cible sont des objets feuilles et que lorsque j'écris une procédure c'est en fonction de ma vision des choses. C'est à dire une feuille pour une liste de données et que cette liste doit commencer en cellule A1, la première ligne contenant les étiquettes de colonnes., c'est la contrainte de cette procédure.

    La procédure Export by AdvancedFilter dont tu faire allusion est une autre procédure écrite plus tard, et n'est pas basée sur la méthode Copy mais AdvancedFilter.
    Comme tu n'as pas mis le lien, je ne peux affirmer ce que j'avance car j'écris beaucoup sur ce site mais il est possible que j'ai prévu un argument Variant qui permet de définir soit une objet Range soit un objet Worksheet
    Alors si tu parles d'une autre contribution La méthode AdvancedFilter et l'objet ListObject, celle là est basée également sur la méthode AdvancedFilter mais est basée sur l'objet ListObject qui sont les tableaux structurés et là on ne pas pas les arguments Cible et source comme Range ou Worksheet mais comme ListObject

    Ce sont bien trois objets différents

    et "Il faut juste sélectionner le répertoire où se trouve les classeurs dont la première feuille contient la liste de données à exporter vers shtExport" ?
    Cela signifie qu'une procédure va chercher les classeurs dans un répertoire et définit la première feuille comme étant la feuille source

    La procédure d'exportation est indépendante de celle qui ouvre les fichiers d'un répertoire
    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
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    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
    Option Explicit
    Sub MainExport()
     Dim Folder As String, FileList() As String, Elem As Long
     Dim wkb1 As Workbook, ShtFrom As Worksheet
     Dim txt As String
     ' Sélection du répertoire
     Folder = GetFolder(ThisWorkbook.Path & "\"): If Len(Folder) = 0 Then Exit Sub
     txt = "Nombre de lignes importées"
     ' Renvoie la liste des fichiers présent dans le répertoire (Folder)
     FileList = FileListInFolder(Folder)
     Application.ScreenUpdating = False
     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 & wkb1.Name & " - " & ExportTable(ShtFrom, shtExport, ClearSheet:=True) & " lignes"
        Case Else: txt = txt & vbCrLf & wkb1.Name & " - " & ExportTable(ShtFrom, shtExport) & " lignes"
       End Select
       wkb1.Close
     Next
     MsgBox txt, Title:="Importation des données du répertoire " & Folder
     Application.ScreenUpdating = True
    End Sub
    Function GetFolder(Optional StrPath As String) As String
      Dim fdlg As FileDialog, sItem As String
      Set fdlg = Application.FileDialog(msoFileDialogFolderPicker)
      If Len(StrPath) = 0 Then StrPath = Application.ActiveWorkbook.Path & "\"
      With fdlg
      .Title = "Selection d'un répertoire"
      .AllowMultiSelect = False
      .InitialFileName = StrPath
       If .Show = -1 Then GetFolder = .SelectedItems(1)
      End With
     Set fdlg = Nothing
    End Function
    Function FileListInFolder(StrPath As String) As Variant
     Dim FileName As String, Elem As Long, FileList() As String
     If Right(StrPath, 1) <> "\" Then StrPath = StrPath & "\"
     FileName = Dir(StrPath)
     Do While FileName <> ""
      If Right(FileName, 4) = ".xls" Then
       ReDim Preserve FileList(Elem): FileList(Elem) = FileName: Elem = Elem + 1
      End If
      FileName = Dir
     Loop
     FileListInFolder = FileList
    End Function
    Voici le code que j'ai repéré (que tu as fait) et qui me semble être très proche de ce dont j'ai besoin. Effectivement il manque comment sélectionner les données à partir de la bonne ligne/cellule (noms de mes variables ligne 10, liste des personne à partir de la ligne 11) et ajouter la colonne avec le nom de chaque classeur d'origine. Le numéro de la feuille est effectivement très facile à changer ! Merci pour tout le travail que tu fais.

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    Avez-vous des pistes à me donner pour compléter le programme ci-dessus ?
    Merci

  13. #13
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avez-vous des pistes à me donner pour compléter le programme ci-dessus ?
    Voir cette contribution titrée CopyRange - Copie de liste de données (source) dans une feuille cible
    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

Discussions similaires

  1. [XL-2016] Regroupement des onglets de plusieurs classeurs dans une feuille unique
    Par JNoel65 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 30/01/2019, 12h39
  2. Réponses: 9
    Dernier message: 28/02/2018, 12h42
  3. [XL-2007] Collage sur plusieurs classeurs différents.
    Par djemol dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/07/2016, 17h33
  4. Répétition d'un code sur plusieurs classeurs différents
    Par Lily31 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/05/2015, 15h20
  5. [XL-2002] Rechercher/Remplacer chaîne dans onglet macro de plusieurs classeurs
    Par cdlabal dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/11/2010, 00h25

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