Limiter la saisie d'une combobox

  • Initiateur de la discussion Initiateur de la discussion Geraldine
  • Date de début Date de début

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 !

Geraldine

XLDnaute Occasionnel
Bonjour,

Dans une combobox, je voudrais limiter les possibilités de saisie et autoriser uniquement

- chiffre
- le point du clavier numerique

et interdire
- Lettre et caractère du genre $ £ & * etc ..


merci à tous, géraldine
 
Re : Limiter la saisie d'une combobox

re pierrot93, c'est presque ça

Le problème c'est que il n'accepte plus le point du pave num, que faire pour qu'il l'accepte. Lui faire croire que c'est une virgule ?

et mon deuxieme problème
un extrait de ma liste 1,00 / 1,50 / 2,00 / 2,50 etc ... jusqu'a 60,00
Si je tape par erreur 100 .... bug puisque pas dans la liste

Que faire est ce que ma seule solution est de forcer la selection dans la combobox et non autoriser une saisie ?

@
 
Re : Limiter la saisie d'une combobox

Re,
Salut Pierrot,
Et avce :
Code:
Me.TextBoxT2.Value = CDbl(Replace(TextBoxQ2.Value, ".", ",")) * CDbl(Replace(TextBoxP2.Value, ".", ","))
?
en conservant la première version du code de Super Pierrot.

Cordialement
 
Re : Limiter la saisie d'une combobox

Re,

J'ai oublié :
et mon deuxieme problème
un extrait de ma liste 1,00 / 1,50 / 2,00 / 2,50 etc ... jusqu'a 60,00
Si je tape par erreur 100 .... bug puisque pas dans la liste
Normalement avec la propriété MatchRequired = false de ton combo ça devrait fonctionner, si j'ai bien compris la question.

Cordialement
 
Re : Limiter la saisie d'une combobox

Bonjour à tous!!

Je reviens avec ma solution que j'ai testée et qui à priori devrait fonctionner chez toi.

Utilise Val(Textbox.value) pour être sûre qu'il prenne des valeurs numériques comme suit.

A+

Private Sub ComboBox1_Change()
If Not IsNumeric(ComboBox1.Value) Then
saisie = Left(ComboBox1.Value, Len(ComboBox1.Value) - 1)
ComboBox1.Value = saisie
End If

Dim Lig As Integer
Lig = Me.ComboBox1.ListIndex
Me.TextBoxP1.Value = ShtC.Range("A" & 7 + Lig + 1).Value
Me.TextBoxQ2.Value = ShtC.Range("I6").Value
Me.TextBoxP2.Value = ShtC.Range("A" & 7 + Lig + 1).Value
Me.TextBoxT2.Value = val(Me.TextBoxQ2.Value) * val(Me.TextBoxP2.Value)
Me.TextBoxQ3.Value = ShtC.Range("J6").Value
Me.TextBoxP3.Value = ShtC.Range("A" & 7 + Lig + 1).Value
Me.TextBoxT3.Value = val(Me.TextBoxQ3.Value) * val(Me.TextBoxP3.Value)
Me.TextBoxP10.Value = val(Me.TextBoxP1.Value) / 6.55957
TextBoxP10 = Format(TextBoxP10.Value, "#,##0.00")
Me.TextBoxP20.Value = val(Me.TextBoxP2.Value) / 6.55957
TextBoxP20 = Format(TextBoxP20.Value, "#,##0.00")
Me.TextBoxP30.Value = val(Me.TextBoxP3.Value) / 6.55957
TextBoxP30 = Format(TextBoxP30.Value, "#,##0.00")
'Me.TextBoxT10.Value = val(Me.TextBoxT1.Value) / 6.55957
'TextBoxT10 = Format(TextBoxT10.Value, "#,##0.00")
Me.TextBoxT20.Value = val(Me.TextBoxT2.Value) / 6.55957
TextBoxT20 = Format(TextBoxT20.Value, "#,##0.00")
Me.TextBoxT30.Value = val(Me.TextBoxT3.Value) / 6.55957
TextBoxT30 = Format(TextBoxT30.Value, "#,##0.00")
Me.TextBoxM2.Value = ShtC.Range("B" & 7 + Lig + 1).Value
TextBoxM2 = Format(TextBoxM2.Value, "#,##0.00")
End Sub
 
Re : Limiter la saisie d'une combobox

Spitnolan08 > c'etait bien sur false

et smothy > erreur de compilation

Private Sub ComboBox1_Change()
If Not IsNumeric(ComboBox1.Value) Then
saisie = Left(ComboBox1.Value, Len(ComboBox1.Value) - 1) erreur de compilation
ComboBox1.Value = saisie
End If

Je vais faire une pause sur le topic, reprendre tout ça, faire des essais externe à mon application. Autrement vous allez perdre votre après midi, et je prefere faire un exemple que je met en ligne et on travaille ensemble dessus. Merci à vous et à vos contributions généreuses.
Amicalement, géraldine
 
Re : Limiter la saisie d'une combobox

Salut à tous et aux autres,

Si tu veux calculer, il faut le faire avec des nombres !
Essaie :
Code:
Private Sub ComboBox1_Click()
Dim Lig As Integer
Lig = Me.ComboBox1.ListIndex
Me.TextBoxP1.Value = Sheets(2).Range("A" & 7 + Lig + 1).Value
Me.TextBoxQ2.Value = Sheets(2).Range("I6").Value
Me.TextBoxP2.Value = Sheets(2).Range("A" & 7 + Lig + 1).Value
Me.TextBoxT2.Value = [COLOR=Red]Val(Me.TextBoxQ2.Value) * Val(Me.TextBoxP2.Value)[/COLOR]
Me.TextBoxQ3.Value = Sheets(2).Range("J6").Value
Me.TextBoxP3.Value = Sheets(2).Range("A" & 7 + Lig + 1).Value
Me.TextBoxT3.Value = Val(Me.TextBoxQ3.Value) * Val(Me.TextBoxP3.Value)
Me.TextBoxP10.Value = Val(Me.TextBoxP1.Value) / 6.55957
TextBoxP10 = Format(TextBoxP10.Value, "#,##0.00")
Me.TextBoxP20.Value = Val(Me.TextBoxP2.Value) / 6.55957
TextBoxP20 = Format(TextBoxP20.Value, "#,##0.00")
Me.TextBoxP30.Value = Val(Me.TextBoxP3.Value) / 6.55957
TextBoxP30 = Format(TextBoxP30.Value, "#,##0.00")
'Me.TextBoxT10.Value = Me.TextBoxT1.Value / 6.55957
'TextBoxT10 = Format(TextBoxT10.Value, "#,##0.00")
Me.TextBoxT20.Value = Val(Me.TextBoxT2.Value) / 6.55957
TextBoxT20 = Format(TextBoxT20.Value, "#,##0.00")
Me.TextBoxT30.Value = Me.TextBoxT3.Value / 6.55957
TextBoxT30 = Format(TextBoxT30.Value, "#,##0.00")
Me.TextBoxM2.Value = Sheets(2).Range("B" & 7 + Lig + 1).Value
TextBoxM2 = Format(TextBoxM2.Value, "#,##0.00")
End Sub
Et pour la première partie (saisie décimale avec le point) :
Code:
If Not IsNumeric(ComboBox1.Value) Then
  saisie = Left(ComboBox1.Value, Len(ComboBox1.Value) - 1)
  Application.EnableEvents = False
  If ComboBox1 = "." Then ComboBox1.Value = saisie
  Application.EnableEvents = True
End If
 
Dernière édition:
Re : Limiter la saisie d'une combobox

Re

regarde le code ci dessous, fait 2 choses

1/ si tu tapes un point le transforme en virgule
et ensuite
2/ controle que le caractère saisi (donc le caractère transformé) soit bien autorisé.

Code:
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'transforme le "point" en "virgule"
If KeyAscii = 46 Then KeyAscii = 44
'n'autorise que la saisie des caractères 0 à 9 ainsi que la virgule
If InStr("0123456789,", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

@+
 
Re : Limiter la saisie d'une combobox

Excel_lent > ça marche pas, le fait de taper le point, il dit c'est pas dans ma liste ... donc valeur fausse

Pierrot93 > c'est une simple et bonne idée, de transformer le . en , ça fonctionne presque bien, ça me donne une saisie automatique.
Mais la saisie automatique je veux la bloquer uniquement à ma liste, en aucun cas nous devons inserer une valeur autre que la liste, je m'explique.
Ma liste 1,00 / 1,50 (2 chiffres après la virgule) etc .... ma combobox, elle me donne 1 / 1,5 etc ... donc si par erreur je tape 1,0 .... Valeur de propriété non valide.
J'aimerais bien que ma combobox soit un peu plus compréhensive. Et ni

@
 
Re : Limiter la saisie d'une combobox

Re

je crois bien que si tu utilises la propriété "MatchRequired", il ne faille obligatoirement selectionner une entrée dans la liste, cf ci dessous une remarque de l'aide vba :

Remarques
Si valeur de la propriété MatchRequired est True, l'utilisateur ne peut pas quitter le contrôle ComboBox tant que le texte saisi ne correspond pas à une entrée de la liste existante. MatchRequired maintient l'intégrité de la liste en exigeant de l'utilisateur qu'il sélectionne une entrée existante.

@+
 
Re : Limiter la saisie d'une combobox

je vais essayer "MatchRequired" True et je reviens sur ce Excel-Lent, je pense qu'il faut effectivement modifier

Me.TextBoxT2.Value = Val(Me.TextBoxQ2.Value) * Val(Me.TextBoxP2.Value)

avec toutes mes excuses Excel-Lent, c'est excellent, tes arguments ..

et merci à vous tous, je vais tester.

Amicalement Géraldine
 
Re : Limiter la saisie d'une combobox

Re,

C'est bien tout cela gente dame, mais connoissez vous l'heure du postage de votre document de travail ?

Car comme vous le préconisiez prestement tout à l'heure, il serait d'une grande utilité...

Pour le Match Required = True il interdit la saisie de données autres que celles de la liste, mais j'avais cru comprendre que c'était l'inverse que tu voulais tout à l'heure???

Bien cordialement
 
Re : Limiter la saisie d'une combobox

bonjour à tous,

En fait je pense que c'est un faut problème. L'utilité d'un combobox est justement de sélectionner une valeur dans une liste existante. Si j'ai bien compris, tu ne veux pas qu'il y ait d'autres valeurs que celles de la liste. Alors pourquoi s'embêter avec la gestion du point, de la virgule etc...
Si tu ne veux pas que les personnes saisissent autre chose que ce qui est dans la liste, il te suffit juste d'utiliser ce test dans l'évènement combobox1_Change:


If combobox1.listindex=-1 and trim(combobox1.value)<>"" then
msgbox "Merci de sélectionner une valeur dans la liste uniquement"
combobox1.value=""
end if


et donc revenir à l'utilité propore d'un combobox soit: sélectionner une valeur dans une liste déroulante. (simple mais efficace)

A+
 
Re : Limiter la saisie d'une combobox

Bonjour le fil,

Smotty est plein de sagesse, ce matin du moins 😉, et a parfaitement raison : Je ne mettrais même pas de message : soit le choix est fait par la liste soit il ne se passe rien...
Si tu le souhaites tu peut ajouter un ControltipText prévenant l'utilisateur : c'est plus doux qu'un MsgBox.

Bravo smotty.

Cordialement
 
- 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
37
Affichages
1 K
  • Question Question
Microsoft 365 Combobox
Réponses
6
Affichages
305
Réponses
5
Affichages
418
Retour