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 :

VB Copier/Coller onglet dans nouveaux classeurs avec boucle [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut VB Copier/Coller onglet dans nouveaux classeurs avec boucle
    Bonjour à tous,

    Je suis un peu novice en matière de macro c'est pourquoi j'ai besoin de votre aide.

    Voila ce que je veux que ma macro fasse :
    Il y a, dans un premier onglet, un tableau qui récapitule pour le nom de chacun des onglets de mon classeur (59 onglets pour le moment mais il pourra y en avoir plus)
    Je veux que ma macro se réfère à se tableau pour copier chacun des onglets suivants (de façon indépendante) pour qu'ils deviennent chacun un fichier différent. En gros, je veux que mes 59 onglets deviennent 59 classeurs et qu'ils s'enregistrent grace à un chemin pré-définit dans mon tableau.
    J'ai utilisé la boucle Do While avec un compteur mais la macro ne me copie et enregistre que la premier onglet sur les 59 et je ne comprends pas pourquoi... :/

    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
    Sub Macro_ventil_onglet_ETPDAC2()
     
    Dim Var_Nom_Classeur As String
    Dim Var_Destination_Fichiers As String
    Dim Var_Période As String
    Dim Var_Onglet As String
    Dim Var_CB As Integer
     
    Var_CB = 15
    Var_Destination_Fichiers = Cells(7, 1).Value
    Var_Onglet = Cells(Var_CB, 1).Value
    Libellé_Fichier = Cells(Var_CB, 4).Value
    Var_Nom_Classeur = Cells(4, 1).Value
     
    Worksheets("Macro").Activate
     
     
    Do While Cells(Var_CB, 1).Value <> ""
    Sheets(Var_Onglet).Select
    Sheets(Var_Onglet).Copy
    ActiveWorkbook.SaveAs Filename:= _
    Libellé_Fichier, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=False
    Var_CB = Var_CB + 1
    Loop
     
     
    End Sub

    Merci par avance de votre aide.

  2. #2
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Enregistrement
    Bonjour,

    Plutôt que d'utiliser la méthode Do While, pourquoi ne pas balayer les cellules de chaque ligne de ton tableau par la méthode For...Next ?

    Je ne sais pas comment est structuré ton tableau.

    Tu peux adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub Essai()
    Dim cel As Range
    With ThisWorkbook
        For Each cel In .Sheets("Tableau").Range("A3:A4")
                nomfich = cel.Value
                .Sheets(nomfich).Copy
                monrépertoire = .Sheets("Tableau").Range("D3").Value
                ActiveWorkbook.SaveAs Filename:=monrépertoire & Application.PathSeparator & nomfich
        Next
    End With
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

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


  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 755
    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 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il est normal que cela ne fonctionnait pas, tu lis les informations de nom de feuille avant ta boucle donc tu avais beau incrémenter avec VAR_CB cela ne servait à rien.
    Je ne sais pas non plus à quoi sert ta variable Var_Nom_Classeur que tu n'utilises nulle part dans le code.
    Le code ci-dessous fonctionne.
    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
     
    Option Explicit
    Sub Macro_ventil_onglet_ETPDAC2()
      Dim Var_Nom_Classeur As String
      Dim Var_Destination_Fichiers As String
      Dim Var_Période As String
      Dim Var_Onglet As String
      Dim Var_CB As Integer
      Dim Libellé_Fichier As String
      Dim sht As Worksheet, wkb As Workbook
      Set wkb = ThisWorkbook
      Set sht = wkb.Worksheets("Macro")
      Var_CB = 15
      Var_Destination_Fichiers = Cells(7, 1): Var_Nom_Classeur = Cells(4, 1)
      While sht.Cells(Var_CB, 1) <> ""
        With sht
         Var_Onglet = .Cells(Var_CB, 1)
         Libellé_Fichier = .Cells(Var_CB, 4)
        End With
        Debug.Print Var_Onglet
        wkb.Sheets(Var_Onglet).Copy
        ActiveWorkbook.SaveAs Filename:=Var_Destination_Fichiers & Libellé_Fichier
        ActiveWorkbook.Close
        Var_CB = Var_CB + 1 
      Wend
    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. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Merciii !
    Corona tu es mon sauveur !!
    J'ai pas encore tout compris sur ta macro mais elle fonctionne !! Tu es génial ! Merciiiii !!

    Merci aussi à toi MarcelG pour ton aide !

    Bonne journée.

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

Discussions similaires

  1. [XL-2003] Copier/coller feuille d'un classeur avec userform
    Par sims92.66 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/07/2012, 17h48
  2. [XL-2003] Copier Coller onglets définis vers nouveaux classeurs enregistrés en auto
    Par fnroux dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 23/06/2012, 00h54
  3. [XL-2003] Copier des onglets vers nouveau classeur avec Variable
    Par xbb12 dans le forum Excel
    Réponses: 2
    Dernier message: 24/03/2010, 16h26
  4. copier onglets dans nouveau classeur
    Par hlander dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 13/02/2009, 10h29
  5. [E-02] Copier tout un onglet dans un classeur fermé
    Par landi440 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/10/2008, 11h20

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