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

  1. #1
    Candidat au Club
    Homme Profil pro
    Traducteur
    Inscrit en
    novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Traducteur

    Informations forums :
    Inscription : novembre 2018
    Messages : 6
    Points : 3
    Points
    3

    Par défaut Copie de colonnes d'un classeur à un autre sur plusieurs onglets

    Salut à tous !
    Cela fait plusieurs années que je viens récupérer des réponses et des bouts de code ici, mais là je bloque (je n'ai pas fait de VBA depuis deux ans) et je viens vous demander vos lumières.
    J'ai deux classeurs avec une quarantaine d'onglets (de A0 à A10 et d'autres avec des noms comme "fishing", "client_data" etc.) et je veux copier la colonne E du fichier 1 dans la colonne D du fichier 2, et ce pour chaque onglet. En grappillant à droite à gauche et dans mes cours de la fac, ceci marche pour un onglet :
    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
    Sub Importer()
     
        Dim Chemin As String, Fichier As String, Fichier2 As String
     Dim ENMaster As String
    ENMaster = InputBox("Name of the EN master (the EN and FR files have to be in the same folder): ", "EN Master")
        '
        Dim wkb As Workbook
        Dim shFrom As Worksheet
        Dim shTo As Worksheet
        Dim varTab As Variant
        '
        '
        Chemin = ThisWorkbook.Path & Application.PathSeparator
        Fichier = "\" & ENMaster
     
     
        Set wkb = Workbooks.Open(Chemin & Fichier)
        Set shFrom = wkb.Worksheets("A2")
        Set shTo = ThisWorkbook.Worksheets("A2")
     
        Application.ScreenUpdating = False
     
     
     
        varTab = shFrom.Range(shFrom.Range("E1"), shFrom.Range("E1").End(xlDown))
        shTo.Range("D1").Resize(UBound(varTab), UBound(varTab, 2)) = varTab
     
     
     
    End Sub
    Par contre, je cale pour faire cela pour l'ensemble des onglets. La seule solution que j'ai et qui marche a été de copier-coller le tout en changeant le nom de l'onglet (A3, A4, fishing etc.). Ça marche, mais ce n'est pas beau et ça prend de la place.
    Vous auriez des pistes pour régler cela ?
    Merci !

  2. #2
    Membre confirmé
    Inscrit en
    septembre 2007
    Messages
    375
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 375
    Points : 582
    Points
    582

    Par défaut

    Bonsoir,

    Il te suffit de faire cette copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        varTab = shFrom.Range(shFrom.Range("E1"), shFrom.Range("E1").End(xlDown))
        Dim sh As Worksheet
        For Each sh In ThisWorkbook.Sheets
            sh.Range("D2").Resize(UBound(varTab), UBound(varTab, 2)) = varTab
        Next sh

  3. #3
    Candidat au Club
    Homme Profil pro
    Traducteur
    Inscrit en
    novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Traducteur

    Informations forums :
    Inscription : novembre 2018
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Merci de ton aide, mais je me suis mal expliqué :
    "je veux copier la colonne E du fichier 1 dans la colonne D du fichier 2, et ce pour chaque onglet" => j'essaye de copier la colonne E de l'onglet A2 dans la colonne D de l'onglet A2 du fichier 2, la colonne E de l'onglet A3 dans la colonne D de l'onglet A3 du fichier 2, etc.

    Désolé de t'avoir fait perdre du temps :/

  4. #4
    Membre confirmé
    Inscrit en
    septembre 2007
    Messages
    375
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 375
    Points : 582
    Points
    582

    Par défaut

    Bonjour,

    Effectivement je n'avais pas bien compris ta demande mais le principe demeure et tu peux réaliser ton projet ainsi
    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
    Sub Importer()
        Dim Chemin As String
        Dim ENMaster As String
        Dim wkb As Workbook
        Dim wko As Workbook
        Dim varTab As Variant
        Dim sh As Worksheet
        '
        Set wko = ThisWorkbook
        ENMaster = InputBox("Name of the EN master (the EN and FR files have to be in the same folder): ", "EN Master")
        '
        Chemin = ThisWorkbook.Path & Application.PathSeparator
        Set wkb = Workbooks.Open(Chemin & ENMaster)
     
        For Each sh In wkb.Sheets ' recopie des onglets
            varTab = sh.Range("E1").Resize(sh.Range("E" & sh.Rows.Count).End(xlUp).Row, 1).Value
            wko.Sheets(sh.Name).Range("D2").Resize(UBound(varTab), UBound(varTab, 2)) = varTab
        Next sh
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Traducteur
    Inscrit en
    novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Traducteur

    Informations forums :
    Inscription : novembre 2018
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Merci encore !
    Une erreur d’exécution 1004 apparaît pour la ligne wko.Sheets(sh.Name).Range("D2").Resize(UBound(varTab), UBound(varTab, 2)) = varTab mais la macro semble tout de même marcher. Je me pencherai dessus à la pause.

  6. #6
    Membre émérite Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 518
    Points : 2 980
    Points
    2 980

    Par défaut

    Bonjour,

    1 - Pour ton erreur.
    Sachant que tu l'as déclarée, tu n'es pas obligé d'attacher sh.
    remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wko.Sheets(sh.Name).Range("D2")
    par
    2 - Il est opportun de libérer les variables affectées à des objets après complète utilisation
    3 - Pour le fun, utiliser Worksheet (La collection Sheets comprenant les graphiques)

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  7. #7
    Candidat au Club
    Homme Profil pro
    Traducteur
    Inscrit en
    novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Traducteur

    Informations forums :
    Inscription : novembre 2018
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    J'ai craqué, quand j'ai vu une notification de réponse, je n'ai pas pu attendre la pause ^^
    Merci pour ton intervention, mais l'erreur est toujours présente sur la même ligne et contrairement à la version d'anasecu, la copie ne se fait que sur un onglet.
    PS: d'ailleurs, c'est D1 qu'il faut et non D2, sinon tout est décalé.

  8. #8
    Membre émérite Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    1 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 1 518
    Points : 2 980
    Points
    2 980

    Par défaut

    D'accord.
    J'ai regardé le code d'un peu plus près.
    Un collage spécial valeurs ne suffirait-il pas?

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  9. #9
    Candidat au Club
    Homme Profil pro
    Traducteur
    Inscrit en
    novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Traducteur

    Informations forums :
    Inscription : novembre 2018
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Comme je disais, je ne fais plus que très rarement du VBA, donc je ne suis pas sûr de savoir ce qu'est un collage spécial valeurs. En fait, il me faut le contenu des cellules et le formatage (couleur de fond principalement).

  10. #10
    Membre confirmé
    Inscrit en
    septembre 2007
    Messages
    375
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 375
    Points : 582
    Points
    582

    Par défaut

    Bonjour,
    Citation Envoyé par TommyLobo Voir le message
    Une erreur d’exécution 1004 apparaît pour la ligne wko.Sheets(sh.Name)...
    Bien entendu la macro telle qu'elle est n'est pas sécurisée et sans doute que tu n'as pas 2 classeurs avec exactement les mêmes structures d'onglets.
    il te faudrait vérifier avec le débogage le paramètre qui est erroné car 1004 est un peu fourre tout.

    Citation Envoyé par TommyLobo Voir le message
    En fait, il me faut le contenu des cellules et le formatage (couleur de fond principalement).
    Si tu veux une copie il faut faire une copie tout simplement
    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 Importer()
        Dim Chemin As String
        Dim ENMaster As String
        Dim wkb As Workbook
        Dim wko As Workbook
        Dim sh As Worksheet
        '
        Set wko = ThisWorkbook
        ENMaster = InputBox("Name of the EN master (the EN and FR files have to be in the same folder): ", "EN Master")
        '
        Chemin = ThisWorkbook.Path & Application.PathSeparator
        Set wkb = Workbooks.Open(Chemin & ENMaster)
     
        For Each sh In wkb.Sheets ' recopie des onglets
            sh.Range("E1").Resize(sh.Range("E" & sh.Rows.Count).End(xlUp).Row, 1).Copy _
            Destination:=wko.Sheets(sh.Name).Range("D1")
        Next sh
    End Sub

  11. #11
    Candidat au Club
    Homme Profil pro
    Traducteur
    Inscrit en
    novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Traducteur

    Informations forums :
    Inscription : novembre 2018
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    Si, les deux fichiers ont exactement la même structure : l'un contient des textes en chinois et la traduction anglaise et l'autre est une copie avec les textes anglais et la traduction française. Comme l'anglais de la version française n'est pas à jour, je vais juste le chercher dans la version anglais-chinois.
    Avec ta proposition, tout me semble marcher à première vue, il me reste à le tester sur le vrai fichier.

    Merci beaucoup de m'avoir donné de ton temps et d'avoir partagé tes connaissances !

  12. #12
    Membre confirmé
    Inscrit en
    septembre 2007
    Messages
    375
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 375
    Points : 582
    Points
    582

    Par défaut

    Bonjour,

    Merci du retour et je suis content que ceci fonctionne comme tu le souhaites.

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

Discussions similaires

  1. problème de copies de feuilles d'un classeur à l'autre
    Par mysterauto dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2011, 00h55
  2. [XL-2003] copier une colonne d'un classeur à un autre
    Par tremens dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 07/03/2010, 18h45
  3. copie de feuilles d'un classeur à l'autres
    Par kmario dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/01/2010, 09h37
  4. Copie de valeurs d'un classeur à un autre
    Par leyeno dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/05/2009, 16h17
  5. copie de valeur d'un classeur à un autre
    Par Aploy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/03/2007, 17h26

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