Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA et touche verrouillage majuscule

84 views
Skip to first unread message

Proust Michel

unread,
Apr 29, 2009, 6:03:45 AM4/29/09
to
bonjour � tous
dans une macro VBA, je voudrais lancer :
traitement A si clic bouton B
traitement Z si clic bouton B avec verrouillage majuscule activ� (la touche
avec un petit cadenas ferm�)
aussi je voudrais savoir comment d�terminer que la touche verrouillage
majuscule est activ�e
merci d'avance pour les infos et bonne journ�e


isabelle

unread,
Apr 29, 2009, 8:23:20 AM4/29/09
to
bonjour Michel,

pour verifier si la touche VerrMajuscule est aciv� :

Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type

Private Declare Function GetKeyboardState Lib "user32" (kbArray As
KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32" (kbArray As
KeyboardBytes) As Long

Dim tKB As KeyboardBytes

Public Function KeyMaj_IsON() As Boolean
If GetKeyboardState(tKB) Then KeyMaj_IsON = tKB.kbByte(VK_CAPITAL)
End Function

Sub test()
If KeyMaj_IsON Then macroA Else: macroB: End If
End Sub

isabelle

Proust Michel a �crit :

isabelle

unread,
Apr 29, 2009, 8:28:41 AM4/29/09
to
correction :

Sub test()
If KeyMaj_IsON Then macroA Else: macroB

End Sub

isabelle

isabelle a �crit :

FFO

unread,
Apr 29, 2009, 8:50:08 AM4/29/09
to
Salut à toi

Tu peux utiliser une cellule (A1 dans ma proposition) dans laquelle au grés
de l'activation de la touche de verrouillage la lettre "M" ou "m" sera
intégrée avec ces 2 codes :

Sub TestLock()

Application.OnKey "{CAPSLOCK}", "Verrouillage"

End Sub

Sub Verrouillage()
If Workbooks("Document.xls").Sheets("Feuil1").Range("A1") = "m" Then
Workbooks("Document").Sheets("Feuil1").Range("A1") = "M"
Else
Workbooks("Document.xls").Sheets("Feuil1").Range("A1") = "m"
End If
End Sub

avec dans le ThisWorkbook ces lignes :

Private Sub Workbook_Open()
Run ("TestLock")
End Sub

Il faut juste actualiser la cellule du "M" ou "m" en fonction de l'état
verrouilage Majuscule ou minuscule actif à l'ouverture du document

La manipulation ensuite de la touche verrouillage actualisera
automatiquement cette cellule

Reste à mettre pour tes boutons ceci :

If Workbooks("Document.xls").Sheets("Feuil1").Range("A1") = "m" Then
Run("traitement A")
Else
Run("traitement Z")
End If

Ce n'est pas trés élégant mais fonctionnel à défaut d'une autre solution

Actualises cette partie :

Workbooks("Document.xls").Sheets("Feuil1").Range("A1")

Du nom de ton document de ton onglet et cellule qui auront ce paramètre

Fais des essais et dis moi !!!!

FFO

unread,
Apr 29, 2009, 9:07:04 AM4/29/09
to
Salut isabelle

Trés impressionné par ta proposition je me suis empressé de l'essayer
toujour désireux d'apprendre
Mais hélas minuscule ou Majuscule j'obtiens toujours le même résultat
Je n'ai fais pourtant qu'un stricte copier/coller de tes lignes
Peux tu m'en dire plus !!!!!

Merci à toi

Proust Michel

unread,
Apr 29, 2009, 9:10:35 AM4/29/09
to
merci pour les infos je vais essayer de mettre �a en pratique !?!?
bonne journ�e

"isabelle" <i@v> a �crit dans le message de news:
eMg3GVMy...@TK2MSFTNGP03.phx.gbl...

MichDenis

unread,
Apr 29, 2009, 9:51:15 AM4/29/09
to
Bonjour Michel,

Il y a cette façon de faire :

Dans le haut d'un module standard: Déclaration des API
'=================================
' Declare Type for API call:
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 ' Maintenance string for PSS usage
End Type

' API declarations:
Private Declare Function GetVersionEx Lib "Kernel32" _
Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long

Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwflags As Long, ByVal dwExtraInfo As Long)

Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long

Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long

' Constant declarations:
Const VK_CAPITAL = &H14
'=================================

Une fonction qui retourne Vrai ou Faux selon que la touche
CapLock est enfoncé ou non.
'-------------------------------------------------
Function IsCapsLockOn() As Boolean
Dim o As OSVERSIONINFO

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
IsCapsLockOn = keys(VK_CAPITAL)
End Function
'-------------------------------------------------

Dans ton code, si tu veux tester la touche "caplock"
tu utilises quelque chose comme ceci :

'--------------------------------------------
Sub test()
If IsCapsLockOn Then
MsgBox "en Majucule"
Else
MsgBox "en Minuscule"
End If
End Sub
'--------------------------------------------






"Proust Michel" <mipr....@wanadoo.fr> a écrit dans le message de groupe de discussion : uw74HHLy...@TK2MSFTNGP04.phx.gbl...
bonjour à tous
dans une macro VBA, je voudrais lancer :
traitement A si clic bouton B
traitement Z si clic bouton B avec verrouillage majuscule activé (la touche
avec un petit cadenas fermé)
aussi je voudrais savoir comment déterminer que la touche verrouillage
majuscule est activée
merci d'avance pour les infos et bonne journée

isabelle

unread,
Apr 29, 2009, 9:55:36 AM4/29/09
to
salut Ffo,

voici le fichier dans lequel j'ai fais le test :
http://cjoint.com/?fbfIPBKaNR

isabelle

FFO a écrit :

MichDenis

unread,
Apr 29, 2009, 10:09:59 AM4/29/09
to
Ceci est suffisant :

Dans le haut d'un module standard :

' Declare Type for API call:
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
End Type

' API declarations:
Private Declare Function GetVersionEx Lib "Kernel32" _
Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long
' Constant declarations:
Const VK_CAPITAL = &H14

Function IsCapsLockOn() As Boolean
Dim o As OSVERSIONINFO

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
IsCapsLockOn = keys(VK_CAPITAL)
End Function
'----------------------------------------------
Sub test()
If IsCapsLockOn Then
MsgBox "en Majucule"
Else
MsgBox "en Minuscule"
End If
End Sub
'----------------------------------------------

FFO

unread,
Apr 29, 2009, 11:37:03 AM4/29/09
to
Merci beaucoup isabelle

Aprés analyse ces lignes présentes dans ton fichier ne figurent pas dans ta
proposition :

Option Explicit

Private Const VK_CAPITAL As Long = &H14

D'où la difficulté que j'ai rencontré pour faire la fonctionner correctement

Je capitalise

Merci encore

Proust Michel

unread,
Apr 30, 2009, 3:21:09 AM4/30/09
to
�a marche bien merci pour l'aide
pour info est-il possible d'avoir acc�s � la barre d'�tat dans Excel ?
bonne journ�e et bon pont !

"isabelle" <i@v> a �crit dans le message de news:
%23arfGYM...@TK2MSFTNGP03.phx.gbl...

isabelle

unread,
Apr 30, 2009, 6:05:46 AM4/30/09
to
bonjour Michel,

Proust Michel a �crit :


> �a marche bien merci pour l'aide
> pour info est-il possible d'avoir acc�s � la barre d'�tat dans Excel ?
>

oui, voici un exemple d'utilisation de la propri�t�| |StatusBar et
|DisplayStatusBar| (extrait de l'aide) :

Cet exemple montre comment imposer le texte � Please be patient... � �
la barre d'�tat avant l'ouverture du classeur Large.xls, puis r�tablir
le texte par d�faut.

|oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.*StatusBar* = "Please be patient..."
Workbooks.Open filename:="LARGE.XLS"
Application.*StatusBar* = False
Application.DisplayStatusBar = oldStatusBar

isabelle
|

Ael Rowen Terence

unread,
Apr 30, 2009, 8:06:47 AM4/30/09
to

"isabelle" <i@v> a �crit dans le message de groupe de discussion :
eVp14sXy...@TK2MSFTNGP05.phx.gbl...
> bonjour Michel,
>

> |oldStatusBar = Application.DisplayStatusBar
> Application.DisplayStatusBar = True
> Application.*StatusBar* = "Please be patient..."
> Workbooks.Open filename:="LARGE.XLS"
> Application.*StatusBar* = False
> Application.DisplayStatusBar = oldStatusBar

Bonjour, et pardon de poser une question de n�ophyte :
Mais que signifie les �toiles dans l'expression : "
Application.*StatusBar*" ?

isabelle

unread,
Apr 30, 2009, 8:33:01 AM4/30/09
to
bonjour Ael Rowen Terence,

Ael Rowen Terence a �crit :


> Bonjour, et pardon de poser une question de n�ophyte :
> Mais que signifie les �toiles dans l'expression : "
> Application.*StatusBar*" ?

c'est ce qui arrive lorsque l'on fait un copier coller directement de
l'aide excel dans un message texte,
ces caract�res ne font pas partie du code, toutes mes excuses,

oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True

Application.StatusBar = "Please be patient..."
Workbooks.Open Filename:="LARGE.XLS"
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar

isabelle

Ael Rowen Terence

unread,
Apr 30, 2009, 10:21:30 AM4/30/09
to

"isabelle" <i@v> a �crit dans le message de groupe de discussion :
uijpK$YyJHA...@TK2MSFTNGP05.phx.gbl...

A qui ce n'est arriv� me lance le premier paquet d'octets ... :-)

JLuc

unread,
May 1, 2009, 4:53:54 AM5/1/09
to
Ael Rowen Terence a ᅵcrit :
> "isabelle" <i@v> a ᅵcrit dans le message de groupe de discussion :
> eVp14sXy...@TK2MSFTNGP05.phx.gbl...
>> bonjour Michel,
>>
>
>> |oldStatusBar = Application.DisplayStatusBar
>> Application.DisplayStatusBar = True
>> Application.*StatusBar* = "Please be patient..."
>> Workbooks.Open filename:="LARGE.XLS"
>> Application.*StatusBar* = False
>> Application.DisplayStatusBar = oldStatusBar
>
> Bonjour, et pardon de poser une question de nᅵophyte :
> Mais que signifie les ᅵtoiles dans l'expression : "
> Application.*StatusBar*" ?

Les ᅵtoile sont lᅵ pour mettre en gras le mot "StatusBar". Avec mon
lecteur (MesNews), les ᅵtoiles n'apparraissent pas mais le mot est en
gras

--
JLuc
ᅵ Celui qui trouve sans chercher est celui qui a longtemps cherchᅵ
sans trouver. ᅵ - Gaston BACHELARD


0 new messages