Comment déclencher plusieurs if en même temps???

Bonjour à tous les mordus de VBA

Voilà, je suis en train de suivre le tuto sur les contrôles (exercice) ici : https://www.excel-pratique.com/fr/vba/controles_exercice.php

Cette exercice consiste à créer un userform permettant de remplir un tableau. Je l'ai compris et terminé.

Cependant j'aimerai savoir comment afficher plusieurs labels en rouge mais en même temps. Je m'explique :

Cette partie du code n'affiche que 1 SEUL des label en rouge à la fois :

 'Contrôles de contenu
    If TextBox_Nom.Value = "" Then 'SI pas de "nom" ...
        Label_Nom.ForeColor = RGB(255, 0, 0) 'Label "nom" en rouge
    ElseIf TextBox_Prenom.Value = "" Then
        Label_Prenom.ForeColor = RGB(255, 0, 0)
    ElseIf TextBox_Adresse.Value = "" Then
        Label_Adresse.ForeColor = RGB(255, 0, 0)
    ElseIf TextBox_Lieu.Value = "" Then
        Label_Lieu.ForeColor = RGB(255, 0, 0)
    ElseIf ComboBox_Pays.Value = "" Then
        Label_Pays.ForeColor = RGB(255, 0, 0)

Ce qui donne :

ajouter contact

Le problème c'est que si plusieurs texbox sont vides seuls un des labels à la fois est en rouge :

ajouter

Moi je souhaiterai que tous les labels de toutes les texbox vides soient en rouge.

Avez vous une solution? Merci d'avance

Bonjour,

Remet également si rempli

 'Contrôles de contenu
 Dim R As Long
    R = 255
    Label_Nom.ForeColor = IIf(TextBox_Nom.Value = "", R, 0)
    Label_Prenom.ForeColor = IIf(TextBox_Prenom.Value = "", R, 0)
    Label_Adresse.ForeColor = IIf(TextBox_Adresse.Value = "", R, 0)
    TextBox_Lieu.ForeColor = IIf(TextBox_Lieu.Value = "", R, 0)
    Label_Pays.ForeColor = IIf(ComboBox_Pays.Text = "", R, 0)

A+

Salut,

Selon moi, avec le code que tu proposes, le fait de trouver un TextBox vide en premier exclu tous les autres contrôles.

Essai de placer un contrôle individuel pour chacun des TextBox :

If TextBox_Nom.Value = "" Then 'SI pas de "nom" ...
Label_Nom.ForeColor = RGB(255, 0, 0) 'Label "nom" en rouge
End if

If TextBox_Prénom.Value = "" Then 'SI pas de "prénom" ...
Label_Nom.ForeColor = RGB(255, 0, 0) 'Label "prénom" en rouge
End if

'Etc.

EDIT : Salut Lermite, ta solution semble bien plus simple

Cordialement.

Bonjour Yvouille,

J'avais d'abord commencé comme toi, puis je me suis dis.. mais si rempli ? reste en rouge ! d'où ma deuxième solution.

Cdlt.

Bonjour les amis,

Tout d'abord merci pour vos réponses.

En effet yvouille, j'ai pensé faire comme tu as suggéré mais le problème c'est que voici ma structure complète ( simplifiée) :

Private Sub CommandButton_Ajouter_Click()

'colorer les labels en noir par défaut ( j'ai rajouté le gras) , ie : même après avoir été mis en rouge les labels redeviennent noirs
Label1.ForeColor = RGB(0, 0, 0)
Label1.Font.Bold = False
Label2.ForeColor = RGB(0, 0, 0)
Label2.Font.Bold = False
Label3.ForeColor = RGB(0, 0, 0)
Label3.Font.Bold = False
Label4.ForeColor = RGB(0, 0, 0)
Label4.Font.Bold = False
Label5.ForeColor = RGB(0, 0, 0)
Label5.Font.Bold = False
Label6.ForeColor = RGB(0, 0, 0)
Label6.Font.Bold = False

'si les cases ne sont pas remplies au moment ou on clique alors on fait tout ça :

'Contrôles de contenu
   If TextBox_Nom.Value = "" Then 'SI pas de "nom" ...
       Label_Nom.ForeColor = RGB(255, 0, 0) 'Label "nom" en rouge
   ElseIf TextBox_Prenom.Value = "" Then
        Label_Prenom.ForeColor = RGB(255, 0, 0)
    ElseIf TextBox_Adresse.Value = "" Then
        Label_Adresse.ForeColor = RGB(255, 0, 0)
    ElseIf TextBox_Lieu.Value = "" Then
        Label_Lieu.ForeColor = RGB(255, 0, 0)
    ElseIf ComboBox_Pays.Value = "" Then
        Label_Pays.ForeColor = RGB(255, 0, 0)

'sinon on rempli le tableau avec toutes les valeurs  
    else

'ici se trouve le code pour remplir le tableau

Par conséquant, je ne peux pas mettre plusieur if car je ne dois avoir qu'un seul else.

Je vais essayer ce que tu as écris lermite. Par contre je ne connais pas la structure

IIf(TextBox_Nom.Value = "", R, 0)

lol

J'ai regardé l'explication dans l'aide de vba , mais si je comprend bien on ne peut mettre qu'un paramètre avec ca? ie

rgb(150,50,9)

ne marcherai pas non ?

Si...

    R = Rgb(150,50,9)

Et ta demande initiale ne parle pas de "Bold"

Essaye cette structure sur ton UF

Private Sub TextBox_Nom_AfterUpdate()
    Couleur
End Sub

Private Sub TextBox_Prenom_AfterUpdate()
    Couleur
End Sub
'Mettre idem pour les autre TextBox

Private Sub UserForm_Initialize()
    Couleur
End Sub

Sub Couleur()
 'Contrôles de contenu
 Dim R As Long
    R = Rgb(150,50,9)
    Label_Nom.ForeColor = IIf(TextBox_Nom.Value = "", R, 0)
    Label_Prenom.ForeColor = IIf(TextBox_Prenom.Value = "", R, 0)
    Label_Adresse.ForeColor = IIf(TextBox_Adresse.Value = "", R, 0)
    Label_Lieu.ForeColor = IIf(TextBox_Lieu.Value = "", R, 0)
    Label_Pays.ForeColor = IIf(ComboBox_Pays.Text = "", R, 0)
End Sub

N'existe t il pas un moyen à l'instar de :

For Each OptionButton In Frame1.Controls
        If OptionButton.Value Then
            civ = OptionButton.Caption
        End If
    Next

De parcourir tous les élément de l'userform et ainsi de verifier si tout est rempli et/ou true ??


Ok déjà je vais essayer ce que tu m'as expliqué.

Apparemment tu ne te donne même pas la peine de tester ce que l'ont te suggère, tu t'évertue directement à penser autre chose.

Alors, en ce qui me concerne...

Si si si excuse moi , je me posais juste plein de questions en même temps désolé je ne voulais pas te vexer

( nb: pour le bold pas de soucis je ne l'ai pas mentionné dans ma question car je supposais que si le problème de la couleur était résolu, il suffirait de rajouter l'instruction pour mettre en bold en utilisant la même méthode)

J'ai donc bien testé ce que tu m'as suggéré et ça marche parfaitement Merci beaucoup pour votre aide les amis. Vous êtes supers

La question pour le for each , c'est pour encore + simplifier le code. Je me disais que si on pouvais faire tout ça avec juste un for each le code serait plus court. Qu'en penses tu? Est ce faisable?

ced_le_dingue a écrit :

La question pour le for each , c'est pour encore + simplifier le code. Je me disais que si on pouvais faire tout ça avec juste un for each le code serait plus court. Qu'en penses tu? Est ce faisable?

Faisabe.. oui, mais ce système va passer TOUT les contrôles en revue et je n'en vois pas l'utilité dans ce contexte, sino je te l'aurais proposer.

A+

Ok, merci pour ton aide c'est sympa à bientot

merde ma réponse n'apparait pas. Bref je disais ok , merci encore pour ton aide qui m'a été précieuse je t'en remercie beaucoup.

à bientot

Rechercher des sujets similaires à "comment declencher meme temps"