Boucle vb ne fonctionne pas exactement

Résolu/Fermé
benoit - 5 août 2010 à 18:55
 benoit - 6 août 2010 à 12:15
Bonjour,

j'ai un problème dans mon code, je voudrai qu'il s'exécute c le cas mais il y a des bug, si je commence par taper 0 dans mon inputBox sa marche mais ensuite si je tape une valeur non numérique il y a un bug, ce que j'aimerai c qu'a chaque fois que je rentre une valeur dans mon inputBox il vérifie mes conditions et que temps qu'elles sont pas toutes respectées me redemander de taper le jour


Dim rep As String, Lig As Integer, Col As Integer

rep = InputBox("quel est le jour du mois de caisse à réaliser ?", "JOUR", 0)

retry = 0


Do While retry = 0

If rep = "" Then
MsgBox "Référence introuvable!"
rep = InputBox("quel est le jour du mois de caisse à réaliser ?", "JOUR", 0)
Else: retry = 1
End If
Loop


retry = 0

Do While retry = 0
If Not IsNumeric(rep) Then
MsgBox "Référence introuvable!"
rep = InputBox("quel est le jour du mois de caisse à réaliser ?", "JOUR", 0)
Else: retry = 1
End If
Loop


retry = 0
Do While ret = 0
If CInt(rep) < 1 Or CInt(rep) > 31 Then
MsgBox "Référence introuvable!"
rep = InputBox("quel est le jour du mois de caisse à réaliser ?", "JOUR", 0)
Else: retry = 1
End If

Loop

merci d'avance
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
5 août 2010 à 19:24
Re-
Essaye ce code et dis moi ce que tu en penses :

Dim rep As String
debut:
rep = InputBox("quel est le jour du mois de caisse à réaliser ?", "JOUR", 0)
If rep = "" Then
MsgBox "Vous devez absolument saisir un nombre entre 1 et 31!"
GoTo debut
End If
If Not IsNumeric(rep) Then
MsgBox "Vous devez absolument saisir un nombre entre 1 et 31!"
GoTo debut
End If
If CInt(rep) = 0 Then
MsgBox "Vous devez absolument saisir un nombre entre 1 et 31!"
GoTo debut
End If
If CInt(rep) < 1 Or CInt(rep) > 31 Then
MsgBox "Vous devez absolument saisir un nombre entre 1 et 31!"
GoTo debut
End If
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2024 7 217
Modifié par eriiic le 5/08/2010 à 23:43
Bonsoir tout le monde,

Les goto ne sont pas une bonne habitude de programmation et sont à proscrire en fait (sauf pour les traitements d'erreur).

En utilisant application.inputbox avec le paramètre type:=1 déjà tu peux refuser toutes les saisies qui ne sont pas numériques, le cint() ne produira plus d'erreur.
Il n'y a plus qu'à tester la valeur.
ex :
    Dim ok As Boolean 
    Do While Not ok 
        rep = Application.InputBox("quel est le jour du mois de caisse à réaliser ?", "JOUR", Type:=1) 
        ok = CInt(rep) >= 1 And CInt(rep) <= 31 
        If Not ok Then 
            MsgBox "Nombre non valide." 
        End If 
    Loop


eric
0
merci beaucoup cela fonctionne parfaitement, je ne connaissais pas, et c possible de gérer les actions du bouton ANNULE dans la fenetre de réponse qui s'affiche
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2024 7 217
Modifié par eriiic le 6/08/2010 à 07:02
Si l'utilisateur clique sur Annule alors rep=false
Donc:
Dim ok As Boolean 
    Do While Not ok 
        rep = Application.InputBox("quel est le jour du mois de caisse à réaliser ?", "JOUR", Type:=1) 
        If rep = False Then Exit Do 
        ok = CInt(rep) >= 1 And CInt(rep) <= 31 
        If Not ok Then 
            MsgBox "Nombre non valide." 
        End If 
    Loop

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
6 août 2010 à 09:04
Salut Eriiic,
Merci du renseignement.
Les goto sont à proscrire Aurais tu plus de renseignements là dessus? C'est comme les .select ou la raison est autre?
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2024 7 217
6 août 2010 à 09:31
Salut pikaju,

Non, ce n'est pas pour une question de vitesse d'exécution.
C'est uniquement pour une raison de lisibilité du code, et qu'il reste bien structuré. Utiliser cette facilité fait qu'on arrive rapidement à un code 'spaghetti'.
Donc le mieux est de se l'interdire, à de très rares exceptions près c'est faisable.
(à part pour le 'on error goto...' où on n'a pas le choix)

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
6 août 2010 à 09:44
Ok. merci encore
Bonne journée
0