Lone Programmer
XLDnaute Nouveau
Bonjour à tous !
J'ai actuellement créé un formulaire dynamique sur une feuille excel où, lorsque le contenu de certaines cellules change d'autres sont mises à jour en conséquence.
Voici un exemple arbitraire pour vous faire comprendre l'idée :
Là où ça se complique, c'est lorsque [A1] contient une liste de validation.
En supposant que j'y renseigne par exemple les valeurs 31, 32 et 33.
Si je sélectionne la valeur 31, la cellule [B1] contiendra le message "Le département Haute-garonne est concerné". Si ensuite je sélectionne les valeurs 32 ou 33, la cellule [B1] sera vidée de son contenu. De même si j'efface le nombre "31" avec la touche backSpace et appuie sur "Entrée", la cellule [B1] sera vidée de son contenu (toute liste de validation accepte le champs vide). Jusque là, tout fonctionne comme prévu, pas de soucis.
Là où réside mon problème, est si j'utilise la touche "Suppr" sur [A1] pour effacer le "31" et non la touche BackSpace puis "Entrée" : le contenu de [B1] n'est pas mis à jour comme si la cellule [A1] contenant toujours la valeur "31" ! A noter que ça fonctionne si [A1] ne contient pas une liste de validation.
Pour résumer mon problème :
Le changement de valeur d'une cellule contenant une liste de validation n'est pas détecté lorsqu'on utilise la touche "Suppr" sur cette cellule alors qu'il fonctionne s'il ne s'agit pas d'une liste de validation.
Piste de solution de contournement...
Le principe serait de détecter que la touche "Suppr" ait été pressée. Néanmoins, je n'ai pas non plus trouvé de solution dans "Worksheet_Change" même avec l'utilisation de Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Long) As Integer (Détection de l'appui sur une touche du clavier)
J'ai actuellement créé un formulaire dynamique sur une feuille excel où, lorsque le contenu de certaines cellules change d'autres sont mises à jour en conséquence.
Voici un exemple arbitraire pour vous faire comprendre l'idée :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
' les modifications de valeurs ne sont détectées que sur A1 et A3 (Ailleurs ça ne m'intéresse pas)
Case thisWorkbook.[A1].Address, thisWorkbook.[A3].Address
' Modification du contenu de B1 selon la présence du département 31 dans A1 ou A3
If thisWorkbook.[A1].value = 31 or thisWorkbook.[A3].value = 31 Then
ThisWorkBook.[B1].value = "Le département Haute-garonne est concerné"
Else
ThisWorkBook.[B1].value = vbNullString
end if
End Select
End Sub
Là où ça se complique, c'est lorsque [A1] contient une liste de validation.
En supposant que j'y renseigne par exemple les valeurs 31, 32 et 33.
Si je sélectionne la valeur 31, la cellule [B1] contiendra le message "Le département Haute-garonne est concerné". Si ensuite je sélectionne les valeurs 32 ou 33, la cellule [B1] sera vidée de son contenu. De même si j'efface le nombre "31" avec la touche backSpace et appuie sur "Entrée", la cellule [B1] sera vidée de son contenu (toute liste de validation accepte le champs vide). Jusque là, tout fonctionne comme prévu, pas de soucis.
Là où réside mon problème, est si j'utilise la touche "Suppr" sur [A1] pour effacer le "31" et non la touche BackSpace puis "Entrée" : le contenu de [B1] n'est pas mis à jour comme si la cellule [A1] contenant toujours la valeur "31" ! A noter que ça fonctionne si [A1] ne contient pas une liste de validation.
Pour résumer mon problème :
Le changement de valeur d'une cellule contenant une liste de validation n'est pas détecté lorsqu'on utilise la touche "Suppr" sur cette cellule alors qu'il fonctionne s'il ne s'agit pas d'une liste de validation.
Piste de solution de contournement...
Le principe serait de détecter que la touche "Suppr" ait été pressée. Néanmoins, je n'ai pas non plus trouvé de solution dans "Worksheet_Change" même avec l'utilisation de Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Long) As Integer (Détection de l'appui sur une touche du clavier)
Dernière édition: