ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 23 déc. 2009 à 21:19
Bonjour,
J'ignorais l'existence de cette possibilité sous VB.Net...
C'est un progrès par rapport à VB6, c'est certain...
Le reste de cette discussion va m'intéresser au plus haut point.
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Dilueur
Messages postés24Date d'inscriptionmardi 3 mars 2009StatutMembreDernière intervention28 octobre 2011 24 déc. 2009 à 08:28
Bonsoir Renfield, ou plutôt bonjour, vu le décalage horaire : je suis en effet à Montevideo (Uruguay).
Je ne suis qu'un novice en VBA ; ce sont des choses qui arrivent...
Je ne suis qu'un médecin qui essaie de résoudre un "maudit" problème de présentation d'une "maudite" feuille de calculs de dilutions (d'où mon surnom "Dilueur", car nous passons notre temps à diluer des produits ou, si vous préférez, des principes actifs).
Il se peut que je me sois mal exprimé ; pourtant je pensais avoir été clair.
Je reçois des réponses soi-disant claires, peut-être pour un initié, mais pas pour un novice.
Ainsi, je vais m'exprimer autrement et vous exposer plus en détail mon problème.
1/ J'ai un classeur avec 3 feuilles.
2/ Quand je suis sur une feuille, je peux passer, en cliquant sur un bouton ActiveX, en mode "Plein Écran" ou en mode "Vue Normale".
Quand je suis en mode "Plein Écran", les lignes, les en-têtes, les onglets... bref tout ce qui ne sert à rien disparaît. En mode "Vue Normale", tout réapparaît.
3/ Quand je suis en mode "Plein Écran", les onglets portant les noms des feuilles ayant disparu, pour accéder à une autre feuille j'ai trouvé 2 solutions :
- un bouton ActiveX qui, quand on clique dessus, fait apparaître un POPUP avec la liste de toutes les feuilles du classeur ;
- une liste déroulante avec la liste de toutes les feuilles du classeur.
Personnellement, je préfère la solution des POPUP qui, quand il apparaît, devrait se trouver collé au bouton qui l'a appelé. Mais voilà, survient un "problème" :
je paramètre les coordonnées "géographiques" du POPUP suivant qu'on se trouve en mode "Plein Écran" ou en mode "Vue Normale". Mais si d'aventure je fais un zoom avec "CTRL + molette de la souris" et qu'ensuite j'appelle le POPUP, celui-ci se retrouve dans un endroit disons insolite de la feuille. N'ayant pu résoudre ce problème, je me suis dit que pour y remédier le mieux serait de bloquer le "zooming" via "CTRL + molette de la souris" et, en revanche, proposer des "zoomings" (2 ou 3) pré-déterminés (pour chacunn desquels les coordonnées des POPUP auront été déterminées) au moyen de boutons d'options par exemple.
En conséquence, je cherche une "formule magique" qui permette, dès l'ouverture du classeur, d'entraver le "zooming" qui sera évidemment libéré lors de la fermeture du classeur. Je pense qu'au moyen d'un API on peut y arriver ; en revanche, personnellement j'en suis tout à fait incapable. Je vous rappelle humblement que je ne suis que novice !
Si vous désirez que je vous envoie une copie de cette feuille, pas de problème, faites-le moi savoir.
En vous remerciant, quoi qu'il en soit, de l'intérêt que vous avez porté pour ce sujet.
Acá nos morimos de calor y donde estan, me dijeron, de frío!
En vous souhaitant à tous une excellente fête de Noël.
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 24 déc. 2009 à 08:58
Bonjour,
UcFoutu, je confirme: sous VB6 + RichTextBox, un Ctrl+MouseWheel grossit le contenu de la box. Pas essayé d'autres contrôles.
Par contre Dilueur, en lisant ton dernier Post, tu travailles non sous VB6 mais VBA (Excel) (à confirmer STP) et c'est là que tu vas avoir un problème. Comme le dit Renfield pour pouvoir récupérer l'évènement mousewheel de la souris il faut impérativement que tu aies le hWnd (le handle si tu préfères) de ton contrôle. Si celui-ci est un contrôle natif d'Excel, tu peux oublier, le hWnd n'est pas récupérable, sinon cela dépend de ce fameux contrôle. Alors lequel utilises-tu ?
Accessoirement si un admin peux déplacer ce post dans la catégorie VBA, merci.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 24 déc. 2009 à 10:03
ok, ça fonctionne.
télécharge la dll ici
[www.vbfrance.com/codes/DLL-SUBCLASSER-RAPIDEMENT-DANS-VOS-APPLI_19625.aspx www.vbfrance.com/codes/DLL-SUBCLASSER-RAPIDEMENT-DANS-VOS-APPLI_19625.aspx]
place la dans C:\windows\System32
enregistre là via RegSvr32
Alt+F11 => Editeur VBA
Ctrl+R => Explorateur de projet
dans le code de ton ThisWorkBook
ajoute :
Option Explicit
Private WithEvents SubClasser As ReySubClasser
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer
Private Sub SubClasser_Msg1(ByVal hwnd As Long, ByVal uMsg As Rey_SubClasser.MessageConstants, ByVal wParam As Long, ByVal lParam As Long, MsgBehavior As Rey_SubClasser.MsgBehaviorConstants, RetValue As Long, ByVal OldProc As Long)
If (GetAsyncKeyState(vbKeyControl) And &H10000000) Then
MsgBehavior = [MB Cancel Message]
Else
MsgBehavior = [MB Use Default Value]
End If
End Sub
Private Sub Workbook_Open()
Dim hwnd As Long
hwnd = FindWindowEx(Application.hwnd, 0, "XLDESK", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "EXCEL7", Me.Name)
Set SubClasser = New ReySubClasser
SubClasser.Controls.Add hwnd
SubClasser.Messages.Add WM_MOUSEWHEEL
SubClasser.StartSubClassing
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SubClasser.StopSubClassing
End Sub
il te faut ensuite ajouter la dll dans
Outils > References > Rey_Subclasser
ayé, le scroll fonctionne, mais ti on presse Ctrl+Molette, el message est annulé: Excel ne sait même pas que tu a tenté un Zoom ^^