Désactiver le Zoom

Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 octobre 2011 - 23 déc. 2009 à 21:15
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 24 déc. 2009 à 10:11
Bonsoir,

On peut zoomer sur une feuille au moyen de CTRL + molette souris.
Peut-on désactiver cette possibilité au moyen d'une macro ou peut-être d'un API ?

Merci d'avance pour toute réponse.

Bonnes fêtes à tous.

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 déc. 2009 à 22:18
aisé de subclasser pour subtiliser le WM_MOUSEWHEEL

a voir la confirmation de la techno utilisée

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 déc. 2009 à 01:05
salut,

pour info c'est le contrôle et non la form

toujours pour info, c'est le cas aussi sous VB6
(exemple de la richtextbox)

++
[hr]
0
Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 octobre 2011
24 déc. 2009 à 02:11
Merci pour votre intérêt, mais malheureusement nous en sommes toujours à la case départ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 déc. 2009 à 07:14
Par ta faute et de ton manque de précision.

PCPT semble bien informé.

En VB6 et sur un RichTextBox ?

ok, donc la solution que j'ai suggerée devrait fonctionner... nous ne sommes donc pas vraiment au point de départ, si ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 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.
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
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.

Calade
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 déc. 2009 à 09:14
ok, donc il s'agit de proscrire le zoom dans excel...

je me penche sur la question.

reste que pour passer d'une feuille a l'autre, tu peux normallement faire

Ctrl + PageUp
ou Ctrl+ PageDown


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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 ^^

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 déc. 2009 à 10:11
exemple posté ici :

www.vbfrance.com/codes/DLL-SUBCLASSER-RAPIDEMENT-DANS-VOS-APPLI_19625.aspx

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous