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 :

lancer une macro en construisant son nom


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut lancer une macro en construisant son nom
    Bonjour,

    Je développe une interface de menu pour une petite appli excel. Je vous souhaite que celle-ci puisse s'utiliser aussi bien au clavier qu'à la souris. Ainsi par exemple atteindre une feuille des deux manières différentes

    J'ai fait ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub opt1_Click()
        Sheets("Reguls_de_stock").Select
        Me.Hide
    End Sub
     
    Private Sub TB_ChoixOption_KeyPress(KeyAscii As Integer)
        If KeyAscii = vbKeyReturn Then
     
        opt & TB_ChoixOption.Value & _Click 'Ici je veux qu'il lance l'évenement "opt1_Click" 
     
        End If
    End Sub
    Comment puis-je dans la 2ème macro lancer la première en utilisant la valeur de TB_ChoixOption ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    si les 2 macro sont dans le même module il devrait suffire d'ajouter Run :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Run opt & TB_ChoixOption.Value & _Click

  3. #3
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    Bonjour,

    Non cela ne fonctionne pas la ligne reste en rouge!

    De plus je n'avais pas tester le code mais cle me donne l'erreur suivante au lancement :

    "La déclaration de la procédure ne correspond pas à l'évenement ou à la procédure de même nom!"


    !!!!

  4. #4
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour à tous

    j'ai deja cherché, mais je n'ai pas trouvé le moyen de lancer un macro à partir d'un variable

    alors j'ai triché, j'ai créé le call et je l'ai inserré dans le code

    tu crees un module que tu nommes Lance_Opt par exemple
    dedans tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Go_Opt()
     
    end sub
    maintenant la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub TB_ChoixOption_KeyPress(KeyAscii As Integer)
        dim ordre as string
        If KeyAscii = vbKeyReturn Then
              ordre =  "Call Opt" & TB_ChoixOption.Value
              With ThisWorkbook.VBProject.VBComponents("Lance_Opt").CodeModule
                      For ligne = 1 To .CountOfLines
                           If .Lines(ligne, 1) = "Go_Opt()" Then .InsertLines ligne + 1, ordre: Exit For
                      Next ligne
                      Call Go_Opt
                      .DeleteLines ligne + 1, 1
               End With
     
        End If
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjours,

    On est toujours surpris quand cela fonctionne chez l'un et pas chez l'autre.
    Je n'ai aucun problème pour lancer la macro de ce type.

    Avez-vous vérifié en mode débogage le contenu des variables ?

    Que contient la variable "opt" ?

  6. #6
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    c'est peut etre la le probleme jacques_jean

    opt n'est pas à mon avis une variable et doit etre traité avec "opt"

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour Wilfried42,

    En effet c'est déjà une possibilité mais je viens seulement de voir que le code contient une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TB_ChoixOption_KeyPress(KeyAscii As Integer)
        If KeyAscii = vbKeyReturn Then
     
        opt & TB_ChoixOption.Value & _Click 'Ici je veux qu'il lance l'évenement "opt1_Click" 
     
        End If
    End Sub
    ici il ne faut pas oublier les "" et vous pouvez ajouter Run devant la ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    opt & TB_ChoixOption.Value & "_Click" 'Ici je veux qu'il lance l'évenement "opt1_Click"

  8. #8
    Membre éclairé
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Par défaut
    bonjour,
    j'ai testé le run est il fonctionne très bien si le code est contenu dans un module. Par contre il ne focntionne pas quand il est mis dans un sheet ou un thisworkbook.

    Par la suite j'ai testé en mettant le tout dans une userforme et sa ne fonctionne pas.
    Peut etre faut-il que tu mettes ta fonction appelée dans un module.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour EvaristeGalloisBis,

    Bien vu, c'est évident. Et la procédure
    opt & TB_ChoixOption.Value & "_Click"
    ne peut se trouver que sur un Userform.

    Comme quoi, on peut être obnubilé par une erreur et ne pas
    voir l'autre. Il faut parfois un oeil neuf, en tout cas plus
    neuf que le mien (et même que les miens).
    Dernière modification par Invité ; 12/09/2008 à 16h11.

  10. #10
    Membre éclairé
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Par défaut
    Merci... Pour une fois que j'arrive a aider quelqu'un sur le forum...

  11. #11
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    question / reponse

    ceci ne serait il pas une interruption : _click
    je crois avoir vu mais je n'en suis meme pas sur, provoque par vba une interruption....

    par contre, mettre à jour un objet sur lequel est associer une interruption, devrait provoquer cette meme interruption

  12. #12
    Membre éclairé
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Par défaut
    juste une remarque :
    Est ce bien _click et non "_click" ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    oui il faut les guillemets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    opt & TB_ChoixOption.Value & "_Click"
    de plus si "opt" n'est pas une variable, il faut également des guillemets, comme déjà signalé par Wilfried42.

    Quant a provoquer une interruption, je le répète, chez moi cela a fonctionné (mais dans un module) et le mot "_click" n'a plus de signification stricte en lui-même, ce n'est plus qu'une partie d'un texte qui sera par exemple :

    "opt1_click"

  14. #14
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    Ok, Excusez moi pour le retard ! Merci pour vos réponses le code d'appel de la macro me semble cohérent!

    Seulement je n'arrive pas à le tester car au moment de lancer mon USerForm je bloque toujours sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub TB_ChoixOption_KeyPress(KeyAscii As Integer)
    Avec le message suivant :

    "La déclaration de la procédure ne correspond pas à la description de l'évenement ou à la procédure de même nom!"

  15. #15
    Membre éclairé
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Par défaut
    il n'y a pas un byval ou byref qui traine dans la procédure de l'évenement?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TB_ChoixOption_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
    End Sub

  16. #16
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut
    OK! il y avait un ByVal

    Maintenant mon UF s'ouvre seulement cela ne reconnait pas la pression de la touche Entrée (aucun effet en mode débogage)

  17. #17
    Membre éclairé
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Par défaut
    il me semble (pour avoir déja eu un esquisse de ce genre de probeleme) que le "compileur" interpretre la ligne de code comme je lance la macro "truc_KeyPress" et non comme tu le penses : je lance l'evenement "KeyPress" liée a l'objet truc.

    Mais a voir par des experts du VBA-E.

  18. #18
    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 tlm,

    Utilise l'événement KeyDown
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        '...ce que tu veux faire
    End If
    End Sub
    Comme cela a été dit plusieurs fois (parfois entre les lignes), ce que tu veux faire ne fonctionnera pas, tu ne peux pas exécuter une procédure événementielle au départ d'une autre procédure.

    Tu dois passer par une procédure dans un module standard
    En gros, pour un userform avec 3 OptionButton et 1 TextBox cela pourrait ressembler à un truc du genre
    • dans le module du userform
      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
      Private Sub Opt1_Click()
      Num = 1
      TEST
      End Sub
      Private Sub Opt2_Click()
      Num = 2
      TEST
      End Sub
      Private Sub Opt3_Click()
      Num = 3
      TEST
      End Sub
       
      Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      If KeyCode = vbKeyReturn Then
          Num = TextBox1
          TEST
      End If
      End Sub
    • dans un module standard
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      Public Num As Byte
       
      Sub TEST()
      Sheets(Num).Select
      End Sub

  19. #19
    Membre confirmé Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Par défaut


    Nickel !!
    Ca fonctionne à merveille!

    Il ne me reste plus qu'à trouver le moyen de construire mon user form et le module standard de manière dynamique afin de pouvoir faire évoluer mes options facilement.

    MERCI Développez.net !!!

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

Discussions similaires

  1. [AC-2000] Faire référence à une variable en construisant son nom
    Par ClaudeLELOUP dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/10/2010, 21h29
  2. [VBA] Lancer une form à partir de son nom
    Par truman dans le forum Général VBA
    Réponses: 28
    Dernier message: 18/05/2006, 14h41
  3. [VBA] Executer une fonction en passant son nom en argument
    Par David Guyon dans le forum Access
    Réponses: 4
    Dernier message: 05/10/2005, 19h56
  4. lancer une macro Access
    Par xmarabout dans le forum ASP
    Réponses: 1
    Dernier message: 26/09/2005, 13h03
  5. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15

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