Molette souris + showModal = False + Multi-UserForms

T

Ti

Guest
Alors voilà, suite à la relance concernant ma "vieille" démo de gestion de la molette souris dans un userform, j'ai réécrit celle-ci pour la rendre plus souple d'emploi et moins génératrice d'erreur.

D'une part, en la transformant en module de classe, je lui ai donné la propriété de gérer ses propres événements et d'en simplifier l'utilisation, d'autre part, en limitant l'action de la molette aux seuls contrôles déclarés, je limite aussi les risques de plantages (mais pas totalement tout de même, peut-être dans une version 3).
Il y a en fait une chose à prendre en compte : la molette est désactivée via l'événement MouseMove du UserForm lui-même, donc si vous utilisez un contrôle qui emplit totalement la surface du userform, vous risquez alors le plantage, ce cas est assez rare (on peut penser cependant aux démos de WebBrowsers intégrés dans un userform), mais pas impossible.

Enfin, il est désormais possible de l'utiliser sur des userforms non modaux et, plus encore, sur plusieurs userforms ouverts en même temps !

Attention toutefois, cela reste, à mon sens, du bricolage. Une application gérant la molette de la souris ne sera jamais complètement sécurisée... tant que je n'aurai pas inclu une gestion bétonnée des erreurs (comme dans mon ComTi ou mes timers).
 

Pièces jointes

  • MoletteSourisTi2.zip
    34.9 KB · Affichages: 88
  • MoletteSourisTi2.zip
    34.9 KB · Affichages: 89
  • MoletteSourisTi2.zip
    34.9 KB · Affichages: 89
E

Emmanuel

Guest
Bonjour TI et le forum

C'est GEANT
Avec ta première version qui pour ma part fonctionnait très bien, je l'avais incorporé dans une macro avec des combos synchronisés et ça fonctionnait très bien, mais je n'arrivais pas à le faire fonctionner avec des combos dans un multipage et là......
ça FONCTIONNE c'est GENIAL un grand merci à toi TI

bonne journée
A bientôt
Emmanuel
 
J

Jean-Phi

Guest
Ciao Ti, le forum !!

Complimenti !!! Du très joli travail !!

L'appli avec le userform form non modal marche parfaitement chez moi sous Excel 2000 ; pour ma part, aucun plantage à signaler !

Elle me sera très utile !
Encore merci et bonne journée !

@+
J-Phi
 
L

LaurentTBT

Guest
Bonjour à tous,

Super, génial, Ti
Depuis le temps que je cherchais! Va falloir décortiquer et comprendre tout ça, puis l'adapter. C'est pas encore gagné!

J'ai une crainte, je suis justement dans le cas d'un webBrowser qui prend presque toute la surface du userform. Et parfois, en cas de mouvement brusque de la souris, le mousemove sur l'Usf peut en effet ne pas être pris en compte.

Je vais essayer maintenant de trouver un peu de temps pour me mettre au boulot.

Encore merci.
 
S

salim

Guest
Bonjour Le Fil et le Forum


Ti juste pour te signaler que l'appli fonctionne bien mais plantage d'Excel au moment de fermer le fichier pas possible. Excel reste bloqué.

Je suis sur XP édition familiale Excel 2002.

@+ Salim
 
T

Ti

Guest
Merci pour vos tests, effectivement, en naviguant d'un userform à l'autre quand les 2 étaient ouverts, j'arrivais régulièrement à planter Excel.
Voici donc une version corrigée que je n'ai pas réussi à faire planter dans les mêmes conditions. J'attends de voir ce que va dire Salim, dont je ne vois pourtant pas la cause du plantage qu'il indique.

Laurent, cette version ne plantera plus si on quitte le userform sans avoir désactivé la molette du contrôle (on peut le vérifier avec le combo, qui occupe toute la largeur du userform), cependant, je n'ai pas encore réussi à régler le problème du bandeau supérieur du userform.
Si ton contrôle occupe tout le haut du userform, à chaque fois qu'on passera sur le bandeau du haut, tout sera gelé et il faudra le dégeler en activant une autre application. Il existe bien sûr une alternative, c'est de laisser un espace en haut, jusqu'à ce que je trouve une parade (si j'en trouve une !)
 

Pièces jointes

  • MoletteSourisTi2_01.zip
    30.2 KB · Affichages: 46
S

salim

Guest
Re Bonjour le Fil et le Forum

Ti tout va bien sur cette version, la précédente planter quand je quitter Excel tout simplement, je fermer; et Excel rester bloqué le sablier rester apparent et le fichier ne répondé plus ???. Mais là tout va bien. Je serai bien incapable de te dire là ou les raisons du plantage.

@+ Salim
 
L

LaurentTBT

Guest
Bonjour à tous,

Ti, je crois que j'ai une piste!

Je travaille toujours sur ton ancienne version (pas eu le temps de disséquer la première!)
Dans ta function WindowProc, j'ai rajouté à la fin cette ligne:
If Range("E:E").Find(what:=lMsg) Is Nothing Then Range("E65536").End(xlUp).Cells(2, 1) = lMsg
Cela m'a permis de voir que lorsqu'on clic sur le cadre du Userform, une série de messages est déclenchée, mais uniquement si l'USF est modal. Rien du tout en mode non modal.
En revanche, dans les 2 cas, le message 132 apparaît lorsque la souris bouge sur le cadre
D'où l'idée de désactiver le Hook après test sur ce meesage:
If lMsg = 132 Then UnHook dans la fonction WindowProc.
Il restait alors à réactiver le Hook dans UserForm_MouseMove en passant par un booléen pas ne pas relancer le hook s'il était déjà activé!

Et ça a l'air de marcher.

Il me reste un Hic: si je passe ma souris très rapidement de l'Usf vers une cellule de la feuille excel pour travailler dessus, il m'arrive d'avoir fermeture intempestive d'excel (je suppose que la souris va trop vite sans que le passage sur le cadre ne soit intercepté.
Peux-tu me dire ce que tu en penses? J'ai dans l'idée que ta nouvelle version va peut-être palier ce bogue. Mais y a-t-il d'autres risques, à ton avis?

J'attends ton avis éclairé, merci.
 

Pièces jointes

  • Mouswheel5.zip
    20.2 KB · Affichages: 26
T

Ti

Guest
En fait, dans ma dernière version, je n'ai plus de problème en cas de passage de la souris sur la bordure, mais je cherche le moyen de désactiver le hook quand elle passe sur la barre de titre au cas où le contrôle est placé tout en haut du userform.
A vrai dire, je n'avais pas pensé à tester lMsg, je vais donc voir de ce côté si je peux glâner quelque chose.
Suite au prochain épisode...
 
T

Ti

Guest
Super Laurent, le fait de tester lMsg m'économise pas mal de lignes de code (auparavant, je détectais la hauteur du bandeau et je testais si la souris passait dessus via les coordonnées xPos et yPos, ce qui était bien plus long).
Voilà maintenant une version qui, chez moi, fonctionne très bien, sans effets annexes.

Pour les tests, je vous propose la procédure suivante :
1. jouez avec le programme, déplacez les userforms etc. puis fermez les.

2. Sans quitter Excel, ouvrez un fichier zip depuis l'explorateur, contenant un xls. Cliquez deux fois sur ce fichier pour l'ouvrir directement dans Excel. Si tout se passe bien, c'est OK (je sais, ça semble farfelu, mais j'ai testé bien d'autres procédures qui, du fait qu'on ne rétablissait pas le bon hwnd, produisait des side-effects quelquefois difficiles à détecter autrement qu'avec cette méthode).

Enfin, j'utilise dans mon module de classe, un raccourci d'écriture qui (avec Excel 2003) fonctionne, alors qu'à première vue, je devrais avoir une erreur de déclaration de type (j'utilise Ctrl.Parent pour initialiser un UserForm alors que, dans mes derniers formulaires, ce parent n'est pas toujours un UserForm, mais peut être un Frame ou un Multipage).
Comme je n'ai pas Excel 2000 ou XP sous la main, je ne peux pas tester si ces versions vont l'accepter. Merci de me tenir au courant si vous avez une erreur - ou si ça se passe bien - à l'initialisation. De toute façon cette erreur ne fera pas planter Excel.

Voilà, en tout cas, si d'Excel 2000 et XP acceptent le raccourci ci-dessus, je vous conseille d'utiliser cette dernière version.
 

Pièces jointes

  • MoletteSourisTi2_02.zip
    41.9 KB · Affichages: 29
  • MoletteSourisTi2_02.zip
    41.9 KB · Affichages: 27
  • MoletteSourisTi2_02.zip
    41.9 KB · Affichages: 30
T

Ti

Guest
je remets le fichier, j'avais oublié de repasser en showmodal =False suite aux tests.
 

Pièces jointes

  • MoletteSourisTi2_02.zip
    40.8 KB · Affichages: 61
  • MoletteSourisTi2_02.zip
    40.8 KB · Affichages: 53
  • MoletteSourisTi2_02.zip
    40.8 KB · Affichages: 61
L

LaurentTBT

Guest
On va y arriver!
Ici, ma molette de souris est toute rouge, et j'ai envie de l'arracher!

Alors voici le résultats de mes quelques tests:
Pour ce qui est de l'utilisation de MoletteSourisTi2_02, rien d'anormal de détecté, tout fonctionne a priori.
Pour l'ouverture d'un Zip: parfois, le fichier excel s'ouvre, parfois, non, sans que j'ai identifié d'actions communes entre les différents cas où il s'ouvre et entre ceux où il ne s'ouvre pas.
Ensuite, lorsque j'ai affiché un des 2 userforms, que j'ai utilisé ou non la molette, je ne peux plus fermer excel. Quand je clique sur la croix, le sablier apparaît, puis plus rien. Par contre, je peux fermer le classeur excel tout en restant dans excel, mais je ne peux plus fermer excel autrement que par Ctrl alt suppr, et je ne peux pas non plus ouvrir un autre fichier excel.

Voilà, désolé, Ti, je vais peut-être encore te donner du boulot, mais tu ne dois plus être très loin de la solution idéale!
 
L

LaurentTBT

Guest
Ti, je viens d'identifier un point commun:
Quand je ferme tes userforms avec le commandbutton pour quitter, pas de problème
quand je les ferme avec la croix de fermeture, alors c'est là que je ne peux plus fermer excel sans planter.
Peut-être un petit unhook dans userform_queryclose?

Au fait, j'ai oublié, j'ai excel XP 2002 et windows XP Home.

A plus, pour j'espère le dénouement!
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87