VBA SendKey Comportement incompréhensible

Bonjour à tous,

Dans le classeur joint, j'ai le code suivant :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$C$15195" Then
    SendKeys "%{DOWN}"
  End If
End Sub

Si je sélectionne C15195, il s''affiche une liste déroulante de quelques valeurs de la colonne. Quelqu'un a-t-il une explication autre que "sendkeys, c'est chelou" ?

Daniel

Bonjour

Quelqu'un a-t-il une explication autre que "sendkeys, c'est chelou" ?

Désolé mais je n'ai pas compris votre question ou plutôt le problème...

Bonjour,

Pourquoi est-ce que, quand je clique sur la cellule C, cette liste déroulante s'affiche :

capture d ecran 2026 09 10 130839

Re

Pourquoi est-ce que, quand je clique sur la cellule C, cette liste déroulante s'affiche :

Cela vous renvoie toutes les valeurs texte que vous avez introduites dû au signe % que vous avez mis devant l'instruction Down

Si par exemple vous ajoutez dans la colonne "AAAA", en cliquant sur la cellule C15195, vous verrez que la liste reprend le AAAA.
Pour corriger, le 228 35 16 dans votre fichier, allez dans la cellule C9932, supprimez la donnée 228 35 16. Ensuite réintroduisez-la mais sans les espaces
Comme la cellule est au format "personnalisé" ("000".....), vous ne devriez plus avoir la donnée 228 35 16 dans la liste déroulante mais uniquement Corrigé et x

Edit : Si vous enlevez le %, vous n'aurez plus la liste mais une fois sur la cellule C15195, mais le code fera passer automatiquement à la cellule suivante dès que vous cliquerez sur cette cellule. Si c'est ce que vous cherchez à faire, ... ??

Hello,

tu veux faire koi avec ton SendKeys "%{DOWN}" ? descendre dans la cellule en dessous ? un sendkeys pendant un selectionChange c'est "Chelou" !

@Dan :

C'est le comportement normal ? Il y a d'autres valeurs texte dans la même colonne.

@Jurassik Pork :

Bonjour, Non, ce n'est pas chelou, c'est rusé. Je m'en sers pour ouvrir les listes de validation sans avoir à cliquer, pour accélérer la saisie.

Daniel

@Dan :
C'est le comportement normal ? Il y a d'autres valeurs texte dans la même colonne.

Si vous avez des valeurs texte (puisque contenant des espaces entre les chiffres), vous les retrouvez dans la liste.
Si vous trouvez 228 35 16 dans la liste, c'est parce que vous avez entré 228 35 16 en C9932 au lieu de 2283516

Faites l'essai vous verrez que la valeur de la cellule ne sera plus reprise dans votre liste

Vous avez quoi dans vos listes de validation ?

@Dan :

Non, mes listes de validation sont en colonnes A et B et fonctionnent parfaitement avec cette macro. Comme je n'avais pas mis de restriction de plage, arrrivé en colonne C, j'ai constaté ça.

Daniel

Re

Avec la macro que vous avez donnée ici cela ne concerne que la cellule C15195 et aucune autre sur la feuille du fichier posté
Mais bon si cela fonctionne comme vous voulez, tant mieux

Cordialement

Non, j'ai fourni un extrait du classeur réel. mes explications concernaient ce dernier.

Daniel

Hello,

ben si, "sendkeys, c'est chelou" ! : ça désactive le verrouillage numérique.

Patricktoulon avait donné une solution pour ça

https://excel-downloads.com/threads/astuce-pour-application-sendkeys.20043893/

Et pour ce qui est de l'explication, c'est uniquement les données "textes" précédentes qui sont proposées dans cette liste

Bonjour à tous,

@Nain porte koi :

"ben si, "sendkeys, c'est chelou" ! : ça désactive le verrouillage numérique."

Ben, non, c'est pas chelou. Je n'ai fourni qu'un extrait de mon code, pour plus de clarté, comme je l'ai dit à 20h31. Même si je suis désolé d'avoir désactivé vos pavés numériques

Daniel

Bonjour

@Daniel :
J'avais remarqué aussi ce que Nain Porte Quoi mentionne dans son post.
La "solution" de P. Toulon élimine ce souci et peut vous servir aussi dans votre code.

La question est de savoir s'il ne faudrait pas utiliser l'instruction Application dans certains de nos codes au même titre que Thisworkbook devant les instructions sheets(....

Cordialement

@Dan

L'astuce de Patrick Toulon est déjà dans mon code. Quant à ajouter "Application" ? Ca ne peut pas faire de mal. Par contre, je rencontre une autre anomalie. Dès que je l'aurai bien cernée, j'ouvrirai une nouvelle discussion.

Daniel

Hello,

sinon au lieu d'utiliser un Sendkeys on peut utiliser l'api Windows keybd_event :

#If VBA7 Then
    Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
        ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As LongPtr)
#Else
    Private Declare Sub keybd_event Lib "user32" ( _
        ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As Long)
#End If

Private Const VK_MENU As Byte = &H12
Private Const VK_DOWN As Byte = &H28
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Sub SendAltDown()
        keybd_event VK_MENU, 0, 0, 0
        keybd_event VK_DOWN, 0, 0, 0

        keybd_event VK_DOWN, 0, KEYEVENTF_KEYUP, 0
        keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$C$15195" Then
  'SendKeys "%{DOWN}"
  SendAltDown
  End If
End Sub

Ami calmant, J.P

@Jurassic Pork :

Bonjour,

Je vais sans doute adopter ta solution. Le temps de tester.

Merci.

Si on peut cocher deux réponses je vais cocher la tienne aussi.

Euh, j'ai copié/collé le code et j'ai une erreur de syntaxe

capture d ecran 2026 09 11 105818

Peux-tu me dire quoi corriger ? Bien que je puisse supprimer cette partie...

Daniel

Si c'est la partie en rouge qui pose problème tu remplaces :

#If VBA7 Then
    Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
        ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As LongPtr)
#Else
    Private Declare Sub keybd_event Lib "user32" ( _
        ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As Long)

#End If

par :

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

mais normalement avec le code complet cela passe. Moi c'est OK en excel 2021 64 bits, j'ai aussi la partie en rouge. Le rouge est dans le else qui n'est pas pris en compte pour du VBA7

Oui, c'est ce que j'avais fait. Ca fonctionne du feu de dieu. Merci.

Daniel

Rechercher des sujets similaires à "vba sendkey comportement incomprehensible"