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 :

Dupliquer une feuille avec son module et son userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Par défaut Dupliquer une feuille avec son module et son userform
    Bonjour,

    J'ai développé une macro qui me copie un onglet et le mets à jour en fonction de différents fichier.

    Maintenant que la MAJ de ce nouveau fichier excel est terminée, j'aimerais ajouter un code qui me permettrait de copier en même temps que l'onglet, le module et le userform associé.

    A savoir que pour créer la copie de l'onglet qui m’intéresse j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Sheets("Template").Select
        Sheets("Template").Copy
        AuditFile = ActiveWorkbook.Name
    Ensuite je réalise toutes mes manip pour MAJ le template et je sauvegarde puis ferme le fichier.

    J'ai trouvé ce code sur internet :

    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 Copie_CodeModule()
    Dim S As String, ModCode As Object
     
    'Copie le module1 du classeur où est la macro
    'Vers un module d'un autre classeur
    With Workbooks(Home).VBProject.VBComponents("Module1").codemodule
    S = .Lines(1, .CountOfLines)
    End With
     
    'Classeur de destination : doit être ouvert absolument
    With Workbooks(Cible)
    'Ajoute un module
    With .VBProject.VBComponents.Add(1)
    'ajoute le code
    .codemodule.AddFromString S
    End With
    End With
    End Sub
    Cependant j'ai le message d'erreur suivant : Object doesn't support this propoerty or method au niveau de la ligne 6.
    Home correspondant à mon fichier source ou se trouve le code
    Module1 le nom du module ou est mon code que je souhaitecopier
    codemodule j'ai mi le nom du sub que je souhaite mettre dans mon fichier cible

    Sinon en ce qui concerne la copie d'un userform je n'ai rien trouvé...

    Plusieurs questions donc
    1. qu'est ce qui fait buggué mon code ?
    2. Comment copier un userform ?
    3. Je dois faire la manip 1 pour chaque sub que je souhaite copier ?

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Est-ce que tu as coché la référence à Microsoft Visual Basic for Application Extensibility 5.3 ?

    Je ne sais pas combien tu as de modules/userforms, mais ne serait-ce pas plus simple de sauvegarder le classeur et de supprimer les onglets superflus ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Par défaut
    Bonjour,

    Ce n'était pas coché non.
    Je viens de le cocher mais cela n'a rien changé, l'erreur est toujours présente.

    J'ai pensé à ta solution mais c'est plus propre d'importer uniquement le code voulu.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Ceci fonctionne bien ici
    Seul hic, la ligne Option Explicit se répète 2 fois.

    Si tu as Option Explicit par défaut, il faudrait supprimer la ligne avant de coller le code
    Option Explicit

    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
    Sub Test()
        ActiveSheet.Copy
        Copie_CodeModule ThisWorkbook.Name, ActiveWorkbook.Name
    End Sub
     
    Sub Copie_CodeModule(Home As String, Cible As String)
        Dim S As String, ModCode As Object
     
        'Copie le module1 du classeur où est la macro
        'Vers un module d'un autre classeur
        With Workbooks(Home).VBProject.VBComponents("Module1").codemodule
            S = .Lines(1, .CountOfLines)
        End With
     
        'Classeur de destination : doit être ouvert absolument
        With Workbooks(Cible)
            'Ajoute un module
            With .VBProject.VBComponents.Add(1)
                'ajoute le code
                .codemodule.AddFromString S
            End With
        End With
    End Sub

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Par défaut
    Je comprends pas ce dont tu parles quand tu évoques la ligne option explicit.

    Sinon j'ai essayé ton code et j'ai une erreur à la ligne 3 : Wrong number of arguments or invalid property asignement

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Quand je crée un module ou quand j'ouvre le code d'une feuille, Option Explicit est déjà inscrit.
    Quand on copie le code complet d'un module dans un nouveau module, ça double la mention Option Explicit puisqu'il est déjà là.
    Et ça cause une erreur.

    Idéalement, il faudrait effacer le code du nouveau module en ajoutant une ligne ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        With Workbooks(Cible)
            'Ajoute un module
            With .VBProject.VBComponents.Add(1)
                .CodeModule.DeleteLines (1)  '<<< ça va supprimer le Option Explicit par défaut, s'il y a lieu
                'ajoute le code
                .CodeModule.AddFromString S
            End With
        End With
    Pour ce qui est du code, je le teste ici et ça fonctionne bien.
    N'oublie pas de mettre les 2 paramètres dans la Sub Copie_Module(Home et Cible)

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/01/2015, 12h17
  2. [XL-2003] Trié un tableau dans une feuille de calcul lors de son ouverture
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/04/2009, 15h27
  3. Dupliquer une feuille Excel avec Delphi 7
    Par loci dans le forum Delphi
    Réponses: 1
    Dernier message: 01/07/2006, 15h38
  4. [VBA] Copie d'une feuille (avec graphique)
    Par ed_dexia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/10/2005, 09h56
  5. [VB.NET] Manipuler une feuille via un module
    Par dinbougre dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/01/2005, 17h15

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