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 :

Création de procédure par VBA [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut Création de procédure par VBA
    Bonjour,
    Je voudrais créer une procédure par macro et pouvoir la lancer dans la foulée.

    J'ai réussi à créer un module mais je suis empétré dans les propriétés de l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.VBProject.VBComponents("nom").

    Quelqu'un a-t-il déjà tenté l'expérience ?

    Merci

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 156
    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 : 13 156
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Voici un code qui
    1) Insère une nouvelle feuille de calcul.
    2) Ajoute un bouton de commande sur cette feuille.
    3) Ajuste la position, la taille et la légende de ce bouton.
    4) Insère une procédure événementielle pour le bouton de commande nommé CommandButton1_Click dans le module de code de la feuille.
    Cet exemple provient du livre VBA pour Excel 2003 de John Walkenbach
    Philippe
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub AddSheetAndButton()
        Dim NewSheet As Worksheet
        Dim NewButton As OLEObject
     
    '   S'assurer que l'accès au projet VB est autorisé
        On Error Resume Next
        Set x = ActiveWorkbook.VBProject
        If Err <> 0 Then
            MsgBox "Vos paramètres de sécurité ne permettent pas à cette macro de s'exécuter.", vbCritical
            On Error GoTo 0
            Exit Sub
        End If
     
     
    '   Ajouter la feuille
        Set NewSheet = Sheets.Add
     
    '   Ajouter un CommandButton
        Set NewButton = NewSheet.OLEObjects.Add _
          ("Forms.CommandButton.1")
        With NewButton
            .Left = 4
            .Top = 4
            .Width = 100
            .Height = 24
            .Object.Caption = "Retourner à Feuil1"
        End With
     
    '   Ajouter le code de gestionnaire d'événements
        Code = "Sub CommandButton1_Click()" & vbCrLf
        Code = Code & "    On Error Resume Next" & vbCrLf
        Code = Code & "    Sheets(""Feuil1"").Activate" & vbCrLf
        Code = Code & "    If Err <> 0 Then" & vbCrLf
        Code = Code & "      MsgBox ""Impossible d'activer Feuil1.""" & vbCrLf
        Code = Code & "    End If" & vbCrLf
        Code = Code & "End Sub"
     
        With ActiveWorkbook.VBProject. _
          VBComponents(NewSheet.Name).CodeModule
            NextLine = .CountOfLines + 1
            .InsertLines NextLine, Code
        End With
    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

  3. #3
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

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

    Il existe un tuto sur le sujet
    http://silkyroad.developpez.com/VBA/VisualBasicEditor/

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut Création de procédure par VBA
    Bonjour à tous,

    J'ai bien trouvé le tutoriel mais je rencontre encore un soucis.
    Dans mon fichier Excel nommé "UI_Inst_Eff1.xls" se trouve un module "ManipModul" dans lequel se trouve ma procédure "Test" créatrice de code.

    Mon souhait est le suivant : créer par programme une procédure que je lance immédiatement après cette création.
    La routine créée est sensée m'afficher un petit "Coucou"

    Le code est le suivant :

    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
    Public Sub test()
     
        Dim VBComp As VBComponent
        Dim code As String
     
        Set VBComp = ThisWorkbook.VBProject.VBComponents("ManipModul")
     
     
        code = "Public Sub Message" & vbCrLf
        code = code & " msgbox " & Chr(34) & "coucou" & Chr(34) & vbCrLf
        code = code & "End Sub"
     
        With VBComp.CodeModule
            NextLine = .CountOfLines + 1
            .InsertLines NextLine, code
        End With
     
        Application.Run "UI_Inst_Eff1.xls!ManipModul.Message"
     
    End Sub
    Tout fonctionne à merveille jusqu'à la dernière ligne.
    Le système me répond qu'il ne trouve pas la macro "Message"

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 156
    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 : 13 156
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Chez moi ce code fonctionne parfaitement.
    Philippe
    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

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut
    Rebonjour,

    Je dois alors avoir un problème de paramétrage de mon Access.
    J'ai joint une photo des références VBA.
    As-tu la même chose ?
    Images attachées Images attachées  

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut
    En fait la routine qui crée le programme d'importation ne peut pas le lancer.
    Pourquoi ? Je n'en sais rien. Mais j'ai contourné le problème en appelant ce programmé créé par une autre routine.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut Reprise de la discussion
    Bonjour à tous,

    J'avais clos cette discussion car j'étais parvenu à mes fins.
    Mes je la relance car j'ai voulu passer mon projet à deux de mes collègues qui voient le programme se planter.
    La routine incriminée est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub SupprimerMacroPrecise(Wb As Workbook, Mdl As String, NomMacro As String)
        Dim Debut As Integer, Lignes As Integer
        
        With Wb.VBProject.VBComponents(Mdl).CodeModule        Debut = .ProcStartLine(NomMacro, 0)
            Lignes = .ProcCountLines(NomMacro, 0)
            .DeleteLines Debut, Lignes
        End With
    End Sub
    Elle se plante sur la ligne en rouge et génère le code erreur 1004 : "L'accès par programme au projet Visual Basic n'est pas fiable".

    Pourtant les bibliothèques activées sur mon PC le sont aussi sur le PC de mes collègues (cf pièce jointe)

    Quelqu'un a-t-il une idée ?

    Merci de votre aide.
    Images attachées Images attachées  

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

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

    Tu as la réponse dans la
    http://excel.developpez.com/faq/?pag...SourcesFiables


  10. #10
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut Résolution
    OK Merci.

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

Discussions similaires

  1. [AC-2007] Création de relation par VBA
    Par AndréPe dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/07/2014, 08h24
  2. [XL-2010] Création d'onglet par VBA
    Par canaque dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 26/06/2014, 09h06
  3. [AC-2003] Créations des Relations par VBA
    Par jmde dans le forum VBA Access
    Réponses: 0
    Dernier message: 24/03/2011, 12h32
  4. [Table] Création de table par VBA-DAO
    Par Invité dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/05/2007, 10h07
  5. Création de label par VBA (excel)
    Par WagaSeb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2006, 14h46

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