Condition avec boucle dans un USF
Bonjour à tous,
Je bloque sur des conditions d’affichage de bouton dans mon userform.
Lors de l’ouverture du fichier cliquer sur afficher puis sur « requêtes ».
Ce que j’aimerai concernant le userform et que je n’arrive pas à faire (voir code du USF pour voir mes essais) :
- Lorsque toutes les textboxs sont remplies et blanches : j’affiche l’image 1 (bouton envoyer)
- Si toutes les textboxs sont remplies mais que le backColor d’au moins une est rouge (ce qui veut dire qu’on est hors de la gamme min et max) : j’affiche l’image 3 (imprimer)
- Si toutes les textboxs ne sont pas remplies : ne rien faire (n’afficher ni l’image 1, ni l’image 3)
C’est au niveau du code : « Sub boutonactif » dans l’USF que je me suis essayé. Pour ce qui est du label.caption et image 4 je me débrouillerai après, c’est en effet la boucle avec les conditions que je n’arrive pas à mettre en place….
Merci beaucoup
Bonjour,
Function Test() As Boolean
Test = False
For n = 1 To 12
If Me.Controls("TextBox" & n).BackColor = RGB(255, 255, 255) Then
Test = False
Exit For
Else
Test = True
End If
Next n
End Function
If Test then ...j’affiche l’image 1 (bouton envoyer)
@+JP
Bonjour mjpmjp,
Mis à part que tu as la même chose que moi mais en passant par une fonction je comprends pas trop le sens de la réponse ?
C'est "l'emboîtement" des conditions du code qui me cause problème malheureusement
Si tu as quelques précisions n'hésite pas
Bonne journée
EDIT : Je fais un truc en passant par plusieur test et en vérifiant la réponse (true ou false) de chaque test ! Merci mjpmjp ça m'a donné une nouvelle piste de réflexion
Je suis passé par ici :
Function Test_rempli() As Boolean
Dim n%
Test_rempli = False
For n = 1 To 19
If Me.Controls("TextBox" & n) = "" Then
Test_rempli = False
Exit For
Else
Test_rempli = True
End If
Next n
End Function
Function Test_blanc() As Boolean
Dim n%
Test_blanc = False
For n = 4 To 12
If Me.Controls("TextBox" & n).BackColor = RGB(255, 255, 255) Then
Test_blanc = True
Exit For
Else
Test_blanc = False
End If
Next n
End Function
Function Test_rouge() As Boolean
Test_rouge = False
If TextBox4.BackColor = RGB(204, 0, 0) _
Or TextBox5.BackColor = RGB(204, 0, 0) _
Or TextBox6.BackColor = RGB(204, 0, 0) _
Or TextBox7.BackColor = RGB(204, 0, 0) _
Or TextBox8.BackColor = RGB(204, 0, 0) _
Or TextBox9.BackColor = RGB(204, 0, 0) _
Or TextBox10.BackColor = RGB(204, 0, 0) _
Or TextBox11.BackColor = RGB(204, 0, 0) _
Or TextBox12.BackColor = RGB(204, 0, 0) Then
Test_rouge = True
Else
Test_rouge = False
End If
End Function
Sub BoutonActif()
If Test_rempli = True And Test_blanc = True Then
Me.Image1.Visible = True
Me.Label69.Caption = "Envoyez la requête"
ElseIf Test_rempli = True And Test_rouge = True Then
Me.Image3.Visible = True
Me.Image4.Visible = True
Me.Label69.Caption = "Besoin d'une validation du Chef d'équipe"
Else
Me.Image1.Visible = False
Me.Image1.Visible = False
Me.Image1.Visible = False
Me.Label69.Caption = "Renseignez tous les champs"
End If
End Sub
Ainsi, je contrôle les 3 conditions : Tout est Blanc, tout est rempli, au moins une TxtBox est rouge. Et dans la dernière Sub, je regarde les réponses des tests. Cependant, tout fonctionne bien pour le test_rempli et test_blanc mais pour ce qui est du test_rouge (ElseIf) de ma boucle, ça ne fonctionne pas :S
Edit : En fait il ne comprend pas les "Or" de mon test_rouge : Toutes les Txtbox doivent être passées en rouge pour que cela fonctionne, je continue de creuser le pb
Re-bonjour,
Désolé je continue mon petit monologue, mais j'ai réussi en intervertissant ce qui avait dans le IF et dans le ELSEIF et ça fonctionne.. Si quelqu'un a la réponse franchement ça m'intéresserai beaucoup car je n'ai aucune explication..
Merci à tous ceux qui ce sont intéressés
Bonjour,
dans la fonction j'ai utilisé RGB(255, 255, 255) en croyant que c'était le rouge
en fait il faut changer avec RGB(204, 0, 0)
en fait tu fais déjà le test si la réponse est ok pour chaque TextBox
donc si on regarde uniquement la couleur de chaque TextBox on sait si c'est ok ou pas
la fonction teste si il y a une couleur rouge ,
mais il est vrai que il y a un problème , c'est que les textbox vides sont blanches aussi
il faudrait une couleur presque blanche pour indiquer
que la textbox à reçu un contenu et qu'il était valide : RGB(255, 255, 254)
dans ce cas on peut alors chercher une textbox qui n'est pas de couleur RGB(255, 255, 254)
Function Test() As Boolean
Test = False
For n = 1 To 12
If Me.Controls("TextBox" & n).BackColor = RGB(255, 255, 254) Then
Test = True
Else
Test = False
Exit For
End If
Next n
End Function
l'appel IF Test then ...change image
ce fait dans chaque événement exit par exemple
quand tu charges le form ,
toutes tes textbox sont blanches
si tu réinitialises sans recharger , penses à les mettre en blanc
@+JP
Re-Bonjour mjpmjp,
J'ai bien réussi à tout mettre bien
Merci pour ton aide et d'avoir pris le temps de jeter un oeil. Tu m'as bien débloqué en me faisant passer par les fonctions (qui lorsqu'on emboîte le tout; c'est tout de suite beaucoup plus compréhensible).
Merci et bonne journée mjpmjp