XL 2019 clignoter label tant que texbox ne contient pas le bon nombre de caractères

PETIT YANNICK

XLDnaute Occasionnel
Bonjour,

Je souhaite faire clignoter label26 tant que texbox10 ne contient 3 caractères
Comment dois je procéder?
Merci de vos réponses

yannick
 

Pièces jointes

  • Products catalogue NRO.xlsm
    57.3 KB · Affichages: 13

patricktoulon

XLDnaute Barbatruc
bonjour
pour ton textbox6
VB:
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
 

Eric C

XLDnaute Barbatruc
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
 

PETIT YANNICK

XLDnaute Occasionnel
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
bonjour
pour ton textbox6
VB:
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

bonjour Eric,

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

Yannick
 

patricktoulon

XLDnaute Barbatruc
Bonjour
peut être que si tu enlevais le maxlength=5 dans les propriétés du textbox tu pourrais aller jusqu'a 9:p

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

;)
 

job75

XLDnaute Barbatruc
Bonjour PETIT YANNICK, patricktoulon, Eric C,

Le code dans Module2 du fichier joint :
VB:
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
Propriété MaxLength de TextBox6 à 9.

A+
 

Pièces jointes

  • Products catalogue NRO(1).xlsm
    52.4 KB · Affichages: 7
Dernière édition:

job75

XLDnaute Barbatruc
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
Fichier (2).
 

Pièces jointes

  • Products catalogue NRO(2).xlsm
    52.3 KB · Affichages: 9

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour le fil
Bonjour job75

@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
 

job75

XLDnaute Barbatruc
Comment dois je procéder pour faire clignoter également le label26 quand je saisies la textbox 10?
Fichier (3) avec :
VB:
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
 

Pièces jointes

  • Products catalogue NRO(3).xlsm
    48.7 KB · Affichages: 11

job75

XLDnaute Barbatruc
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
 

Eric C

XLDnaute Barbatruc
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.
 

Pièces jointes

  • Vérif que chaque TxtBox soit bien rempli New.xlsm
    20.9 KB · Affichages: 11

Discussions similaires

Réponses
16
Affichages
501
Réponses
14
Affichages
724
Réponses
18
Affichages
856

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren