Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Module par macro

3 réponses
Avatar
Eddan
Salut à tous,

Lors que je parcoure les enregistrements dans un tableau j'aime bien donner
au pointeur de la souris la forme d'une main.

Pour cela j'ai dans un module :

Public Const HandCursor = 32649&
Public Declare Function SetCursor Lib "user32" _
(ByVal hCursor As Long) As Long
Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" _
(ByVal hInstance As Long, ByVal lpCursorName As Long) As Long

et lors du déplacement de la souris sur les champs j'utilise pour chaque
champ :

Private Sub MonChamp_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim lHandle As Long
lHandle = LoadCursor(0, HandCursor)
If (lHandle > 0) Then SetCursor lHandle

Quant il y a que deux ou trois champs ça va encore, mais quant il y en une
dizaine ça devient lassant de répéter l'opération autant de fois.

Donc, je souhaiterais pouvoir le faire en une seule fois en sélectionnant
tous les champs pour leur attribuer une macro qui le fasse.

Macro : ExécuterCode

Quel fonction lui indiquer ?

Voici ce qui apparaît dans le générateur d'éxpréssion quant je lui indique
le module :

LoadCursor («hInstance»; «lpCursorName»)

Merci de votre aide et désolé pour tout ce "charabia"

--

Eddan

3 réponses

Avatar
Thom
Bonjour,

Avant tout je te remercie pour ton petit bout de code, car c'est exactement
celui qui me manquait!

Si j'ai bien compris, tu cherche à pouvoir créer du code dynamiquement. Je
n'ai jamais mis en ouvre ce genre de chose, mais je sais que c'est possible.
Je t'invite à chercher autour de l'objet "Application.VBE", ou tu trouveras
une batterie de méthodes et de propriétés permettant cela.

L'exemple suivant permet d'écrire en début de module actif :
Application.VBE.ActiveCodePane.CodeModule.InsertLines 1, "Msgbox
""coucou"""

Il peut être envisageable de parcourir ton application formulaire par
formulaire les zones de texte qu'ils contiennent. Suivant une règle de
nommage des zones de texte que tu auras choisi par avance, si ton composant
doit contenir l'événement que tu veux écrire, tu ajoute le code avec l'objet
"Application.VBE".

Personnellement, je trouve que c'est beaucoup de travail et de temps de
recherche pour quelque chose qui n'est pas si contraignant que ça, sauf si
tu as vraiment beaucoup de champs.

Bonne journée,

Thomas


"Eddan" a écrit dans le message de news:

Salut à tous,

Lors que je parcoure les enregistrements dans un tableau j'aime bien
donner
au pointeur de la souris la forme d'une main.

Pour cela j'ai dans un module :

Public Const HandCursor = 32649&
Public Declare Function SetCursor Lib "user32" _
(ByVal hCursor As Long) As Long
Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" _
(ByVal hInstance As Long, ByVal lpCursorName As Long) As Long

et lors du déplacement de la souris sur les champs j'utilise pour chaque
champ :

Private Sub MonChamp_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim lHandle As Long
lHandle = LoadCursor(0, HandCursor)
If (lHandle > 0) Then SetCursor lHandle

Quant il y a que deux ou trois champs ça va encore, mais quant il y en une
dizaine ça devient lassant de répéter l'opération autant de fois.

Donc, je souhaiterais pouvoir le faire en une seule fois en sélectionnant
tous les champs pour leur attribuer une macro qui le fasse.

Macro : ExécuterCode

Quel fonction lui indiquer ?

Voici ce qui apparaît dans le générateur d'éxpréssion quant je lui indique
le module :

LoadCursor («hInstance»; «lpCursorName»)

Merci de votre aide et désolé pour tout ce "charabia"

--

Eddan


Avatar
3stone
Salut,

"Eddan"
| Lors que je parcoure les enregistrements dans un tableau j'aime bien donner
| au pointeur de la souris la forme d'une main.
|
| Pour cela j'ai dans un module :
|
| Public Const HandCursor = 32649&
| Public Declare Function SetCursor Lib "user32" _
| (ByVal hCursor As Long) As Long
| Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" _
| (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
|
| et lors du déplacement de la souris sur les champs j'utilise pour chaque
| champ :
|
| Private Sub MonChamp_MouseMove(Button As Integer, Shift As Integer, X As
| Single, Y As Single)
| Dim lHandle As Long
| lHandle = LoadCursor(0, HandCursor)
| If (lHandle > 0) Then SetCursor lHandle
|
| Quant il y a que deux ou trois champs ça va encore, mais quant il y en une
| dizaine ça devient lassant de répéter l'opération autant de fois.
|
| Donc, je souhaiterais pouvoir le faire en une seule fois en sélectionnant
| tous les champs pour leur attribuer une macro qui le fasse.


Le plus simple, est de créer une fonction qui fait ce que tu souhaites...
ainsi, tu appelles directement une fonction et non une macro.

Ensuite, tu sélectionnes toutes les zones de texte, tu appelles les propriétés
et tu saisi sur le bon événement l'appel à ta fonction et tu sauves.

fnMaFonction(param1, param2, ...)

PS:
Il ne faut pas oublier que la fonction ne connait pas le formulaire appelant
(comme c'est le cas lorsque le code est "sous" le formulaire)
il faut donc écrire la fonction avec ses paramètres en conséquence.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Eddan
Merci beaucoup pour votre aide. Je vais voir tout ça.

A bientôt
--


Eddan