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 :

Affectation de macros à des boutons créés dynamiquement


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Affectation de macros à des boutons créés dynamiquement
    Je réalise une macro Excel dont le but est de faire des tests sur des données exportées depuis un autre logiciel.
    La macro effectue un ensemble de tests.
    A chaque test effectué correspond une ligne de 3 cellules :
    Type de test, éléments concernés par le test et résultat de test.
    La macro renseigne les 3 cellules d'une ligne (correspondant à un test), et pour la cellule résultat elle écrit Ok ou NOk, et dans le cas NOk, un bouton est créé dynamiquement pour accéder à des explications détaillées sur la cause du NOk.

    Quand les tests sont terminés, il peut donc y avoir au total plusieurs lignes sur lesquels un bouton a été créé (ce qui correspond à un cas où un test a été déclaré NOk).
    Mon problème est le suivant : l'action à effectuer dépend du bouton qui a été appuyé. Dans mon code de création du bouton, j'affecte une procédure "SeeDetails", mais on ne peut pas passer de paramètre à cette procédure.


    Voici le code de création du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    'Afficher un bouton permettant d'accéder aux détails du NOk.
    If (ToDisplay = "NOk") Then
        plg = "L" & CStr(no_ligne_cur)	'Cellule dans laquelle le bouton est créé.
        T = .Range(plg).Top
        L = .Range(plg).Left
        W = .Range(plg).Width
        H = .Range(plg).Height
        Worksheets(FiHM).Buttons.Add(L + W - 50, T, 50, H).Select
        Selection.OnAction = "SeeDetails"	'Affectation de la procédure.
        Selection.Name = "BOUTON"
        Selection.Characters.Text = "Détails..."
        ActiveSheet.Shapes("BOUTON").Select
    End If
    Comment peut-on faire pour récupérer la ligne, ou le nom du bouton, ou tout autre indication qui permettrai de connaitre dans la procédure "SeeDetails" quel bouton a été appuyé ?

    Merci pour votre aide.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Pour passer en parametre le numero de la ligne sur laquelle le bouton est ajouté:
    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
     
    'Création du bouton
    Dim t, l, w, h, PLG As Range
    Set PLG = Range("L" & CStr(no_ligne_cur))
    t = PLG.Top
    l = PLG.Left
    w = PLG.Width
    h = PLG.Height
     
    With Worksheets(FiHM).Buttons.Add(l + w - 50, t, 50, h)
        .OnAction = "'SeeDetails " & PLG.Row & "'"
        .Name = "BOUTON"
        .Characters.Text = "Détails..."
    End With
     
    'La macro appelée par le bouton
    Sub SeeDetails(NumLigne As Long)
        MsgBox NumLigne
    End Sub
    Une autre possibilité sans passer de parametre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub SeeDetails()
        MsgBox Application.Caller 'Renvoie le nom du bouton cliqué
    End Sub


    Cordialement,

    tirex28/

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    La 2ième solution marche bien (avec Application.Caller).
    Par contre, la 1ère ne marche pas : lors du clic sur le bouton rien ne se passe (la procédure n'est pas appelée). Mais c'est pas grave, il y a une solution qui marche.



    Merci !

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    >Par contre, la 1ère ne marche pas

    Et pourtant elle tourne.. (Galilée)

    Cordialement,

    Tirex28/

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/04/2014, 12h42
  2. [XL-2007] Affectation de macro existante à bouton dynamique
    Par richard_sraing dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/09/2012, 13h05
  3. Réponses: 31
    Dernier message: 08/05/2011, 21h24
  4. Réponses: 9
    Dernier message: 28/10/2005, 13h48
  5. Erreur EACCESSVIOLATION avec des compsts créés dynamiquement
    Par tsikpemoise dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/02/2004, 19h05

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