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 :

Copier le contenu de classeur Excel dans un classeur Excel unique


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 11
    Points
    11
    Par défaut Copier le contenu de classeur Excel dans un classeur Excel unique sans doublon
    Bonjour,

    Tout d'abord, je ne sais pas du tout faire de macro Excel. Voilà, le décor est planté.

    Sinon, je cherche, pour mon boulot, à faire la chose suivante:

    J'ai un repertoire que l'on nommera : "Bilan", lequel contient X fichiers Excel, ayant le même contenu (je parle niveau colonne, pas le contenu des cellules). Chaque fichier Excel a un nom différent, mais commençant toujours de la même façon "bilan_xxxxx"
    Ces fichiers Excel ont des données uniquement sur la première feuille.

    Je cherche, via une macro (car le nombre de fichier est important), à copier la feuille 1 de chaque fichier dans un fichier unique.
    A savoir que la copie de la feuille 1 du classeur 1 ne doit biens ur pas être effacer par la feuille 1 du classeur 2.
    Tout doit se retrouver les uns en dessous des autres.

    Par avance merci pour votre aide.

  2. #2
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Slt,
    peut-être un début de réponse ici :http://www.developpez.net/forums/d85...seul-classeur/

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Oui cela à l'air de correspondre à ce que je veux faire.

    Reste à comprendre ces lignes là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
           Ligne = .Range("A65536").End(xlUp).Row + 1
            Set wbk = Workbooks.Open("C:\classeurs\" & Fich)
            wbk.Sheets("Feuil1").Range("A7", wbk.Sheets("Feuil1").Range("H65536").End(xlUp)).Copy .Cells(Ligne, 1) 'wbk.Sheets("Feuil1") à adapter en fonction du nom de la feuille à copier

  4. #4
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    slt,
    j'ai remis le code de mercatog du lien que je t'avais donné avec quelques explications
    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
    Sub test()
    Dim wbk As Workbook, awbk As Workbook
    Dim wsh As Worksheet
    Dim Fich As String
    Dim Ligne As Double
     
    Application.ScreenUpdating = False
    'définie le classeur de destination, le classeur d'ou la macro est lancée
    Set awbk = ThisWorkbook
    'définie la feuille de destination
    Set wsh = awbk.Sheets(1)
     
    'définie le répertoire ou se trouve les fichiers à copier
    Fich = Dir("C:\Bilan\*.xls")
    'dans chaque fichier
    Do While Fich <> ""
        With wsh
            'définie a partir de la colonne A la dernière ligne vide
            Ligne = .Range("A65536").End(xlUp).Row + 1
     
            'définie et ouvre le fichier source
            Set wbk = Workbooks.Open("C:\Bilan\" & Fich)
            'copie une plage de cellule ici "A7:H" & dernière ligne pleine de la colonne H
            'dans la feuille de destination à la première ligne vide à partir de la colonne A
            'TU DEVRAS ADAPTER LA PLAGE A TES BESOINS ici : (range ("A7", wbk.etc...)
            wbk.Sheets("Feuil1").Range("A7", wbk.Sheets("Feuil1").Range("H65536").End(xlUp)).Copy .Cells(Ligne, 1)
        End With
        'ferme le classeur source
        wbk.Close False
        Fich = Dir
        'remet à zéro la variable qui ouvre le fichier source
        Set wbk = Nothing
    Loop
    Set wsh = Nothing
    Set awbk = Nothing
    Application.ScreenUpdating = True
    End Sub
    si tu as des questions :
    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Lorsque je teste, j'ai ce message d'erreur: "L'indice n'appartient pas à la sélection", puis m'ouvre un des fichiers Excel que je souihaite copier.

    A savoir également que certaines cellules de mes fichiers Excel à copier, sont vides, et que je dois les copier tout de même.

    Mes colonnes vont de A à Q

  6. #6
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    re,
    1) lorsque tu es dans l'éditeur appuie sur F8 pour lancer la macro pas à pas. tu appuie plusieurs fois sur cette touche jusqu'a la ligne qui génère cette erreur et tu nous l'a montre, stp, car difficile de deviner le problème.

    2) Dans tes fichiers doit-on copier à partir de A1?


    EDIT: j'ai fait quelques changements dans le 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub test()
    Dim wbk As Workbook, awbk As Workbook
    Dim wsh As Worksheet
    Dim Fich As String
    Dim Ligne As Long, derlign As Long
     
    Application.ScreenUpdating = False
    'définie le classeur de destination, le classeur d'ou la macro est lancée
    Set awbk = ThisWorkbook
    'définie la feuille de destination
    Set wsh = awbk.Sheets(1)
     
    'définie le répertoire ou se trouve les fichiers à copier
    Fich = Dir("C:\Documents and Settings\Atelier\Bureau\Bilan\*.xls")
    'dans chaque fichier
    Do While Fich <> ""
        With wsh
            'définie a partir de la colonne A la dernière ligne vide
            Ligne = .Range("A65536").End(xlUp).Row + 1
     
            'définie et ouvre le fichier source
            Set wbk = Workbooks.Open("C:\Documents and Settings\Atelier\Bureau\Bilan\" & Fich)
            derlign = wbk.Sheets(1).Cells.Find("*", , , , , xlPrevious).Row
            'copie une plage de cellule ici "A1:Q" 
            'dans la feuille de destination à la première ligne vide à partir de la colonne A
            wbk.Sheets(1).Range("A1:Q" & derlign).Copy .Cells(Ligne, 1)
        End With
        'ferme le classeur source
        wbk.Close False
        Fich = Dir
        'remet à zéro la variable qui ouvre le fichier source
        Set wbk = Nothing
    Loop
    Set wsh = Nothing
    Set awbk = Nothing
    Application.ScreenUpdating = True
    End Sub
    Si j'ai vu juste le probleme viens du nom des tes feuils, dans le code j'ai remplacer "sheets ("feuil1")" par le num de la feuille "sheets (1)" . J'ai ensuite adapter le code à ta plage A:Q. Dis moi ce qu'il en est...
    A+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    Bonsoir Albibak, et rvtoulon (Au passage bon souvenir de La Crau),
    et à eux qui passeront par là.

    Albibak, si tu ne sais pas faire de Macros; j'ose penser qu'ici tu vas bien apprendre.

    De mon coté, je ne suis pas un pro, mais j'ai des p'tits trucs qui me servent bien.

    Notamment l'utilisation des ListView, et d'enregistrer dans les propriétés de mon
    Classeur dans le chemin des recherches qui le concernent.

    Tu regardes, et tu me dis. Je suis disposé à commenter...
    Attention au nom de la feuille du classeur que tu veux copier: Ici; c'est "Feuil1"

    Je joins un exemple en espérant qu'il passe...

    Bonne fin de journée à toi et à tous.

    Yann
    Fichiers attachés Fichiers attachés

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par rvtoulon Voir le message
    re,
    1) lorsque tu es dans l'éditeur appuie sur F8 pour lancer la macro pas à pas. tu appuie plusieurs fois sur cette touche jusqu'a la ligne qui génère cette erreur et tu nous l'a montre, stp, car difficile de deviner le problème.

    2) Dans tes fichiers doit-on copier à partir de A1?


    EDIT: j'ai fait quelques changements dans le 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub test()
    Dim wbk As Workbook, awbk As Workbook
    Dim wsh As Worksheet
    Dim Fich As String
    Dim Ligne As Long, derlign As Long
     
    Application.ScreenUpdating = False
    'définie le classeur de destination, le classeur d'ou la macro est lancée
    Set awbk = ThisWorkbook
    'définie la feuille de destination
    Set wsh = awbk.Sheets(1)
     
    'définie le répertoire ou se trouve les fichiers à copier
    Fich = Dir("C:\Documents and Settings\Atelier\Bureau\Bilan\*.xls")
    'dans chaque fichier
    Do While Fich <> ""
        With wsh
            'définie a partir de la colonne A la dernière ligne vide
            Ligne = .Range("A65536").End(xlUp).Row + 1
     
            'définie et ouvre le fichier source
            Set wbk = Workbooks.Open("C:\Documents and Settings\Atelier\Bureau\Bilan\" & Fich)
            derlign = wbk.Sheets(1).Cells.Find("*", , , , , xlPrevious).Row
            'copie une plage de cellule ici "A1:Q" 
            'dans la feuille de destination à la première ligne vide à partir de la colonne A
            wbk.Sheets(1).Range("A1:Q" & derlign).Copy .Cells(Ligne, 1)
        End With
        'ferme le classeur source
        wbk.Close False
        Fich = Dir
        'remet à zéro la variable qui ouvre le fichier source
        Set wbk = Nothing
    Loop
    Set wsh = Nothing
    Set awbk = Nothing
    Application.ScreenUpdating = True
    End Sub
    Si j'ai vu juste le probleme viens du nom des tes feuils, dans le code j'ai remplacer "sheets ("feuil1")" par le num de la feuille "sheets (1)" . J'ai ensuite adapter le code à ta plage A:Q. Dis moi ce qu'il en est...
    A+
    Alors je viens de tester, mais il me copie toujours la première feuille des autres classeurs, or je veux copier la seconde, mais même quand je change le nombre de sheet(x), ca me copie toujours la première.

    Sinon, j'ai remarqué que ca ne me copiait le contenu que d'un seul des fichiers, et non tous les fichiers les uns à la suite des autres.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par YANN-56 Voir le message
    Bonsoir Albibak, et rvtoulon (Au passage bon souvenir de La Crau),
    et à eux qui passeront par là.

    Albibak, si tu ne sais pas faire de Macros; j'ose penser qu'ici tu vas bien apprendre.

    De mon coté, je ne suis pas un pro, mais j'ai des p'tits trucs qui me servent bien.

    Notamment l'utilisation des ListView, et d'enregistrer dans les propriétés de mon
    Classeur dans le chemin des recherches qui le concernent.

    Tu regardes, et tu me dis. Je suis disposé à commenter...
    Attention au nom de la feuille du classeur que tu veux copier: Ici; c'est "Feuil1"

    Je joins un exemple en espérant qu'il passe...

    Bonne fin de journée à toi et à tous.

    Yann
    Merci Yann pour ton aide.

    En mode de bug, j'ai une erreur ici:

    "Impossible d'ouvrir le fichier"

    ActiveWorkbook.FollowHyperlink ActiveWorkbook.Subject _
    & UserForm1.ListView1.ListItems(i).Text & ".xls"

  10. #10
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    bjr, plusieurs remarques :
    1)
    Citation Envoyé par albibak Voir le message
    Alors je viens de tester, mais il me copie toujours la première feuille des autres classeurs, or je veux copier la seconde, mais même quand je change le nombre de sheet(x), ca me copie toujours la première.
    Ben oui, dans ton premier message tu dis:
    Je cherche, via une macro (car le nombre de fichier est important), à copier la feuille 1 de chaque fichier dans un fichier unique.
    si tu met "sheets (2)" ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlign = wbk.Sheets(2).Cells.Find("*", , , , , xlPrevious).Row
    , et là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbk.Sheets(2).Range("A1:Q" & derlign).Copy .Cells(Ligne, 1)
    la macro copiera la deuxième feuille. Sinon remplace "Sheets (2)" par Sheets("NOMDELAFEUILLEACOPIER"), en espérant que dans chaque classeur elle porte le même nom sinon tu auras l'erreur que tu as précédemment décrite.

    2) tu dis aussi:
    Sinon, j'ai remarqué que ca ne me copiait le contenu que d'un seul des fichiers, et non tous les fichiers les uns à la suite des autres.

    Je viens de tester la macro en mettant des fichiers excel dans un répertoire nommé bilan et elle me copie la deuxième feuille de chaque classeur à la suite des autres dans la feuille 1 du classeur unique.
    As-tu changer quelques choses à la macro? Peux-tu mettre le code que tu utilises dans ton classeur.
    Merci à +

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    Bonjour

    La raison est que dans les options des dossiers, tu n'as pas coché
    "Masquer les extensions dont le type est connu".

    Donc, dans ce cas; il faut supprimer dans cette ligne: & ".xls"

    Bonne journée.

    Yann

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par rvtoulon Voir le message
    bjr, plusieurs remarques :
    1)
    Ben oui, dans ton premier message tu dis: si tu met "sheets (2)" ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlign = wbk.Sheets(2).Cells.Find("*", , , , , xlPrevious).Row
    , et là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbk.Sheets(2).Range("A1:Q" & derlign).Copy .Cells(Ligne, 1)
    la macro copiera la deuxième feuille. Sinon remplace "Sheets (2)" par Sheets("NOMDELAFEUILLEACOPIER"), en espérant que dans chaque classeur elle porte le même nom sinon tu auras l'erreur que tu as précédemment décrite.

    2) tu dis aussi:
    Je viens de tester la macro en mettant des fichiers excel dans un répertoire nommé bilan et elle me copie la deuxième feuille de chaque classeur à la suite des autres dans la feuille 1 du classeur unique.
    As-tu changer quelques choses à la macro? Peux-tu mettre le code que tu utilises dans ton classeur.
    Merci à +
    Super, ça marche impec, merci.
    J'ai modifié 2-3 trucs pour ça corresponde mieux à mon besoin.

    Ca met bien tout à la suite et tous les classeurs.

    Il me reste à voir comment faire pour ne pas réinscrire une ligne si le contenu d'une celulle est déjà présente dans un fichier.
    Je m'explique, il y a une cellule incident par exemple, qui contient des numéros d'incident.
    Si dans le prochain fichier que j'ouvre, le numero d'incident est déjà présent dans le fichier que je viens de créer, alors il ne recopie pas la ligne.

Discussions similaires

  1. [Toutes versions] Macro pour copier le contenu d'une cellule d'un fichier excel et coller dans une form
    Par wizishop dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 16/10/2015, 12h05
  2. Ouvrir (et non copier) plusieurs excels dans nouveau classeur
    Par Buck92 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/05/2010, 15h28
  3. Ouvrir (et non copier) plusieurs excels dans nouveau classeur
    Par Buck92 dans le forum Général Python
    Réponses: 0
    Dernier message: 20/05/2010, 11h16
  4. vba excel:copier le contenu d'une feuil dans une autre feuil
    Par yucf_miagiste dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/09/2007, 19h53
  5. Copier le contenu d'une cellule dans une variable sous excel
    Par franckB dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/04/2007, 19h54

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