Bonjour à tous,
Je débute en programmation VBA (plus expérimenté en analyse : SAS, R,...) mais j'ai plaisir à automatiser mes applications de cette manière.
Mon projet actuel est de créer une interface de paramétrage de requêtes complexes, en spécifiant les jeux de tables à prendre en compte.
Je souhaiterais permettre un drag & drop entre 2 listes d'un formulaire Access (une liste source qui ne change pas et une liste cible où l'on ajoute/supprime)
J'ai trouvé des pistes en VB6 qui font appel aux fonctions de type OLEdrag, OLE_XPOS_PIXELS et OLE_YPOS_PIXELS :
(silkyroad propose un exemple simple pour Excel ici)
Voici ce que j'ai implémenté pour l'instant :
Il y a des erreurs car ces un code glané sur le web et je ne comprend pas bien les fonctions qui entrent en jeu. Mais ce serait chouette d'avoir un tuto sur le sujet
Mais il me semble que les fonctions OLE ne sont pas tolérées par mon environnement : Access 2003 sur WinXP.
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
44
45
46
47
48
49
50
51
52
53 ' à l'ouverture : liste les tables liées de la base dans la liste0 Private Sub Form_Load() Dim oDb As DAO.Database Dim oTbl As DAO.TableDef Set oDb = CurrentDb 'Pour chaque table For Each oTbl In oDb.TableDefs 'Si la table est liée alors afficher son nom If oTbl.Attributes > 50 Then Liste0.AddItem oTbl.Name Next oTbl End Sub Private Sub Liste0_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, _ ByVal y As stdole.OLE_YPOS_PIXELS) 'Si le bouton de gauche est cliqué If Button = 1 Then boolDrag = True End Sub Private Sub Liste0_MouseMove(ByVal Button As Integer, _ ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, _ ByVal y As stdole.OLE_YPOS_PIXELS) If Button = 1 And boolDrag Then Liste0.OLEDrag Liste0.MousePointer = ccSize Set objDrag = Liste0.SelectedItem End If End Sub Private Sub Liste2_MouseMove(ByVal Button As Integer, _ ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, _ ByVal y As stdole.OLE_YPOS_PIXELS) If boolDrag And Not objDrag Is Nothing Then 'Ajoute un élément de Liste0 vers Liste2 Liste2.ListItems.Add , , objDrag.Text boolDrag = False Liste0.MousePointer = ccDefault 'Supprime l'élément dans la Liste0 'Liste0.ListItems.Remove (ListView1.SelectedItem.Index) 'Désélectionne l'élément dans la liste0 If Liste0.ListItems.Count > 0 Then Liste0.ListItems(1).Selected = False Set Liste0.SelectedItem = Nothing End If End If End Sub
Lorsque je charge le formulaire, j'obtiens un message d'erreur indiquant :
L'expression Sur chargement entrée comme paramètre de la propriété de type événement est à l'origine d'une erreur. La déclaration de la procédure ne correspond pas à la description de l'événement ou de la procédure du même nom.
Ensuite lorsque je déplace la souris, j'obtiens le message :
L'expression Sur souris déplacée entrée comme paramètre de la propriété de type événement est à l'origine d'une erreur. La déclaration de la procédure ne correspond pas à la description de l'événement ou de la procédure du même nom.
Bref, tout m'indique que mes codes avec "OLE" ne marchent pas.
J'ai le même genre d'erreur avec l'exemple de Silkyroad présenté plus haut.
Faut-il installer des références pour que les fonctions OLE soient reconnues ?
Lorsque je tape 'OLE_XPOS_PIXELS' sur Goo.. je n'obtiens que des lignes de codes VB6, est-ce qu'il est possible de les utiliser en VBA ?
Espérant avoir des retours ou des idées, je vous remercie de m'avoir lu.
Partager