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 :

Interception click sur objets dans UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut Interception click sur objets dans UserForm
    Bonjour,

    je souhaiterais que le click sur les objets contenus dans une userform soit intercepté par une seule fonction et récupérer le nom de l'objet clické.


    En effet, en fonction du tag de la userform soit l’évènement de l'objet est exécuté ou pas. Et je ne me vois pas écrire pour chaque objet un truc du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not Me.Tag = "CONF" Then
       code...
       code...
       code...
    End if
    Comment puis-je faire cela ?

    par avance merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut
    J'ai trouvé ce bout de code qui intercepte le Click souris et sa position. Mais je souhaiterai obtenir le nom de l'objet sur lequel l'utilisateur a cliqué:

    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
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal uAction As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
    x As Long
    y As Long
    End Type
    Dim Pos As POINTAPI
     
    Private Sub Timer_Timer() 'interval 100
    Key = GetAsyncKeyState(i)
    if i = 1 then msgbox "leftclick"
    if i = 2 then msgbox "rightclick"
    if i = 3 then msgbox "centerclick"
    GetCursorPos Pos 'met les positions de la souris Position.Caption = Pos.x & " ; " & Pos.y 'affiche la pos
    End Sub

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu...
    bonjour

    ton problème a une solution le nom de cette solution s'appelle "classe"( colection de controls

    une classe te permet de gérer toute une palanquée de contrôles en une seule fonction

    en voila un petit exemple vite fait qui reprend un peu l'exemple qu'il y a dans les contributions que tu aurais trouvé si tu avais fait une toute petite recherche

    ouvre un nouveau classeur et fait l'essai

    dans ce nouveau classeur insère un userform,un module standard,un module classe que tu nommera "mesboutons"

    met des boutons et met un tag a ceux que tu souhaite traiter
    dans l'exemple ici on va mettre comme tag "cliquable"

    dans le module de l'userform et me ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Activate()
        Set maform = Me
        memorise_bouton Me
    End Sub
    dans le module standard met ceci:
    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
    Option Explicit
    Public bouton() As New mesboutons    'pour instancier la classe "Mesboutons"
    Dim ctrl As Object
    Sub memorise_bouton(maform)
     
        Dim e As Long
        For Each ctrl In maform.Controls
            On Error Resume Next
            If TypeName(ctrl) = "CommandButton" Then
                e = e + 1    'on incrémente la variable e
                  'on mémorise la collection des boutons
                ReDim Preserve bouton(1 To e)
                Set bouton(e).GroupeBouton = ctrl
            End If
        Next
     
    End Sub
    et pour finir dans le module classe"mesboutons"mes ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public WithEvents GroupeBouton As Msforms.CommandButton
    ' on a tagué les bouton  avant bien sur
    Private Sub GroupeBouton_Click()
    If GroupeBouton.Tag = "cliquable" Then
    'si le tag  correspond a ce que tu veux faire ceci::::
    MsgBox "ce bouton est cliquable"
    Else
    'si le tag ne correspond pas a ce que tu veux faire cela::::
     
    MsgBox "ce bouton n'est pas cliquable"
    End If
    End Sub
    voili voilou tu a une seule fonction pour gérer tes boutons

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut
    Bonjour Patrick,

    Je te remercie pour ta réponse. Cela m'a permis de découvrir WithEvents.
    Et cela fonctionne nickel !!!

    Penses-tu qu'il y a moyen d'intercepter tous le click sur tous les objets de la userform ? Le problème est que je doit aussi faire la différence entre click sur un listview et click sur son entête de colonne.

    Enfin le code contenu dans commandbutton_1click s’exécute. Y a-t-il possibilité de "canceler" son exécution si le tag correspond à une condition ?

    Encore merci.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    rebonjour

    la réponse est oui pour tout les controls

    maintenant pour la listeview j'avais utiliser la position X etY de la souris dessus pour gérer les en tête ou voir même les colonnes

    cela dit ça peut être parfaitement intégré a une classe de la même manière

    et ce qu'il faut retenir c'est la manière dont VBA interprète groupebouton
    c'est le principe de la collection

    cela dit dans le modèle que je t'ai vite fait comme ça tu peut intégrer tout les controls
    et dans la classe faire un (select case) sur le type de controls
    se sera peut être moins compliqué pour toi


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut
    Merci pour toutes ces infos.

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

Discussions similaires

  1. [WD10] Intercepter clic sur loupe dans table mémoire
    Par Louis Griffont dans le forum WinDev
    Réponses: 7
    Dernier message: 09/06/2010, 17h23
  2. [AC-2003] simuler click sur bouton dans "on exit" d'un controle
    Par tchayapluk dans le forum IHM
    Réponses: 0
    Dernier message: 16/11/2009, 06h18
  3. [POO] Simuler envoi de click sur élément dans une page HTML
    Par opsi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/09/2008, 13h24
  4. [ASPX C#] pb click sur boutton dans usercontrol
    Par Netah dans le forum ASP.NET
    Réponses: 7
    Dernier message: 03/04/2008, 09h08
  5. [VBA-E] Question sur image dans userform ?
    Par damsmut dans le forum Excel
    Réponses: 3
    Dernier message: 04/04/2007, 05h32

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