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 :

Copie de feuilles d'un classeur dans l'autre


Sujet :

Macros et VBA Excel

  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut Copie de feuilles d'un classeur dans l'autre
    La question étant récurrente, je propose deux méthodes
    1 - Copier toutes les feuilles de classeur1 dans classeur2 à l'exception de certaines feuilles
    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 CopieDeCertainesFeuilles()
    Dim CL1 As Workbook
    Dim CL2 As Workbook
    Dim LaFeuille as worksheet
    Dim i As Byte, ListeANePasCopier '(as variant)
    Dim ko As Boolean
        Set CL1 = Workbooks("Classeur1.xls")
        Set CL2 = Workbooks("Classeur2.xls")
        ListeANePasCopier = Array("Feuil1", "Feuil6", "Feuil9")
        For Each LaFeuille In CL1.Worksheets
            For i = 0 To UBound(ListeANePasCopier)
                ko = ko Or LaFeuille.Name = ListeANePasCopier(i)
            Next
            If Not ko Then LaFeuille.Copy After:=CL2.Worksheets(CL2.Worksheets.Count)
            ko = False
        Next
        Set CL1 = Nothing
        Set CL2 = Nothing
    End Sub
    2 - Ne copier que certaines feuilles de classeur1 dans classeur2
    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 CopieDeFeuillesChoisies()
    Dim CL1 As Workbook
    Dim CL2 As Workbook
    Dim LaFeuille As Worksheet
    Dim i As Byte, ListeACopier '(as variant)
    Dim Ok As Boolean
        Set CL1 = Workbooks("Classeur1.xls")
        Set CL2 = Workbooks("Classeur2.xls")
        ListeACopier = Array("Feuil1", "Feuil3", "Feuil7")
        For Each LaFeuille In CL1.Worksheets
            For i = 0 To UBound(ListeACopier)
                Ok = Ok Or LaFeuille.Name = ListeACopier(i)
            Next
            If Ok Then LaFeuille.Copy After:=CL2.Worksheets(CL2.Worksheets.Count)
            Ok = False
        Next
        Set CL1 = Nothing
        Set CL2 = Nothing
    End Sub
    Si une méthode plus simple fait la même chose... merci de la proposer.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    bonjour,

    http://www.developpez.net/forums/sho...d.php?t=362927

    Permet d'integrer un critere de sélection des feuilles plutot que de les coder en "dur".

    Le move peut-etre remplacé par copy, mais aussi par printout ou delete par exemple.

    Cordialement,

    Tirex28/

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    J'ai regardé le code que tu indiques.
    Il s'agit en effet d'un autre cas de figure avec lecture d'un critère lu dans une feuille de calculs.
    On peut également avoir les noms des feuilles à copier/ne pas copier dans une colonne ou demander à l'utilisateur de les sélectionner dans une liste...
    On pourrait aussi, plutôt que de "coder les noms en dur" coder les N° de feuilles... "en dur" et utiliser Sheets(i)...
    Mais on peut de même passer les noms en revue et poser la question à l'utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        For Each LaFeuille In CL1.Worksheets
           if Msgbox("Copier la feuille " & LaFeuille.Name, vbYesNo) = vbyes then _
                LaFeuille.Copy After:=CL2.Worksheets(CL2.Worksheets.Count)
        Next

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    On pourrait également simplifier le code et éviter une boucle.
    Quelque soit la méthode pour créer le tableau des feuilles, on peut utiliser Join et instr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        ListeANePasCopier = Array("Rien","Feuil1", "Feuil6", "Feuil9","Rien")
        LaListe = Join(ListeANePasCopier, ";")
        For Each LaFeuille In CL1.Worksheets
             if instr(lcase(LaListe), ";" & lcase(LaFeuille.Name) & ";")= 0 then _
                 LaFeuille.Copy After:=CL2.Worksheets(CL2.Worksheets.Count)
        Next
    où "Rien" permet d'avoir tous les noms encadrés de ";" afin d'éviter les confusions dans les noms de feuilles. Ex : Feuil1, Feuil10, Feuil11...

Discussions similaires

  1. consolidation de cellules des feuilles d'un classeur dans la feuille 1
    Par djoenis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/03/2011, 16h34
  2. 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, 08h37
  3. [XL-2007] enregister une feuille d'un classeur dans un autre repertoire
    Par karim19 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/08/2009, 19h48
  4. Réponses: 7
    Dernier message: 25/09/2008, 14h51
  5. [VBA-E][2k7] Enregistrer une feuille d'un classeur dans un autre document
    Par tazamorte dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/04/2007, 18h15

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