Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
XL 2019clignoter label tant que texbox ne contient pas le bon nombre de caractères
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 !
Private Sub TextBox6_Change()
'Renseignement N° ODM
Dim prefixe$
couleur = Array(vbYellow, vbRed)
With TextBox6
.BackColor = couleur(Abs(Not .BackColor = vbRed))
prefixe = "ODM-"
.Value = Mid(.Value, 1, 9)
If Mid(.Value, 1, Len(prefixe)) <> prefixe Then .Value = prefixe
If Not IsNumeric(Mid(.Value, Len(prefixe) + 1)) Then .Value = prefixe
If Len(.Value) >= 9 Then .BackColor = vbGreen
End With
CommandButton5.Enabled = TextBox1 <> "" And TextBox2 <> "" And TextBox4 <> "" And TextBox5 <> "" And Len(TextBox6) = 9 And TextBox7 <> "" And TextBox8 <> "" And Len(TextBox10) = 3
End Sub
Bonsoir le forum
Bonsoir PETIT YANNICK, bonsoir patricktoulon
@patrick : Concernant le CommandButton5.Enabled , ne peut-on exécuter une boucle sur les TextBoxs (suite non logique car 1,2,4,5,6,7,8 & 10) avec un "ARRAY" par exemple car le nombre ici est de 8 TextBoxs mais s'il y en avait 15,20 voire plus ????
@+ Eric c
Bonsoir le forum
Bonsoir PETIT YANNICK, bonsoir patricktoulon
@patrick : Concernant le CommandButton5.Enabled , ne peut-on exécuter une boucle sur les TextBoxs (suite non logique car 1,2,4,5,6,7,8 & 10) avec un "ARRAY" par exemple car le nombre ici est de 8 TextBoxs mais s'il y en avait 15,20 voire plus ????
@+ Eric c
Private Sub TextBox6_Change()
'Renseignement N° ODM
Dim prefixe$
couleur = Array(vbYellow, vbRed)
With TextBox6
.BackColor = couleur(Abs(Not .BackColor = vbRed))
prefixe = "ODM-"
.Value = Mid(.Value, 1, 9)
If Mid(.Value, 1, Len(prefixe)) <> prefixe Then .Value = prefixe
If Not IsNumeric(Mid(.Value, Len(prefixe) + 1)) Then .Value = prefixe
If Len(.Value) >= 9 Then .BackColor = vbGreen
End With
CommandButton5.Enabled = TextBox1 <> "" And TextBox2 <> "" And TextBox4 <> "" And TextBox5 <> "" And Len(TextBox6) = 9 And TextBox7 <> "" And TextBox8 <> "" And Len(TextBox10) = 3
End Sub
Merci pour la réponse mais ce n'est pas ceci qu'il me faudrait.
Je voudrais que Label 26 clignote tant textbox 6 soit renseigné complètement.
Le code renvoyer me bloque la saisie à 1 caractère
Bonjour peut être que si tu enlevais le maxlength=5 dans les propriétés du textbox tu pourrais aller jusqu'a 9😛
VB:
Private Sub TextBox6_Change()
'Renseignement N° ODM
Dim prefixe$
couleur = Array(vbYellow, vbRed)
With TextBox6
Me.Label6.ForeColor = couleur(Abs(Not Label6.ForeColor = vbRed))
prefixe = "ODM-"
.Value = Mid(.Value, 1, 9)
If Mid(.Value, 1, Len(prefixe)) <> prefixe Then .Value = prefixe
If Not IsNumeric(Mid(.Value, Len(prefixe) + 1)) Then .Value = prefixe
If Len(.Value) >= 9 Then Me.Label6.ForeColor = vbGreen
End With
CommandButton5.Enabled = TextBox1 <> "" And TextBox2 <> "" And TextBox4 <> "" And TextBox5 <> "" And Len(TextBox6) = 9 And TextBox7 <> "" And TextBox8 <> "" And Len(TextBox10) = 3
End Sub
Ah oui effectivement le problème vient de la. 😱
Pourrais tu détailler la fonctionnement du code?
Je n arrive pas a comprendre.
Je souhaiterais l appliquer à d autre cellule.
Merci.
Sub Lancer_formulaire()
UserForm1.Show vbModeless
Clignote 'lance le processus
End Sub
Sub Clignote()
Static t 'mémorise la variable
On Error Resume Next
Application.OnTime t, "Clignote", , False
If UserForms.Count = 0 Then Exit Sub
t = Now + 1 / 86400 'demi-période 1 seconde
Application.OnTime t, "Clignote"
With UserForm1
If Len(.TextBox6) < 9 Then .Label27.Visible = Not .Label27.Visible: .TextBox6.SetFocus
End With
End Sub
Le code dans l'UserForm :
VB:
Private Sub TextBox6_Change()
Dim x$, i%
x = TextBox6
x = "ODM-" & Replace(x, "ODM-", "")
For i = Len(x) To 5 Step -1
If Not IsNumeric(Mid(x, i, 1)) Then x = Left(x, i - 1) & Mid(x, i + 1)
Next
TextBox6 = x
End Sub
Avec le Timer la période du clignotement peut être diminuée, c'est mieux :
VB:
Sub Lancer_formulaire()
UserForm1.Show vbModeless
Clignote 'lance le processus
End Sub
Sub Clignote()
Dim t
With UserForm1
Do While UserForms.Count
DoEvents
If Len(.TextBox6) < 9 Then
.Label27.Visible = Not .Label27.Visible
.TextBox6.SetFocus
t = Timer + 0.5 'demi-période de 0,5 seconde
While Timer < t And t < 86400: DoEvents:: Wend
End If
Loop
End With
End Sub
Bonjour job 75,
Je n ai pas put essayer le fichier que vous avez fournis.
Merci pour le retour.
Comment dois je procéder pour faire clignoter également le label26 quand je saisies la textbox 10? Doit Arrêter de clignote après trois lettres saisies.
Merci
@job75 : Auriez-vous une solution au problème que j'évoquais ci-dessus à savoir :
VB:
CommandButton5.Enabled = TextBox1 <> "" And TextBox2 <> "" And TextBox4 <> "" And TextBox5 <> "" And TextBox7 <> "" And TextBox8 <> ""
-=- J'ai volontairement enlevé une partie des conditions qui peuvent être traitées à part -=-
Ma question : Concernant le CommandButton5.Enabled , ne peut-on exécuter une "boucle" sur les TextBoxs (suite non logique car 1,2,4,5,7 & 8) avec un "ARRAY" par exemple ??
Si les TextBoxs se suivent, il suffit d'une boucle mais dans le cas présent, il faut prendre une série de TextBoxs qui ne suivent pas et si tous sont renseignés alors le Bouton devient actif ?? Merci
Sub Clignote()
Dim t
With UserForm1
Do While UserForms.Count
t = Timer + 0.5 'demi-période de 0,5 seconde
While Timer < t And t < 86400: DoEvents:: Wend
If Len(.TextBox6) < 9 Then .Label27.Visible = Not .Label27.Visible
If Len(.TextBox10) < 3 Then .Label26.Visible = Not .Label26.Visible
Loop
End With
End Sub
Pour les 8 TextBoxes concernées j'ai simplifié le code dans le fichier (3) :
VB:
CommandButton5.Enabled = TextBox1 <> "" And TextBox2 <> "" And TextBox4 <> "" And TextBox5 <> "" And Len(TextBox6) = 9 And TextBox7 <> "" And TextBox8 <> "" And Len(TextBox10) = 3
Certe, le code est simplifié, semble t'il mais ne peut on pas "boucler" sur des TextBoxs qui ne se suivent pas ?
Exemple : (1 USF - 5 TextBoxs - 1 CommandButton avec sa propriété Enabled à False) - Pour m'assurer que TOUS les TextBoxs du UserForm sont remplis, je vais utiliser, le code suivant :
VB:
Sub VérifRemplissage()
Dim i As Byte
For i = 1 To 5
If Controls("TextBox" & i).Value = "" Then
CommandButton1.Enabled = False
Exit Sub
End If
Next i
CommandButton1.Enabled = True
End Sub
Private Sub TextBox1_change()
VérifRemplissage
End Sub
Private Sub TextBox2_change()
VérifRemplissage
End Sub
Private Sub TextBox3_change()
VérifRemplissage
End Sub
Private Sub TextBox4_change()
VérifRemplissage
End Sub
Private Sub TextBox5_change()
VérifRemplissage
End Sub
Ainsi, je peux ajouter du code (s'il le faut) dans chacun des TextBoxs. Une fois, tous les TextBoxs renseignés, le Bouton devient accessible. Si l'utilisateur revient sur l'un des TextBoxs et l'efface, le Bouton redevient inactif.
Ce que je désirerais : déclarer à l'activation du USF, les TextBoxs qui doivent être renseignés afin de "dire" si les TextBoxs 1, 3 & 4 (ou 2, 4 & 5... Enfin peu importe) sont renseignés alors Bouton ACTIF. Peut être dans un ARRAY ou un CASE ou ... J'ai beau chercher, je ne trouve pas.
- 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