Se connecter avec
S'enregistrer | Connectez-vous

mettre le fond des frames en rouge si toute les combobox vide

Dernière réponse : dans Programmation

bonjour à vous tous
pouvez vous m'aider à résoudre mon petit probléme
dés l'ouverture de mon userform1 je voudrais que le programme
méttre en rouge le fond des trois frame si un des combobox de l'userform1
est vide .
puis si les combobox sont tous remplis alors mettre les trois frame de couleur
vert



  1. Private Sub UserForm_Initialize()
  2.  
  3.  
  4. Dim ctrl As Control
  5.  
  6. For Each ctrl In Me.Controls
  7. 'je recherche que les controles de type combobox
  8. If TypeOf ctrl Is ComboBox Then
  9. 'si le controle est vide alors je sors de la boucle
  10. 'et j'empeche la fermeture de la form
  11. If ctrl.Text = "" Then
  12. Cancel = 1
  13. ' mettre les trois frame de l'userform1 en couleur rouge
  14. UserForm1.Frame1.BackColor = &HFF&
  15. UserForm1.Frame2.BackColor = &HFF&
  16. UserForm1.Frame3.BackColor = &HFF&
  17. Exit Sub
  18. End If
  19. End If
  20. Next ctrl
  21.  
  22.  
  23. End Sub


merci
Lassé par la pub ? Créez un compte
Expert Programmation

Beurk, c'est pô bô !!!
Regarde comme c'est bô, une fois correctement indenté :
  1. Private Sub UserForm_Initialize()
  2.  
  3. Dim ctrl As Control
  4.  
  5. For Each ctrl In Me.Controls
  6. ' // je recherche que les controles de type combobox
  7. If TypeOf ctrl Is ComboBox Then
  8. ' // si le controle est vide alors je sors de la boucle
  9. ' // et j'empeche la fermeture de la form
  10. If ctrl.Text = "" Then
  11. Cancel = 1
  12. ' // mettre les trois frame de l'userform1 en couleur rouge
  13. UserForm1.Frame1.BackColor = &HFF&
  14. UserForm1.Frame2.BackColor = &HFF&
  15. UserForm1.Frame3.BackColor = &HFF&
  16. Exit Sub
  17. End If
  18. End If
  19. Next ctrl
  20.  
  21. End Sub


Je ne vois pas où est le problème dans ce code, à part ça.

En fait, je te propose de raisonner autrement :
  • Détecter si tous sont remplis ou pas
  • Si tous sont remplis, mettre en Vert, sinon, mettre en Rouge

    Au lieu de mettre ça dans UserForm_Initialize, crée toi une fonction SontTousRemplis qui renvoie un booléen, et une procédure Coloriage qui colore soit en rouge soit, en vert en fonction de SontTousRemplis . Ensuite, appelle Coloriage dans UserFor_Initialise et dans tes ComboBoxN_Change. (Tu peux changer le nom des fonctions :whistle:  )

    Citation :
    Beurk, c'est pô bô !!!
    Regarde comme c'est bô, une fois correctement indenté :
    1. Private Sub UserForm_Initialize()
    2.  
    3. Dim ctrl As Control
    4.  
    5. For Each ctrl In Me.Controls
    6. ' // je recherche que les controles de type combobox
    7. If TypeOf ctrl Is ComboBox Then
    8. ' // si le controle est vide alors je sors de la boucle
    9. ' // et j'empeche la fermeture de la form
    10. If ctrl.Text = "" Then
    11. Cancel = 1
    12. ' // mettre les trois frame de l'userform1 en couleur rouge
    13. UserForm1.Frame1.BackColor = &HFF&
    14. UserForm1.Frame2.BackColor = &HFF&
    15. UserForm1.Frame3.BackColor = &HFF&
    16. Exit Sub
    17. End If
    18. End If
    19. Next ctrl
    20.  
    21. End Sub


    Je ne vois pas où est le problème dans ce code, à part ça.

    En fait, je te propose de raisonner autrement :
  • Détecter si tous sont remplis ou pas
  • Si tous sont remplis, mettre en Vert, sinon, mettre en Rouge

    Au lieu de mettre ça dans UserForm_Initialize, crée toi une fonction SontTousRemplis qui renvoie un booléen, et une procédure Coloriage qui colore soit en rouge soit, en vert en fonction de SontTousRemplis . Ensuite, appelle Coloriage dans UserFor_Initialise et dans tes ComboBoxN_Change. (Tu peux changer le nom des fonctions :whistle:  )



  • bonjour et merci de m'avoir répondu

    je n'arrive pas à trouver la solution
    mais j'ai une idée
    je souhaiterais que lorsque les céllules a6 jusqu'a a10 sont remplie dans un tableau qui se trouve sur la feuil1 du classeur
    que les trois frames de l'userform1 deviennent de couleur vert sinon rouge lorsque une des céllule sont non rempli

    merci zeb
    je continu à chercher avec ce que tu m'as proposer avant

    Après quelques tests chez moi, cela fonctionne par contre :

    - Qu'est ce que représente ta variable Cancel ?

    Si tu veux mettre en rouge pas besoin de se compliquer la vie en VBA les couleurs se code en base 10.
    Inutile de préciser le formulaire ou tu met Me à la place.
    1. Frame1.BackColor = 255 ' rouge vif
    2. Frame2.BackColor = 255
    3. Frame3.BackColor = 230 ' rouge plus zen


    le .text derrière ctrl est inutile le mieux c'est encore de rien préciser

    1. Private Sub UserForm_Initialize()
    2. Dim ctrl As Control
    3. For Each ctrl In Me.Controls
    4. ' // je recherche que les controles de type combobox
    5. If TypeOf ctrl Is ComboBox Then
    6. ' // si le controle est vide alors je sors de la boucle
    7. ' // et j'empeche la fermeture de la form
    8. If ctrl = "" Then
    9. 'Cancel = 1
    10. ' // mettre les trois frame de l'userform1 en couleur rouge
    11. Frame1.BackColor = 255
    12. Frame2.BackColor = 255
    13. Frame3.BackColor = 230
    14. Exit Sub
    15. End If
    16. End If
    17. Next ctrl
    18. End Sub

    novice_33 a dit :
    Après quelques tests chez moi, cela fonctionne par contre :

    - Qu'est ce que représente ta variable Cancel ?

    Si tu veux mettre en rouge pas besoin de se compliquer la vie en VBA les couleurs se code en base 10.
    Inutile de préciser le formulaire ou tu met Me à la place.
    1. Frame1.BackColor = 255 ' rouge vif
    2. Frame2.BackColor = 255
    3. Frame3.BackColor = 230 ' rouge plus zen


    le .text derrière ctrl est inutile le mieux c'est encore de rien préciser

    1. Private Sub UserForm_Initialize()
    2. Dim ctrl As Control
    3. For Each ctrl In Me.Controls
    4. ' // je recherche que les controles de type combobox
    5. If TypeOf ctrl Is ComboBox Then
    6. ' // si le controle est vide alors je sors de la boucle
    7. ' // et j'empeche la fermeture de la form
    8. If ctrl = "" Then
    9. 'Cancel = 1
    10. ' // mettre les trois frame de l'userform1 en couleur rouge
    11. Frame1.BackColor = 255
    12. Frame2.BackColor = 255
    13. Frame3.BackColor = 230
    14. Exit Sub
    15. End If
    16. End If
    17. Next ctrl
    18. End Sub



    bonjour freeman23
    merci de bien vouloir résoudre mes probléme tous comme zeb

    en fait je cherche à controler tous les combobox de l'userform2 s'il sont vide ou non
    alors s'il sont vide impossible de fermer l'userform un message apparait
    puis si les combobox sont tous plein alors userform3 ce ferme et apparait
    userform1 avec les trois frames ,ainsi comme on a compléter tous les combobox "de userform2"
    de cherche à mettre en vert les 3 frames .
    mais dans userform3 j'ai un deuxiéme bouton qui sert à fermer userform3 lorsque les combobox ne sont
    pas complet donc la je cherche a mettre en rouge les trois frames .

    pour mettre en vert lorsque les combobox sont plein ok ca marche
    mais pour mettre en rouge lorsque les combobox sont vide je n'arrive pas avec le 2éme bouton.

    peux tu m'aider à trouver la solution
    a++++
    Expert Programmation

    Citation :
    En fait, je te propose de raisonner autrement :
  • Détecter si tous sont remplis ou pas
  • Si tous sont remplis, mettre en Vert, sinon, mettre en Rouge

  • Ca ne te convient pas ?

    Citation :
    Citation :
    En fait, je te propose de raisonner autrement :
  • Détecter si tous sont remplis ou pas
  • Si tous sont remplis, mettre en Vert, sinon, mettre en Rouge

  • Ca ne te convient pas ?


  • salut merci pour ta réponse
    voici ce que j'ai fais depuis
    1. Private Sub UserForm_Activate()
    2.  
    3. If range("k6") = "" Then
    4. Frame1.BackColor = &HFF& 'rouge
    5. Frame2.BackColor = &HFF& 'rouge
    6. Frame3.BackColor = &HFF& 'rouge
    7. Else
    8.  
    9. Frame1.BackColor = &HFF00& 'vert
    10. Frame2.BackColor = &HFF00& 'vert
    11. Frame3.BackColor = &HFF00& 'vert
    12.  
    13. End If
    14. End Sub

    ca fonctionne bien avec k6 mais moi je souhaite controler de k6 à ai6
    et ca marche pas si j'écrit
    1. Private Sub UserForm_Activate()
    2.  
    3. If range("k6:ai6") = "" Then
    4. Frame1.BackColor = &HFF& 'rouge
    5. Frame2.BackColor = &HFF& 'rouge
    6. Frame3.BackColor = &HFF& 'rouge
    7. Else
    8.  
    9. Frame1.BackColor = &HFF00& 'vert
    10. Frame2.BackColor = &HFF00& 'vert
    11. Frame3.BackColor = &HFF00& 'vert
    12.  
    13. End If
    14. End Sub

    mystére ??????????

    merci zeb

    Tu ne peux pas tester la valeur de n cellule en même temps. Donc tu dois faire une boucle spéciale pour le tester.

    1. Public function EstRemplie() as boolean
    2. Dim i as long
    3. Estremplie = true
    4. for i = 11 to 35 ' de k à ai
    5. if cells(6,i) = "" then
    6. Estremplie = false ' merci zeb
    7. Exit for
    8. end if
    9. next
    10. end function


    Cette fonction renvoie vrai ssi toutes les cellules de la plage k6 à ai6 sont remplies.
    Expert Programmation

    Merci Freeman.
    (Relis la ligne 6 quand même ;)  )

    Tu aurais pu aussi d'abord lui expliquer qu'il fallait faire
    If Range("K6" ) = "" And Range("L6" ) = "" And Range("M6" ) = "" And Range("N6" ) = "" And .. Range("AI6" ) = "" Then

    Il aurait fini par trouver tout seul qu'il fallait faire une boucle :D 

    salut freeman et zeb

    tu as entiérement raison zeb la meilleur facon d'apprendre est de mettre le nez dedans .j'avais trouvé t'as facon de faire mais je la trouvait trop longue.je comprend mieux à présent pourquoi tu me proposait d'utiliser boolean.

    merci pour tous vos conseil freeman et zeb
    à bientôt
    Lassé par la pub ? Créez un compte