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 !
J'ouvre une nouvelle discussion même si c'est la continuation de mon précédent message,
Le nouveau problème avec ma liste déroulante (clic sur la cellule A2 de la feuille1), c'est que lorsque je saisie une 1ère lettre par exemple le S dans ma liste déroulante,
il ne m'est pas possible choisir ce nom, je suis obligé de sélectionner un autre nom...!!
C'est pareil à chaque fois qu'un nom fait partie du 1er rang de la lettre saisie....!!!!
Dans la lancée d'une optimisation, est-il possible de refermer l'affichage de l'userform en cliquant sur Echap avec un ptit code ??
Autre demande svp, peut-on faire apparaitre la liste déroulante sur une plage donnée...par exemple dans les cellules A2 à A40 ??
Si vous avez d'autres suggestions je prends volontiers,
P.S : je me permets juste de vous indiquer ci-dessous le bout de code ci-dessous qui se trouve dans mon classeur,
J'ai l'impression qu'il n'est pas opérationnel alors je préfère le supprimer,
Mais je me demande pourquoi il ne fonctionne pas ???
If Noms = "" Then
MsgBox "Il faut saisir un nom.", vbCritical, "Attention !"
Exit Sub
End If
Et enfin, contrairement à un autre fichier perso, la ligne dans mon précédent message qui posait un problème d'affichage, ne pose pas de problème dans celui là....!!!!
Re : Optimiser ma liste déroulante créée avec un ComboBox
Mais je me demande pourquoi il ne fonctionne pas ???
If Noms = "" Then
MsgBox "Il faut saisir un nom.", vbCritical, "Attention !"
Exit Sub
End If
Le code dans lequel se trouvent ces instructions ne s'exécute que s'il y a une saisie dans la combobox.... Et dès lors qu'il y a une saisie, il n'est plus à blanc
Ce code conviendrait dans une commandbutton qui valide la saisie : au cas où la combobox serait à blanc alors afficher le message
Re : Optimiser ma liste déroulante créée avec un ComboBox
Bonjour Amilo,
A mon humble avis, une listbox est plus pratique pour la saisie:
si on tape sur une lettre, on se positionne sur le premier nom commençant par cette lettre
si ensuite on tape sur la même lettre, on sélectionne successivement les noms avec cette initiale
l'utilisateur a tout de suite une vue plus complète de la liste
La validation se fait par un double clique ou la touche entrée
La touche Esc annule la saisie
L'appel de la fenêtre de saisie se fait par double-clique
=> on peut le faire par l'évènevent SelectionChange (voir message #7 ) mais, c'est selon moi, polluant quand on navigue sur la feuille.
La fenêtre apparait si on double-clique dans une des cellule A2:B40.
Il a été défini un nom dynamique de classeur: Nom=lesNoms et Définition=DECALER(Feuil2!$A$1;1;0;NBVAL(Feuil2!$A:$A)-1;2). Ce Nom sert à la définition de RowSource de la liste.
Le code du module de Feuil1:
VB:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Count = 1 And Target.Row >= 2 _
And Target.Row <= 40 And Target.Column <= 2 Then
Cancel = True
Saisie.Show
End If
End Sub
'Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'If Target.Count = 1 And Target.Row >= 2 _
' And Target.Row <= 40 And Target.Column <= 2 Then Saisie.Show
' End Sub
Le code de la fenêtre de saisie:
VB:
Option Explicit
Private Sub UserForm_Initialize()
ListeNoms.ListIndex = -1
End Sub
Private Sub ListeNoms_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Inscription ListeNoms.ListIndex
End Sub
Private Sub ListeNoms_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
If KeyAscii = 13 Then Inscription ListeNoms.ListIndex
End Sub
Sub Inscription(Ligne As Long)
If Ligne = -1 Then
MsgBox "Il faut:" & vbLf & vbLf & " Soit sélectionner un nom." & _
vbLf & vbLf & " Soit annuler la saisie (Esc)", vbCritical, "Attention !"
Exit Sub
End If
Sheets("Feuil1").Select
Cells(ActiveCell.Row, "a") = Range("LesNoms")(Ligne + 1, 1)
Cells(ActiveCell.Row, "b") = Range("LesNoms")(Ligne + 1, 2)
Unload Me
End Sub
nb:si on garde les deux évènements pour faire apparaître la fenêtre de saisie, il faudra peut-être utiliser les instructions Application.EnableEvents = False et Application.EnableEvents = true dans les procédures évènementielles afin de ne pas provoquer d'interaction entre les évènements (pas testée)
Re : Optimiser ma liste déroulante créée avec un ComboBox
Bonjour CHALET53,
Merci pour vos réponses,
Le code que vous proposez ne fonctionne malheureusement pas.
Pour votre 2ème message, vous avez raison et je pense également que le MsgBox a été prévu intinialement pour un formulaire avec bouton de validation, je vais donc le supprimer,
Merci encore, en attendant de voir pour les 2 autres optimisations
Re : Optimiser ma liste déroulante créée avec un ComboBox
(re)Bonjour,
Pour être cohérent avec le nota bene du message précédent, ne garder qu'une des procédures évènementielles et mettre l'autre entièrement en commentaire (de sub à end sub)
Re : Optimiser ma liste déroulante créée avec un ComboBox
Re,
Effectivement, c'est pas mal du tout avec une listeBox, surtout que les touches Echap et Entrée fonctionnent sans problème,
Cependant, dans le fichier actuellement sur le forum, dès que je rentre dans l'Editeur VB (Alt + F11) et que je consulte simplement le code dans l'Userform pour ensuite quitter tout le classeur et cela sans aucune modification, il apparait le message d'erreur "Mémoire insuffisante"....!!!
Et tout mon classeur se bloque
Avez-vous le même problème ??
L'autre 2ème soucis, mais j'étais loin d'avoir adapté l'ensemble du code à mon fichier perso....il m'est demandé de déclarer la variable listeNoms sous :
Private Sub UserForm_Initialize()
ListeNoms.ListIndex = -1
Pourtant, dans mes options VB sous Outils, il n'est pas coché "Déclarer des variables obligatoires"...!!!
Mais j'attends d'abord adapter l'ensemble du code à mon classeur perso et là on verra bien..
Mais ça me prendra un certain temps pour cela...je vous donnerai un retour...
Re : Optimiser ma liste déroulante créée avec un ComboBox
(re)Bonjour Amilo,
Avez-vous utilisé la version 2 en mettant en commentaire l'ensemble de la procédure évènementielle depuis Private Sub Worksheet_SelectionChange jusqu'à End Sub ?
Re : Optimiser ma liste déroulante créée avec un ComboBox
Re,
Pour le problème ci-dessous, il s'agissait du nom de la listeBox qui n'était pas à jour dans mon fichier perso...
L'autre 2ème soucis, mais j'étais loin d'avoir adapté l'ensemble du code à mon fichier perso....il m'est demandé de déclarer la variable listeNoms sous :
Private Sub UserForm_Initialize()
ListeNoms.ListIndex = -1
Pourtant, dans mes options VB sous Outils, il n'est pas coché "Déclarer des variables obligatoires"...!!!
Re : Optimiser ma liste déroulante créée avec un ComboBox
Re,
Je crois que c'est bon désormais, j'ai pu appliquer la listeBox et le code à mon fichier perso,
C'était loin d'être évident pour moi, car j'ai galéré à faire afficher le nom défini dans la listeBox (celle-ci était totalement vide et je ne comprenais pas)....finalement, j'avais oublié d'indiquer le nom défini dans les propriétés de la listeBox sous RowSource
Et pour le message "Mémoire Insuffisante", il n'apparaît plus par enchantement....!!!
- 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