Action dès qu'une liste déroulante est activée

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Xtian_Québec

XLDnaute Occasionnel
Salut le Forum,
Voici mon problème:
J'utilise plusieurs liste déroulante dans ma feuille et avant de faire un changement dans une cellule concernée, je dois conserver la valeur précédente. J'utilise Worksheet_SelectionChange suivante:

Public sub Worksheet_SelectionChange(ByVal TARGET as Range)
If Intersect(TARGET, Range("I15, I16,I17")) Is Nothing Then
Else
Range("I13).value = Activecell.value
End If
End Sub

donc à chaque fois que les cellules I15, I16 ou I17 sont sélectionnées, la valeur avant le changement est affichée dans I13.

Hors, I15, I16 et I17 contiennent des listes déroulantes. Si je sélectionne une de ces cellules pour la première fois, en cliquant sur la cellule, ma liste déroulante s'affiche et automatiquement la valeur de cette cellule est affichée dans I13. Par contre, un problème se produit lorsque la cellule que je veux utiliser est déjà sélectionné. Si je clique sur le petit triangle (qui est affiché à droite de ma cellule active) de ma liste déroulante à nouveau, mon code Worksheet_SelectionChange ne s'exécute pas car je ne fais pas de sélection directement dans une cellule...

J'aimerai activer mon code (ou un autre code) qui me permettrait d'afficher en I13 la valeur de la cellule si le triangle de la liste déroulante est activé.

Y a-t-il possibilité d'affecter un Worksheet_(????)Change qui est directement affecté par le triangle de la liste déroulante ?

Merci à l'avance pour vos solutions.

@++
Xtian_Québec
 
Re : Action dès qu'une liste déroulante est activée

Xtian_Québec à dit:
Salut le Forum,
Voici mon problème:
J'utilise plusieurs liste déroulante dans ma feuille et avant de faire un changement dans une cellule concernée, je dois conserver la valeur précédente. J'utilise Worksheet_SelectionChange suivante:

Public sub Worksheet_SelectionChange(ByVal TARGET as Range)
If Intersect(TARGET, Range("I15, I16,I17")) Is Nothing Then
Else
Range("I13).value = Activecell.value
End If
End Sub

donc à chaque fois que les cellules I15, I16 ou I17 sont sélectionnées, la valeur avant le changement est affichée dans I13.

Hors, I15, I16 et I17 contiennent des listes déroulantes. Si je sélectionne une de ces cellules pour la première fois, en cliquant sur la cellule, ma liste déroulante s'affiche et automatiquement la valeur de cette cellule est affichée dans I13. Par contre, un problème se produit lorsque la cellule que je veux utiliser est déjà sélectionné. Si je clique sur le petit triangle (qui est affiché à droite de ma cellule active) de ma liste déroulante à nouveau, mon code Worksheet_SelectionChange ne s'exécute pas car je ne fais pas de sélection directement dans une cellule...

J'aimerai activer mon code (ou un autre code) qui me permettrait d'afficher en I13 la valeur de la cellule si le triangle de la liste déroulante est activé.

Y a-t-il possibilité d'affecter un Worksheet_(????)Change qui est directement affecté par le triangle de la liste déroulante ?

Merci à l'avance pour vos solutions.

@++
Xtian_Québec
salut
plusieurs solutions possibles, mais la plus simple
tu conserve ta macro SelectionChange

tu crées ou tu tutilises la macro WorkSheet_Change et juste avant de sortir, tu vérifies que c'est une des trois cellules
Private Sub WorksheetChange(ByVal TARGET as Range)

traitement que tu fais actuellement, avec remplacement des Exit Sub par
GoTo Sortie_WorkSheet_Change

Puis, tu colles tu code du genre
Sortie_WorkSheet_Change:
Application.EnableEvents = False
If not(Intersect(TARGET, Range("I15, I16,I17")) Is Nothing) Then
select case target.address(0,0)
case "I15"
range("I13")=range("I15")
case "I16"
range("I13")=range("I16")
case "I17"
range("I13")=range("I17")
End select
Application.EnableEvents = TRUE
end if
exit sub

Ma méthode pour vérifier que la target est bien une des trois cellule est plus mieux bien que la tienne 😛, mais, c'est normal, je l'ai piquée sur ce site.

Nota si tu fais une multi sélection tu auras une erreur. Je n'ai pas corrigé cette erreur, puisque tu l'aurais déjà une sur l'autre macro et que ça n'a pas l'air de te traumatiser.

A+
 
Re : Action dès qu'une liste déroulante est activée

Bonjour Xtian,

Je ne pense pas qu'il y ait de solutions très simple à ton problème car il n'y a pas dévènements programables sur le fait que l'on sélectionne une valeur dans une liste pour valoriser une cellule.

Tu peux toutefois essayer ce bout de code qui reprovoque une sélection du champ après copie de l'ancienne valeur dans la zone choisie ...

============================================================
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("I15,I16,I17")) Is Nothing Then Exit Sub
If Range("I13").Value <> Target.Value Then
Range("I13").Value = Target.Value
Range("I13").Select
Target.Select
End If

End Sub
============================================================

En pièce jointe une capture de l'écran qui m'a permis de tester.

Pas terrible mais cela devrait te dépanner ....

Cordialement ....
 

Pièces jointes

Re : Action dès qu'une liste déroulante est activée

Re le Forum, Omicron,Gorfael,Pierrot93
Je savais que je pouvais compter sur de brillants et passionnés XlNautes...Toutes vos solutions semblent OK. Je vais faire des tests et confirmerai plus tard l'option qui répond le mieux à mon problème.

Encore merci😉

@++
Xtian_Québec
 
Re : Action dès qu'une liste déroulante est activée

RE à tous
Après quelques tests, voici ce que j'ai découvert.
J'ai essayé la solution de Gorfael mais le simple fait d'actionner le triangle d'une liste déroulante déjà activée ne lance pas le Worksheet_Change...donc le Select case n'est pas activé...

J'ai essayé la solution de Pierrot93 mais mes listes déroulantes ne portent pas le nom de ComboBox1, 2, 3, ...Si c'est possible de donner un nom à la cellule qui contient une liste déroulante et d'affecter ce nom à la liste elle même (pas la cellule) je crois que cette solution aurait été correcte.

Finalement, j'ai opté pour la solution de Omicron qui vérifie mon champ I13 avec le target et s'il est différent, le code

If Range("I13").Value <> Target.Value Then
Range("I13").Value = Target.Value

donne la valeur Target à ma cellule I13 et c'est bien OK.

Merci à vous trois pour avoir pris de votre temps pour résoudre mon problème.

@++
Xtian_Quebec
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
170
Retour