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

16pb.xlsm (189.70 Ko)

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 C'est à dire, vérifier la couleur et le fait que tout est bien rempli etc

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 Ouaip mais je les passe en Blanc à l'init donc c'est nickel !! Trop 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

Rechercher des sujets similaires à "condition boucle usf"