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 :

Bouger des contrôles sur un userform


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
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 61
    Par défaut Bouger des contrôles sur un userform
    Bonjour,

    Je voudrais créer des userforms pour concevoir des maquettes ( un peu comme l'on créé un userform). Par exemple je veux créer une maquette pour une ihm de saisie de clients et pour cela je vais avoir 3 champs et un bouton que je vais positionner à la main sur mon userform.
    J'ai donc besoin de pouvoir bouger un contrôle ( ou un cadre) sur un userform avec la souris lorsqu'il est actif. auriez vous une solution?
    merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Si ton bouton s'appelle CommandButton1, et que tu reste sur la touche <CNTRL> et que tu clique sur le bouton lorsque tu souhaite le déplacer,
    le code suivant doit faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Shift = 2 And Button = 1 Then
            CommandButton1.Left = CommandButton1.Left + X
            CommandButton1.Top = CommandButton1.Top + Y
        End If
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 61
    Par défaut
    un grand merci pour la réponse
    j'ai testé mais le bouton a du mal à bouger.
    Pour être plus précis sur la demande et après avoir avancé sur le sujet, je voudrais pouvoir déplacer n'importe quel type de contrôle en cliquant dessus. J'ai commencé à travailler sur le mousedown. J'ai trouvé un code qui me donne la position de la souris, mais en cliquant sur le contrôle( en l'ocurrence un champ texte), cela le fait disparaitre.

    En claire il faudrait que je puisse récupérer la position de la souris ou pouvoir savoir dans quelle direction elle va.

    ok j'ai trouvé grâce à toi, pour info j'ai repris ton code dans mouse move et j'initialise à 1 une variable dans mouse down et à 0 dans mouse up. Il ne reste plus qu'à tester cette variable pour déclencer le mouvement du champ.


    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
     
    'dans un module
    Option Explicit
    Public clicksouris As Integer
     
    Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    clicksouris = 1
     
    End Sub
     
    Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If clicksouris = 1 Then
    TextBox1.Left = TextBox1.Left + X
    TextBox1.Top = TextBox1.Top + Y
    End If
    End Sub
     
    Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    clicksouris = 0
    End Sub
    merci

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Re.

    Pour information, lors de l'évènement <control>_MouseMove(), la variable Button_ reçoit l'état des boutons de souris.
    Par exemple en testant Button = 1 dans la fonction <control>_MouseMove() tu peux savoir si le bouton gauche est actuellement enfoncé ou non.
    Et du coup l'utilisation de <control>_MouseDown() et <control>_MouseUp() est superflu
    (puisque l'infos de clique est déjà passé à la fonction <control>_MouseMove().

    Par ailleurs, je pensais qu'il fallait distinguer une utilisation normale des éléments (clic simple sur le contrôle)
    et le déplacement de contrôle.
    C'est pourquoi dans le code donné précédemment, j'ai ajouté le fait que la touche <Control> doit être enfoncé pour que le déplacement soit effectif.
    (= il faut maintenir la touche <Control> enfoncée et le clic gauche enfoncé pendant un déplacement).
    L'état touche <Control> enfoncé est testé dans <control>_MouseMove(), par le code If Shift = 2 ....

    Tous ces tests sont présent dans le code posté précédemment.
    Maintenant l'important c'est que tu ai pût trouver une solution qui te convienne.
    A+
    ______________

    Et pour la généralisation à tous les contrôles il suffit de créer une fonction, et de passer en paramètre le contrôle qui est sélectionné.
    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
    Option Explicit
     
    Private Sub ObjectToMove(Sender As Object, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        With Sender
            If Shift = 2 And Button = 1 Then
                .Left = .Left + X
                .Top = .Top + Y
            End If
        End With
    End Sub
     
    Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        Call ObjectToMove(CommandButton1, Button, Shift, X, Y)
    End Sub
     
    Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        Call ObjectToMove(Label1, Button, Shift, X, Y)
    End Sub
     
    Private Sub OptionButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        Call ObjectToMove(OptionButton1, Button, Shift, X, Y)
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 61
    Par défaut
    merci pour toutes ces infos, c'est vrai que je n'ai pas été très claire.

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

Discussions similaires

  1. [XL-2003] Remplacer les noms et les sources des contrôles d'un userform
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/02/2010, 17h55
  2. [XL-2003] Vérification de l'ensemble des contrôles d'un userform aléatoire
    Par Drektar dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/09/2009, 18h17
  3. [Processus] Garder le contrôle sur un userform
    Par Commodore dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/02/2008, 11h08
  4. Rendre visible des contrôles sur un Form ayant des zones transparentes
    Par ProgElecT dans le forum Vos contributions VB6
    Réponses: 8
    Dernier message: 20/09/2007, 19h25
  5. réaliser des contrôles sur le formulaire
    Par gentil dans le forum Struts 1
    Réponses: 30
    Dernier message: 28/03/2007, 17h04

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