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 :

Générer du code automatiquement


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 82
    Par défaut Générer du code automatiquement
    Bonjour,

    Je souhaite ajouter du code automatiquement dans le module d'une feuille sans avoir besoin de l'écrire manuellement.

    j'ai testé la procédure suivante et j'ai l'erreur d'exécution 1004 :
    La méthode VBProject de l'objet workbook a échoué

    Il me manque peut-être une référence car j'ai trouvé ce code dans le forum et il devait donc certaineemnt fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Essai_AjoutCode()
     
    Dim x As Integer
    'With Workbooks("Classeur1").VBProject.VBComponents("Accueil").CodeModule
    With ActiveWorkbook.VBProject.VBComponents("M_Essais").CodeModule
     
    x = .CountOfLines
    .InsertLines x + 1, "Public Sub MaProcedure"
    .InsertLines x + 2, "... du code ici"
    .InsertLines x + 650, "... la suite du code"
    .InsertLines x + 651, "End Sub"
    End With
    End Sub
    L'un de vous a-t-il une explication ? Merci d'avance.

  2. #2
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Bonjour,

    il Faut activer la référence "Microsoft Visual basic For Application Extensibility 5.3"

    J'ai relevé quelques anomalies dans ton code. Mais bon, peut-être que je me trompe

    Essaie d'activer la réference et teste. Si ça ne marche pas, on construira ensemble le code.

    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 82
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    j'ai ajouté la référence et j'ai toujours le la même erreur d'exécution sur la 1ère ligne.

  4. #4
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Ok, je vois.

    Voilà, je t'explique --> le code que tu nous a fourni ci-dessus, insère du code dans un module déjà existant. dans ton cas le module est nommé "M_Essais".

    Question As-tu déjà dans ton classeur un module nommé "M_Essais" ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 82
    Par défaut
    Oui, le module existe déjà.

    J'ai même fait un Copier / Coller du nom pour éviter une erreur d'orthographe.

    J'ai aussi vérifié qu'une autre macro était exécutable dans le claseur où est la macro d'insertion de code (ici, le classeur de macros persos) et le classeur de destination.

    J'ai aussi activé la référence indiquée dans les 2 classeurs.

    Connais-tu l'instruction pour ajouter un module à partir du VBA pour que je teste aussi cela ? Merci.

  6. #6
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Voici un exemple de code qui crée un module standard et écrit dedans une macro rudimentaire.


    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
    Sub creationModule()
        'Nécessite d'activer la référence
        '"Visual basic For Application Extensibility 5.3"
        '
        Dim WorkB As Workbook
        Dim VBComp As VBComponent
        Dim Z As Integer
     
        'Définit le classeur cible
        Set WorkB = Workbooks("TonClasseur.xls")  'Il faut modifier le nom du classeur ici
     
        'Ajoute un module standard dans le classeur
        Set VBComp = WorkB.VBProject.VBComponents.Add(1)
        'Renomme le module
        VBComp.Name = "TonModule"   ' Même chose, il faut changer le nom ici
     
        'Ajoute une macro dans le module
        With VBComp.CodeModule
            Z = .CountOfLines
            .InsertLines x + 1, "Sub TaMacro()"   ' Change le nom ici si tu veux
            .InsertLines x + 2, "Range(""A10"").Value = ""Martin_77"""
            .InsertLines x + 3, "End Sub"
     
       ' Tu peux rajouter autant de lignes que tu veux..
        End With
     
    End Sub

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 82
    Par défaut
    Je viens de tester ton code et j’ai toujours la même erreur d’exécution :
    •« La méthode VBProject de l'objet workbook a échoué »

    J’ai bien vérifié que j’ai coché la référence suivante :
    •"Microsoft Visual basic For Application Extensibility 5.3"

    Je suis dans Excel 2007. Comme j’ai un autre PC avec la version2003, je vais tester dessus.
    La ligne de code en défaut est celle-ci :
    •Set VBComp = WorkB.VBProject.VBComponents.Add(1)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 82
    Par défaut
    J'ai une info nouvelle.

    Cela fonctionne parfaitement sous Excel 2003.

    La seule précaution est de lancer la macro à partir d'Excel et non du VBA car autrement, le code ne peut passer en mode Arrêt pour insérer les lignes.

    Je confirme. Cela fonctionne parfaitement sous Excel 2003.

    Quand je tape : "ActiveWorkbook.VBProject.Name" dans la fenêtre d'exécution sous 2003, j'ai en retour : "VBAProject"
    Sous 2007, j'ai : Erreur d’exécution 1004. Erreur définie par l’application ou par l’objet

    J'ai essayé de renommer le nom des projets mais sans succès

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 82
    Par défaut
    J'ai trouvé (pour Excel 2007) :
    - Options Excel
    - Centre de gestion de la confidentialité
    - Paramètres du Centre de gestion de la confidentialité
    - Paramètres des macros
    - Cocher : Accès approuvé au modèle d'objets du projet VBA

    Je me suis suis souvenu qu'il y a au moins 1 an, j'avais cherché longtemps avant qu'un membre du forum ne m'indique cela.

    Merci pour ton aide qui m'a bien mis sur la voie.

  10. #10
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Oui, j'avais totalement omis de te signaler ça. J'ai totalement zappé.
    En tout cas, tu t'es bien débrouillé

    N'oublies pas de mettre

    Si t'as d'autres questions n'hésites pas.

    Bonne journée

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

Discussions similaires

  1. [MySQL] Générer un identifiant (code) automatiquement
    Par hartecel dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/09/2008, 13h31
  2. [Debutant(e)]Générer du code JSP dynamiquement
    Par Gibier dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 16/01/2004, 11h54
  3. [EclipseUml] Peut-on générer le code ?
    Par Dof dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 05/06/2003, 15h21
  4. Générer du code HTML
    Par patpst dans le forum C++Builder
    Réponses: 4
    Dernier message: 27/11/2002, 10h27

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