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 :

Afficher dans une cellule le code VBA d'un bouton


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Par défaut Afficher dans une cellule le code VBA d'un bouton
    Bonjour

    A des fins de présentation, je cherche à afficher dans une cellule le codeVBA sous-jacent d'un bouton lorsqu'on clique sur le bouton.

    Ex.:
    J'ai sur ma feuille Excel un bouton "Hello".
    Le code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub helloBtn_Click()
    MsgBox ("Hello")
    End Sub
    Je voudrais que si l'utilisateur clique sur le bouton Hello, alors
    MsgBox ("Hello")
    s'affiche dans une cellule.

    Donc comment récupérer le code VBA d'un evt ?

    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Essayez le code suivant qui inscrit "MsgBox ("Hello")" dans la cellule A1 de la feuille active

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub helloBtn_Click()
    MsgBox ("Hello")
    ActiveSheet.[a1] = "MsgBox (''Hello'')"
    End Sub
    Cordialement.

    PMO
    Patrick Morange

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Par défaut
    Bonjour

    Merci pour votre réponse.
    J'aurai aimé récupérer le code de facon + automatique (sans avoir à recopier tout le code avec des value=....)
    Je me disais qu'une solution serait de le fichier Excel pour le parser et récupérer les lignes de code de chacune des fonctions ? Mais ca semble pas faisable non plus car les fichiers excel sont dans un format proprio et donc pas moyen de récuperer le code vba...

    Tant pis. Je vais suivre votre idée et je ferai des copier/coller de mon code.
    Merci de votre aide

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    A mon avis il est possible de créer une procédure qui va chercher le code d'une procédure évènementielle.
    Le premier paramètre est le nom de la feuille, ou son codename pour aller chercher dans le projet VBA le module associé à la feuille en question.
    Une fois que tu as le module (objet CodeModule) tu peux trouver la première ligne d'une procédure dont tu connais le nom, le nombre de lignes de la procédure et lire tout cela.

    L'idée serait donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function fctLitCode(Byval sNomFeuille as string, ByVal sProcName as string) as string
    C'est juste une piste.

    Cordialement,

    PGZ

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans un module public
    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
    Public NomBouton As String
     
    Public Sub AfficheCode()
    Dim Tbl
    Dim i As Byte
    Dim Deb As Integer
     
    With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
        Tbl = Split(.Lines(1, .CountOfLines), "End Sub")
        For i = LBound(Tbl) To UBound(Tbl)
            Deb = InStr(Tbl(i), "Private Sub " & NomBouton & "_Click()")
            If Deb > 0 Then
                Range("A1") = Mid(Tbl(i), Deb) & "End Sub"
                Exit For
            End If
        Next i
    End With
    End Sub
    Et à la fin de chaque code de tes boutons (exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton3_Click()
    MsgBox "ici hello"
     
    NomBouton = "CommandButton3"
    AfficheCode
    End Sub

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Par défaut
    Merci à vous tous !

    Ca sent bon ce que vous me dites
    J'essaie lundi dès mon retour au bureau...

    merci beaucoup

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Par défaut Afficher dans une cellule le code VBA d'un bouton
    J'ai donc essayé la méthode de mercatogqui me paraissait adequat.
    Mais le clic sur bouton provoque une erreur :
    Erreur d'execution 1004:
    L'accès par programme au projet VisualBasic n'est pas fiable.


    Résolu :
    http://excel.developpez.com/faq/?page=VBA#SourcesFiables

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

Discussions similaires

  1. Insérer une formule dans une cellule Excel via VBA
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2020, 14h02
  2. Réponses: 2
    Dernier message: 24/01/2008, 14h32
  3. Bug dans une ligne de code VBA
    Par orlacit dans le forum VBA Access
    Réponses: 5
    Dernier message: 08/11/2007, 16h25
  4. [VBA-E] faire la moyenne et afficher dans une cellule
    Par tibss dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 15/05/2006, 18h03
  5. [C#] contrôle affichable dans une cellule de datagrid
    Par grome dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/04/2006, 17h22

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