Gestion des erreurs d'oublies de sélection dans un userform

Résolu
Signaler
Messages postés
27
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2010
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Salut à tous!

Voilà mon soucis.

J'ai un userform où je demande à l'utilisateur de renseigner beaucoup d'éléments à partir de listbox et j'aimerais gérer, lorsque l'opérateur appuis sur valider et qu'il croit qu'il a tout rempli, les oublis de l'opérateur en lui signalant par un msgbox qu'il a oublié de sélectionner un ou plusieurs éléments.

Par exemple je me sers du bout de programme suivant pour montrer à l'opérateur qu'il lui manque une donnée:

If IntervalleScrutation = "" Then
MsgBox ("Choisir l'intervalle de scrutation de la centrale")
Exit Sub

Je reviens alors sur mon userform, je sélectionne la donnée manquante, mais lorsque je souhaite valider alors le msgbox s'affiche encore et je ne peux donc pas fermer mon userform.

Quelqu'un peut-il m'aider????

Je vous en remercie d'avance!!!

Bien cordialement

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Utilise donc la comllection controls !
exemple à main levée(essaye et tu comprendras comment l'utiliser)

for i = 1 to 18
  if controls("Listbox" & i).value = "" then
    msgbox "Listbox" & i & " sans choix fait !)
    exit for
  end if
next



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
27
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2010

Finalement c'est bon j'ai trouvé avec ton bout de programme:

For i = 1 To 18
If Controls("Listbox" & i).Value = "" Then
MsgBox "Vous avez oublié une ou plusieurs sélections !!!"
Exit Sub
End If
Next i

Voilà comment je l'ai écrit.

Merci bien pour ton aide
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,
Va falloir être beaucoup plus précis, si tu veux de l'aide...
(boule de crystal en panne)
C'est quoi, IntervalleScrutation ?
C'est quoi, le mécanisme exact de ce que tu cherches à faire ?
Donne un exemple plus complet, si tu as des difficultés à définir la "chose" ...

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Maintenant, si tu n'aimes pas monter aux agrès et que l'idée même de la gymnastique te donne la nausée :
tu ferais alors peut-être bien de choisir une autre voie moins élégante, mais plus simple à mettre en oeuvre: par exemple :
- noter les valeurs présentes sur la rangée (au selectionChange)=
- au sortir (toujours au selectionchange) restituer les valeurs telles qu'elles étaient dans toto si la cellule était vierge ou si la 1ère colonne de la sélectioin d'une ligne entière était vierge.
Pour cela également : utiliser toto comme dans le cas de la "gymnastique" déjà montrée.
Un peu d'effort personnel et tu devrais y arriver facilement !


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
27
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2010

Voilà un bout de mon programme:

Private Sub CommandValider_Click()
Dim verifpage1 As Variant

NomFour = ListBox1.Value
NomRedacteur = ListBox2.Value
TypeControle = ListBox3.Value
CentraleNum = ListBox4.Value
Incident = ListBox5.Value
Resultat = ListBox6.Value
ClasseFour = ListBox7.Value
Procedure = ListBox8.Value
NomRealisateur = ListBox9.Value
DestQualite = ListBox10.Value
DestInterforge = ListBox11.Value
ResultNorme = ListBox13.Value
ClasseDemandee = ListBox14.Value
ConditionFour = ListBox15.Value
MesuresDansAir = ListBox16.Value
NombresPlaquettes = ListBox17.Value
IntervalleScrutation = ListBox18.Value
NombreTC = ListBox19.Value
DateA = DTPicker3.Value 'dit que la date vaut ce qu'il y a dans dtpicker3
DateB = DTPicker4.Value

If IntervalleScrutation = "" Then
MsgBox ("Choisir l'intervalle de scrutation de la centrale")
Exit Sub
End If
End sub

Il me permet de mettre les valeurs des listbox dans des noms et j'aimerais vérifier que tous les noms ont bien une valeur avant de fermer mon userform.


Es que c'est plus claire? si non dis le moi, merci
Messages postés
27
Date d'inscription
lundi 5 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2010

et bien ça ça marche très bien le seul soucis c'est qu'après le msgbox je ne reviens pas sur mon userform pour modifier l'erreur.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Meu nan .....
faut être gentil avec les utilisateurs ...

Je te suggère (toujours à main levée) :

for i = 1 To 19
 If Controls("Listbox" & i).Value = "" Then
   beep
   msgBox "Vous avez oublié de choisir dans la listbox où je vais !!!"
   Controls("Listbox" & i).listindex = 0
   Controls("Listbox" & i).setfocus
   exit sub
 end If
next i 


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Ou encore (bien mieux) :

for i = 1 To 19
 If controls("listbox" & i).Value = "" Then
   beep
   msgBox "Vous avez oublié de choisir dans la listbox qui va clignoter !!!"
   For j = 1 To 10
     controls("Listbox" & i).Visible = not Controls("listbox" & i).visible
     deb = timer
       Do while timer < deb + 0.1
         Doevents
       Loop
    Next
    Controls("Listbox" & i).Visible = True
    lontrols("listbox" & i).SetFocus
    exit sub
  end if
next



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est