XL 2016 VBA - Comment savoir si le clavier est en AZERY ou en QWERTY ?

Dudu2

XLDnaute Barbatruc
Bonjour,

Pour basculer le clavier d'AZERTY en QWERTY et inversement il suffit d'envoyer:
VB:
CreateObject("wscript.shell").SendKeys "%+"

Mais, en VBA, y a-t-il un moyen de savoir dans quel mode est le clavier ?

Merci par avance pour toute indication.
 
Solution
Voilà...
A force de recherches et de tests, non seulement j'ai pu déterminer si le clavier est français ou pas, mais aussi passer de clavier français à clavier anglais et inversement directement avec l'API !

Je ne suis pas sûr que les claviers français autres que French - France soient AZERTY.
C'est à vérifier, mais ce sera pas simple d'en trouver des comme ça !

VB:
Option Explicit

#If VBA7 Then
    'https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardlayout
    Private Declare PtrSafe Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As LongPtr) As Long
    'https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadkeyboardlayouta
    Private Declare PtrSafe Function...

Dudu2

XLDnaute Barbatruc
Voilà...
A force de recherches et de tests, non seulement j'ai pu déterminer si le clavier est français ou pas, mais aussi passer de clavier français à clavier anglais et inversement directement avec l'API !

Je ne suis pas sûr que les claviers français autres que French - France soient AZERTY.
C'est à vérifier, mais ce sera pas simple d'en trouver des comme ça !

VB:
Option Explicit

#If VBA7 Then
    'https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardlayout
    Private Declare PtrSafe Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As LongPtr) As Long
    'https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadkeyboardlayouta
    Private Declare PtrSafe Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
#Else
    Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
    Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
#End If

Private Const KLF_ACTIVATE = &H1

'---------------------------------
'Retourne True si clavier français
'---------------------------------
Function ClavierEstFrançais() As Boolean
    Dim KeyboardLayout As Long
  
    KeyboardLayout = GetKeyboardLayout(0)
  
    ClavierEstFrançais = True
  
    'https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-input-locales-for-windows-language-packs
    Select Case KeyboardLayout
        Case &H484040C      'Alsatian - France
        Case &H47E040C      'Breton - France
        Case &H483040C      'Corsican - France
        Case &H80C080C      'French - Belgium
        Case &H40C040C      'French - France (AZERTY)
        Case &H140C100C     'French - Luxembourg
        Case &H180C040C     'French - Monaco
        Case &H100C100C     'French - Switzerland
        Case &H482040C      'Occitan - France
          
        Case Else
            ClavierEstFrançais = False
    End Select
End Function

'----------------------------------
'Met le clavier en anglais (QWERTY)
'----------------------------------
Sub MetClavierEnAnglais()
    Call LoadKeyboardLayout("00000409", KLF_ACTIVATE)
End Sub

'-----------------------------------
'Met le clavier en français (AZERTY)
'-----------------------------------
Sub MetClavierEnFrançais()
    Call LoadKeyboardLayout("0000040C", KLF_ACTIVATE)
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour @Dudu2 c’était trop tentant ;)
et une de plus dans ma biblio Api/macro4 !!!!
VB:
'reprise du module clavier @Dudu2 sur exceldownload
'les api avec les macro4
'patricktoulon 04/08/2021
Option Explicit


'---------------------------------
'Retourne True si clavier français
'---------------------------------
Function ClavierEstFrançais() As Boolean
    Dim KeyboardLayout As Long
 
   KeyboardLayout = ExecuteExcel4Macro("CALL(""user32"",""GetKeyboardLayout"",""JJ""," & 0 & ")")
    ClavierEstFrançais = True
    'https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-input-locales-for-windows-language-packs
    Select Case KeyboardLayout
        Case &H484040C      'Alsatian - France
        Case &H47E040C      'Breton - France
        Case &H483040C      'Corsican - France
        Case &H80C080C      'French - Belgium
        Case &H40C040C      'French - France (AZERTY)
        Case &H140C100C     'French - Luxembourg
        Case &H180C040C     'French - Monaco
        Case &H100C100C     'French - Switzerland
        Case &H482040C      'Occitan - France
         Case Else
            ClavierEstFrançais = False
    End Select
End Function
Sub test()
MsgBox ClavierEstFrançais
End Sub
'----------------------------------
'Met le clavier en anglais (QWERTY)
'----------------------------------
Sub MetClavierEnAnglais()
     ExecuteExcel4Macro ("CALL(""user32"",""LoadKeyboardLayoutA"",""JCJ"",""00000409""," & &H1 & ")")
End Sub
'-----------------------------------
'Met le clavier en français (AZERTY)
'-----------------------------------
Sub MetClavierEnFrançais()
    ExecuteExcel4Macro ("CALL(""user32"",""LoadKeyboardLayoutA"",""JCJ"",""0000040C""," & &H1 & ")")
End Sub
 

Discussions similaires

Réponses
12
Affichages
347

Statistiques des forums

Discussions
312 370
Messages
2 087 696
Membres
103 642
dernier inscrit
nolem