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 :

VBA: comptabiliser le nombre de clic d'un bouton commande [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Par défaut VBA: comptabiliser le nombre de clic d'un bouton commande
    Bonjour,

    Je cherche à faire une macro dans Excel qui me permet:
    - de comptabiliser le nombre de clic effectué sur une bouton commande
    - d'afficher ensuite le résultat dans une cellule (d'une autre feuille)

    Je ne trouve rien sur ce sujet, je ne sais même pas si cela est possible

    Merci pour votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    y'a pas mal de solutions possibles en fait.

    il faut déjà préciser la durée de conservation de nombre de clics, la position du bouton (feuille ou formulaire) et si c'est sur une feuille, si le bouton est un bouton de formulaire ou un contrôle ActiveX

    Un exemple pour un CommandButton sur Userform avec incrémentation d'une valeur de cellule (donc sans stockage interne de la quantité dans VBA)

    - prévoir une cellule dédiée, et lui donner un nom, par exemple "Compteur_Clic", et lui donner une portée Classeur. Ca facilitera l'écriture et la simplicité du code

    - dans un module standard, écrire la procédure qui va gérer notre cas unique : ajouter 1 à la valeur de la cellule, et prévoir le cas où ce n'est plus un nombre qui est écrit (en proposant de réinitialiser le compteur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub MajCompteur()
        With Range("COMPTEUR_CLICK")
            If Not IsNumeric(.Value) Then
                If MsgBox("Attention, le compteur de click présente une anomalie, souhaitez-vous le réinitialiser ?", _
                          vbYesNo, _
                          "Alerte Compteur non numérique") = vbNo Then Exit Sub
                .Value = 0
            End If
     
            .Value = .Value + 1
        End With
    End Sub

    - dans la procédure Click du CommandButton, qu'on appelle "LeBouton", appeler la fonction de mise à jour du compteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub LeBouton_Click()
    MajCompteur
    End Sub


    L'avantage de décentraliser la mise à jour, c'est de pouvoir l'appeler en plusieurs endroits ... mais surtout de complexifier la structure et, donc, le comportement de ton compteur.


    On peut gérer plusieurs compteurs sur le classeur : ajouter un argument Range représentant la cellule du compteur

    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
    Sub MajCompteur(Position As Range)
        With Position
            If Not IsNumeric(.Value) Then
                If MsgBox("Attention, le compteur de click " & Position.Name & " présente une anomalie, souhaitez-vous le réinitialiser ?", _
                          vbYesNo, _
                          "Alerte Compteur non numérique") = vbNo Then Exit Sub
                .Value = 0
            End If
     
            .Value = .Value + 1
        End With
    End Sub
     
     
    Sub ExempleUtilisation()
        MajCompteur Range("COMPTEUR_CLICK")
    End Sub

    On peut gérer plusieurs comportements, et même définir des valeurs minimales (et pourquoi pas une valeur maximales et une valeur de référence au lieu du 0...et tout ce que tu veux !)
    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
    Sub MajCompteur(Position As Range, Comportement As String, ValeurMin As Long)
        Dim i As Long
        With Position
            If Not IsNumeric(.Value) Then
                If MsgBox("Attention, le compteur de click " & Position.Name & " présente une anomalie, souhaitez-vous le réinitialiser ?", _
                          vbYesNo, _
                          "Alerte Compteur non numérique") = vbNo Then Exit Sub
                .Value = 0
            End If
     
            Select Case Comportement
                Case "Ajout"
                    i = 1
                Case "Retrait"
                    i = -1
                Case "Reset"
                    i = -.Value
                Case Else
                    MsgBox "Comportement non prévu : " & Comportement
                    Exit Sub
            End Select
     
            .Value = Application.WorksheetFunction.Max(.Value + i, ValeurMin)
        End With
    End Sub
     
     
    Sub ExempleUtilisation()
       Call MajCompteur(Range("COMPTEUR_CLICK"), "Retrait", 0)
    End Sub

    Après, pour aller (encore) plus loin, ça peut devenir une fonction qui renvois l'état de l'opération pour laisser la procédure appelant gérer ses problèmes !

    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
    Function MajCompteur(Position As Range, Comportement As String, ValeurMin As Long) As Variant
        Dim i As Long
        Dim Erreur As Boolean
        With Position
            If Not IsNumeric(.Value) And Comportement <> "Reset" Then
                MajCompteur = "Erreur sur le compteur " & Position.Name
                Erreur = True
            End If
     
            Select Case Comportement
                Case "Ajout"
                    i = 1
                Case "Retrait"
                    If .Value = ValeurMin Then
                        MajCompteur = MajCompteur & vbCrLf & "Valeur minimale du compteur atteinte"
                        Erreur = True
                    Else
                        i = -1
                    End If
                Case "Reset"
                    i = -.Value
                Case Else
                    MajCompteur = MajCompteur & vbCrLf & "Comportement non prévu : " & Comportement
                    Erreur = True
            End Select
     
            If Erreur Then Exit Function
     
            .Value = Application.WorksheetFunction.Max(.Value + i, ValeurMin)
            MajCompteur = True
        End With
    End Function
     
     
    Sub ExempleUtilisation()
    Dim Retour As Variant
        Retour = MajCompteur(Range("COMPTEUR_CLICK"), "Retrait", 0)
        If VarType(Retour) <> vbBoolean Then
            MsgBox Retour
        Else
            Debug.Print "Mise à jour réussie"
        End If
    End Sub

    Amuses-toi bien

  3. #3
    Membre averti
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Par défaut super !
    Super merci ça fonctionne parfaitement

  4. #4
    Candidat au Club
    Homme Profil pro
    autre
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Par défaut comptabiliser le nombre de clic d'un bouton (controle de formulaire)
    Bonjour joe.levrai,

    Peux-tu, s'il te plait, m'aider sur mon cas en adaptant ton code.
    Voici ce que je voudrais faire :
    Au clic sur le bouton "envoi Mail" dans la feuille A, je voudrais afficher "Oui" dans la feuille "Check" en cellule B2 et ainsi de suite pour les autres feuilles.

    Je joins mon fichier exemple.

    Merci d'avance pour ton aide.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. comment savoir le nombre de clics sur le bouton submit
    Par zaki_1982 dans le forum Windows
    Réponses: 1
    Dernier message: 01/03/2012, 10h09
  2. nombre de clics sur un bouton (google analytics)
    Par romintor dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2011, 21h38
  3. Limiter le nombre de clic sur un bouton
    Par Sulthisil dans le forum wxWidgets
    Réponses: 2
    Dernier message: 27/05/2007, 23h33
  4. Compter le nombre de clic sur un lien externe
    Par TommyWeb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/04/2006, 12h15
  5. comptez le nombre de clics par user
    Par apprenti-fab dans le forum Langage
    Réponses: 3
    Dernier message: 03/03/2006, 19h36

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