validation TextBox suivant ComboBox

  • Initiateur de la discussion Initiateur de la discussion cathodique
  • 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 !

cathodique

XLDnaute Barbatruc
Bonjour,

Pour illustre mon problème j'ai fait ce fichier joint très simplifié. Je voudrai faire une sorte de validation de données dans mon userform, c-à-d si la textBox est vide, on ne pourra saisir que certaines valeurs et ce suivant le contenu de la comboBox. les conditions sont les suivantes:

1- si combobox1=A alors textbox1 ne doit accepter que PPTC, PPT

2- si combobox1=B alors textbox1 ne doit accepter que PCTE, SPT, ADF

3- si combobox1=C ou D ou E alors textbox1 ne doit accepter que PC, PP, PA

je n'ai mis que quelques valeurs que peut prendre la textBox pour simplifier.

J'ai pensé à un select case, mais je ne m'en sors pas. je fais donc appel à votre précieuse aide en vous remerciant.
Code:
Private Sub UserForm_Initialize()

ComboBox1.AddItem "A"
ComboBox1.AddItem "B"
ComboBox1.AddItem "C"
ComboBox1.AddItem "D"
ComboBox1.AddItem "E"

Select Case outil

End Select

End Sub
 

Pièces jointes

Re : validation TextBox suivant ComboBox

Bonsoir,
Voici ce que je te propose:
Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim A(): A = Array("PPTC", "PPT")
Dim B(): B = Array("PCTE", "SPT", "ADF")
Dim C(): C = Array("PC", "PP", "PA")
Dim s()
Select Case ComboBox1
Case Is = "A"
s = A
Case Is = "B"
s = B
Case Is = "C"
s = C
End Select
For i = LBound(s) To UBound(s)
If TextBox1.Text = s(i) Then Exit Sub
Next
TextBox1.Text = ""
End Sub

Private Sub UserForm_Initialize()
Dim A(): A = Array("PPTC", "PPT")
Dim B(): B = Array("PCTE", "SPT", "ADF")
Dim C(): C = Array("PC", "PP", "PA")

ComboBox1.AddItem "A"
ComboBox1.AddItem "B"
ComboBox1.AddItem "C"
ComboBox1.AddItem "D"
ComboBox1.AddItem "E"

Select Case outil
End Select
End Sub

A+
 
Re : validation TextBox suivant ComboBox

Bonsoir fhoest,

je te remercie beaucoup pour ton aide. Ton code semble bien fonctionner, Bravo.

Pourrait-on ajouter un message pour avertir l'utilisateur qu'il a effectué une mauvaise saisie?

Et une autre question concernant ces lignes de code à l'initialisation de l'userform, est-ce qu'on déclare un tableau et on affecte des valeurs en une seule ligne?
Code:
Dim A(): A = Array("PPTC", "PPT")
Dim B(): B = Array("PCTE", "SPT", "ADF")
Dim C(): C = Array("PC", "PP", "PA")

Merci beaucoup. Bonne soirée.

Cordialement,
 
Re : validation TextBox suivant ComboBox

Bonsoir Job75,

Je te remercie beaucoup pour ton fichier, il fonctionne parfaitement bien. Comme je l'ai signalé dans mon premier post, j'ai juste fait un fichier pour illustrer mon souci.

Sur mon fichier original, l'userform me sert pour corriger des erreurs dans une base de données. En cliquant sur un bouton, j'insére une nouvelle ligne dans la bd, la combobox garde la même valeur et d'autres textbox aussi, il n'y a la textbox1 qui est vide et c'est celle-ci qui doit prendre la valeur suivant la combobox1.

N'étant pas très à l'aise avec le VBA, je ne voudrai pas trop tripoter mon code. Je te remercie pour ton exemple, je le mets en lieu sûr, je suis sûr que j'en aurai besoin.

merci beaucoup. Bonne soirée.

Cordialement,
 
Re : validation TextBox suivant ComboBox

Bonsoir,
pour le message mettre:
Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim A(): A = Array("PPTC", "PPT")
Dim B(): B = Array("PCTE", "SPT", "ADF")
Dim C(): C = Array("PC", "PP", "PA")
Dim s()
Select Case ComboBox1
Case Is = "A"
s = A
Case Is = "B"
s = B
Case Is = "C"
s = C
End Select
For i = LBound(s) To UBound(s)
If TextBox1.Text = s(i) Then Exit Sub
Next
TextBox1.Text = "": msgbox "le message",vbinformation
End Sub
Et pour la question,
oui on déclare un tableau on peut aussi mettre si c'est toujours du texte dim a() as string (et les autres aussi)
sur la même ligne car j'ajoute un ":" qui sépare les instructions ensuite après la déclaration on met Array(.....)pour déclarer les valeurs du tableau en séparant par une virgule.
A bientôt.
 
[RESOLU]: validation TextBox suivant ComboBox

Re fhoest,

Toute ma gratitude, c'est parfait. merci beaucoup pour ton code et tes explications. J'ai bien fait de te poser la question car moi j'ai fait ceci
Code:
For i = LBound(s) To UBound(s)
If TextBox1.Text = s(i) Then 
msgbox "ne correspond à cet outil", vbinformation
Exit Sub
end if
Next

Encore merci. Bonne soirée.
 
Re : [RESOLU]: validation TextBox suivant ComboBox

Bonjour,

J'ai complèté le code de Fhoest pour traiter les autres cas, ça fonctionne bien mais comment réécrire le code afin de traiter les cas B, C et D car pour ces derniers les valeurs sont les mêmes. en vous remerciant beaucoup.
Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim A(): A = Array("PPTC", "PPT")
Dim B(): B = Array("PCTE", "SPT", "ADF")
Dim C(): C = Array("PC", "PP", "PA")
Dim D(): D = Array("PC", "PP", "PA")
Dim E(): E = Array("PC", "PP", "PA")

Dim s()
Select Case ComboBox1
Case Is = "A"
s = A
Case Is = "B"
s = B
Case Is = "C"
s = C
Case Is = "D"
s = D
Case Is = "E"
s = E
End Select
For i = LBound(s) To UBound(s)
If UCase(TextBox1.Text) = s(i) Then Exit Sub
Next
TextBox1.Text = "": MsgBox "ne correspond à cet outil!", vbInformation
End Sub
 
Re : validation TextBox suivant ComboBox

bonjour tous 🙂🙂🙂🙂
tu peus simplifier comme cela mais bon le code de l'ami JOB 🙂 bien plus simple a mon avis

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Dim A, B, C, D, E, S, i
 A = Array("PPTC", "PPT")
 B = Array("PCTE", "SPT", "ADF")
 C = Array("PC", "PP", "PA")
 Select Case ComboBox1
 Case Is = "A": S = A
 Case Is = "B": S = B
 Case Is = "C", "D", "E": S = C
 End Select
 For i = LBound(S) To UBound(S)
 If UCase(TextBox1.Text) = S(i) Then Exit Sub
 Next
 TextBox1 = "": MsgBox "ne correspond à cet outil!", vbInformation
End Sub
Private Sub UserForm_Initialize()
 ComboBox1.List = Array("A", "B", "C", "D", "E")
End Sub
 
Re : validation TextBox suivant ComboBox

Bonsoir à tous,
désolé pour le retard:
Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim A(): A = Array("PPTC", "PPT")
Dim B(): B = Array("PCTE", "SPT", "ADF")
Dim C(): C = Array("PC", "PP", "PA")
Dim D(): D = C: Dim E(): E = D
Dim s()
Select Case ComboBox1
Case Is = "A"
s = A
Case Is = "B"
s = B
Case Is = "C", "D", "E"
s = C
End Select
For i = LBound(s) To UBound(s)
If UCase(TextBox1.Text) = s(i) Then Exit Sub
Next
TextBox1.Text = "": MsgBox "ne correspond à cet outil!", vbInformation
End Sub
voici ce que j'ai a te proposer,bien sûr les autres codes sont aussi bon et peut être mieux je ne sais pas je n'ai pas regardé.
C'est à toi de choisir
A+😉
 
[RESOLU] : validation TextBox suivant ComboBox

Bonsoir Laetitia90,

C'est parfait et je t'en remercie beaucoup. En effet, le code de l'ami JOB🙂et bien plus simple. Ne maitrisant pas bien le VBA, j'ai peur de bousiller tout le travail que j'ai fait. Si en remplaçant textbox par combobox ne change pas grand chose au code c'est bon, sinon je me contente de ce que j'ai. je ferai un peu plus tard un test sur une copie. Mais pour le moment, je dois avancer.

Encore merci. Bonne soirée.

Cordialement,
 
Re : validation TextBox suivant ComboBox

salut

peu de cas donc de façon triviale :
Code:
Option Compare Text 'pour autoriser les minuscules sinon supprimer
Private Sub UserForm_Initialize()
  ComboBox1.List = Array("A", "B", "C", "D", "E")
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Select Case ComboBox1.ListIndex
    Case 0: If TextBox1 = "PPTC" Or TextBox1 = "PPT" Then Exit Sub
    Case 1: If TextBox1 = "PCTE" Or TextBox1 = "SPT" Or TextBox1 = "ADF" Then Exit Sub
    Case Is > 1: If TextBox1 = "PC" Or TextBox1 = "PP" Or TextBox1 = "PA" Then Exit Sub
  End Select
  MsgBox "Pas autorisée !", 16, "Saisie invalidée...": TextBox1.Text = "": Cancel = -1
End Sub
 

Pièces jointes

Re : validation TextBox suivant ComboBox

Bonjour SI,

Je te remercie beaucoup d'avoir répondu à mon post. Ton code ne permet la sélection dans la combobox qu'une seule fois.

c-à-d si je fais une première sélection (ex:A) et saisie quelque chose dans textbox (donnée valide ou non), on ne peut plus faire de sélection dans la combobox (toupie inactive).

Merci. bonne journée.
 
Re : validation TextBox suivant ComboBox

Bonjour cathodique, le fil,

Pas certain que vous ayez vu l'intérêt d'une ComboBox, avez-vous bien testé mon fichier du post #3 ?

En particulier, il est très facile d'éviter qu'on y entre des données autres que celles de sa liste.

A+
 
- 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
3
Affichages
900
Réponses
4
Affichages
752
Retour