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 :

Exécuter la même macro au lancement d'un ensemble de Bouton


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Exécuter la même macro au lancement d'un ensemble de Bouton
    Bonjour,

    Je crée sur une feuille une vingtaine de Commandbutons sur une même colonne (disons 1 par client, sachant que j'ai 1 client par ligne).

    J'aimerais exécuter une macro identique a l'appel de chacun de ces boutons, à la seule particularité que j'aurais besoin de récupérer dans cette macro les infos du bouton qui est appelé (par exemple nom, adresse .. histoire de savoir a quel ligne de la feuille on fait référence).

    Suis-je obligé de passer par la création d'un "CommandButton_click()" pour chacun de ces boutons après les avoir créer pour récupérer ces infos ? N'existe-il pas un évènement sur une feuille qui exécute une macro des que l'on click sur un bouton de la feuille par exemple ? Ou une tiers solution ?

    En vous remerciant pour votre aide.

  2. #2
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,

    Regardes du côté de "application.caller".

    Tu auras tout ce qu'il te faut dessus, je pense.

    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Bonjour au Forum,

    Bienvenue, Paiheu.

    A mon sens, une solution pourrait consister en l'instanciation d'une classe d'objets (ici les boutons).
    Ce processus permettrait de gérer un seul évènement Click.

    Je reviens avec une proposition illustrée

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Désolé de ne pas avoir pu répondre plus tôt. Néanmoins, j'ai trouvé ce que je cherchais avec "application.caller" qui est peut être plus adapté à mon niveau, bien qu'une création de classe soit surement une bonne solution également

    Merci à vous

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Paiheu , Bonjour le Forum,

    Avant toute chose, pourquoi ne pas gérer les enregistrements par formulaire?

    Celui-ci contiendrait une zone de liste Combobox dont les items seraient alimentés par la liste des clients

    Un bouton de validation irait ensuite pointer vers l'enregistrement (i.e. le client) correspondant de la table de données (tableau structuré).

    Le processus serai plus simple.

    Au demeurant, j'ai affirmé revenir avec un code basé sur la gestion d'un module de classe.
    Donc voici.

    Soit un projet VBE ordonnancé comme suit

    Nom : Btn_idem_action.JPG
Affichages : 75
Taille : 50,2 Ko

    Instanciation de la classe Class_Btn_Commande

    Dans le module de classe.

    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
    Option Explicit
     
    Public WithEvents btn As MSForms.CommandButton
     
    Private Sub btn_Click()
     
    Dim nom As String
    nom = Replace(btn.Name, Find:="Btn_", Replace:="")
    nom = Replace(nom, "_", " ")
     
    Call DisBonjour(nom_cli:=nom)
     
    End Sub
     
    Private Sub DisBonjour(nom_cli As String)
     
    MsgBox _
            Prompt:="Bonjour Mr le " & nom_cli, _
            Buttons:=vbInformation, _
            Title:="Accueil"
     
    Dim laligne As Byte
    laligne = Split(nom_cli, " ")(1)
    Sht_First.Range("A" & laligne).Select
     
    End Sub
    Dans un module standard (ici "Utilitaires")

    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
    Option Explicit
     
    Dim lesBoutons() As New Class_Btn_Commande
     
    Public Sub gest_boutons()
     
    Dim n As Byte
     
    Dim s As Shape
     
    n = 0
     
    For Each s In Sht_First.Shapes
            If s.Name Like "Btn_Cli*" Then
                    n = n + 1
                    ReDim Preserve lesBoutons(1 To n)
                    Set lesBoutons(n).btn = s.DrawingObject.Object
            End If
    Next s
     
    End Sub
    Dans l'évènement Open du classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Private Sub Workbook_Open()
     
    Call gest_boutons
     
    End Sub
    Fichier joint.

    Les boutons de commande se nomment Btn_Client_1, Btn_Client_2, .etc...
    Fichiers attachés Fichiers attachés

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


Discussions similaires

  1. Réponses: 8
    Dernier message: 14/11/2019, 13h18
  2. Réponses: 10
    Dernier message: 01/03/2010, 17h06
  3. Allongement d'uin temps d'exécution d'une macro
    Par avanrill dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2006, 19h29
  4. Réponses: 21
    Dernier message: 31/01/2006, 16h39
  5. Réponses: 4
    Dernier message: 14/06/2004, 09h29

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