Glisser et déposer des éléments d’une liste à une autre dans un formulaire personnalisé ou Userform, Excel VBA

La méthode DataObject peut servir de transporteur de données lors de la programmation d’une opération de remorquage. Les méthodes du DataObject vous permettent de contrôler le processus de remorquage du début à la fin.

Figure : Glisser et déposer des éléments d’une liste à une autre

Tableau: Méthodes DataObject

Méthode Description
Clear Supprime les données transférables d’un objet
GetFormat Renvoie 1 si les données transférées sont au format chaîne
GetFromClipboard Copie le contenu du presse-papiers dans un objet
GetText Renvoie une chaîne enveloppée dans un objet
PutInClipboard Déplace les données d’un objet vers le presse-papiers
SetText Copie une chaîne dans un objet
StartDrag Initialise une opération de remorquage. Les valeurs de retour valides sont les constantes suivantes: fmDropEffectNone, fmDropEffectCopy, fmDropEffectMove et fmDropEffectCopyOrMove

Lors de l’encodage d’une opération de remorquage, il y a deux événements à gérer:
■ BeforeDragOver – généré pendant l’opération de remorquage;

■ BeforeDropOrPaste – généré juste avant l’insertion de l’objet.

Ainsi, pour montrer comment une opération de glissement peut être programmée, créez un formulaire, placez-y deux zone listes et tapez le code suivante :

Private sh As Integer

Private idx As Integer

Private Sub UserForm_Initialize()

   Dim i As Integer

   For i = 1 To 20

     ListBox1.AddItem "Marché " & i

   Next

End Sub

Private Sub ListBox1_MouseMove(ByVal Button As _

     Integer, ByVal Shift As Integer, ByVal X As _

     Single, ByVal Y As Single)

    Dim dobj As DataObject

    If Button = xlPrimaryButton Then

        Set dobj = New DataObject

        Dim Effect As Integer

        dobj.SetText ListBox1.Value

        Effect = dobj.StartDrag

        idx = ListBox1.ListIndex

        sh = Shift

    End If

End Sub

Private Sub ListBox2_BeforeDragOver(ByVal Cancel As _

    MSForms.ReturnBoolean, ByVal Data As _

    MSForms.DataObject, ByVal X As Single, _

    ByVal Y As Single, ByVal DragState As Long, _

    ByVal Effect As MSForms.ReturnEffect, _

    ByVal Shift As Integer)

    Cancel = True

    Effect = fmDropEffectCopyOrMove

End Sub

Private Sub ListBox2_BeforeDropOrPaste(ByVal _

    Cancel As MSForms.ReturnBoolean, _

    ByVal Action As Long, ByVal Data As _

    MSForms.DataObject, ByVal X As Single, _

    ByVal Y As Single, ByVal Effect As _

    MSForms.ReturnEffect, ByVal Shift As Integer)

    Cancel = True

    Effect = fmDropEffectCopyOrMove

    ListBox2.AddItem Data.GetText

    If sh = 2 Then

       ListBox1.RemoveItem idx

    End If

End Sub

 

Commentaires

■ L’événement MouseMove  produit lorsque l’utilisateur déplace la souris. Sa syntaxe est Private Sub object_MouseMove( ByVal Button As fmButton,
ByVal Shift As fmShiftStateByVal As SingleByVal As Single)

La syntaxe de l’événement MouseMove contient les parties suivantes :

Tableau: La syntaxe de l’événement MouseMove

Élément Description
Object Obligatoire. Un objet valide.
Index Obligatoire. Index de la page ou de l’onglet dans un contrôle MultiPage ou TabStrip associé à cet événement.
Button Obligatoire. Valeur d’entier qui identifie l’état des boutons de souris.
Shift Obligatoire. Spécifie l’état des touches Maj, Ctrl et Alt.
X, Y Obligatoire. Position horizontale ou verticale, mesurée en points, par rapport au bord gauche ou supérieur du contrôle.

■ L’instruction XlMouseButton indique le bouton de souris qui a été actionné.

Tableau 15.14: Les constantes de l ’instruction XlMouseButton

Nom Valeur Description
XlNoButton 0 Aucun bouton.
XlPrimaryButton 1 Le bouton principal (normalement, il s’agit du bouton de gauche).
xlSecondaryButton 2 Le bouton secondaire (normalement, il s’agit du bouton de droite).

■ L’événement BeforeDragOver se produit lorsqu’une opération glisser-déplacer est en cours. Sa syntaxe est :

Private Sub object _BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean,  ByVal Data As DataObjectByVal As SingleByVal As SingleByVal DragState As fmDragStateByVal Effect As MSForms.ReturnEffectByVal Shift As fmShiftState)

La syntaxe de l’événement BeforeDragOver contient les parties suivantes :

Tableau : La syntaxe de l’événement BeforeDragOver

Élément Description
Object Obligatoire. Un objet valide.
Index Obligatoire. Index de la page dans un contrôle MultiPage que l’opération de glisser-déplacer affectera.
Cancel Obligatoire. État de l’événement. False indique que le contrôle doit gérer l’événement (valeur par défaut). True indique que l’application gère l’événement.
Ctrl Obligatoire. Contrôle déplacé par glissement.
Données Obligatoire. Données déplacées pendant une opération glisser-déplacer. Les données sont regroupées dans un objet DataObject.
X, Y Obligatoire. Coordonnées horizontales et verticales de la position du contrôle. Les deux coordonnées sont mesurées en points. X est mesuré à partir du bord gauche du contrôle, Y à partir du bord supérieur.
DragState Obligatoire. État de transition des données faisant l’objet d’une opération de glissement.
Effect Obligatoire. Opérations prises en charge par la source du déplacement.
Shift Obligatoire. Spécifie l’état de Maj, Ctrl et Alt.

■ La méthode RemoveItem supprime un ou plusieurs éléments d’une zone de liste ou d’une zone de liste modifiable. Sa syntaxe est expression.RemoveItem (Indexnombre) ou expression représente un objet Contrôle.

Tableau:

Nom Description
Index Numéro du premier élément à supprimer. Les valeurs autorisées sont comprises entre 1 et le nombre d’éléments de la liste (renvoyé par la propriété ListCount).
Count Nombre d’éléments à supprimer en commençant par l’élément Index. Si vous ne spécifiez pas cet argument, un seul élément est supprimé. Si le_nombre_ d’ index + dépasse le nombre d’éléments de la liste, tous les éléments de l’ index jusqu’à la fin de la liste sont supprimés sans erreur.
S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x