[RESOLU] Bouton d'InputBox dans une boucle.

Neonours

XLDnaute Nouveau
Bien le bonjour le forum,

Voilà, suite à ma première visite avec problématique, j'ai décidé de m'intéresser au VBA, maintenant, d'autant plus que ma supérieur me demande de plus en plus de chose à faire avec.

Voici ma problématique du moment:

j'ai un bouton qui, lors du clique dessus, m'ouvre une InputBox demandant une année en 4 chiffres et qui contient les bouton OK et Annuler.

Ensuite, j'ai une boucle qui intervient si l'entrée de l'InputBox n'est pas comprise en 1000 et 9999 et qui m'ouvre une TextBox qui m'en informe puis, au clique sur OK me renvoi à l'InputBox.

Mon petit soucis vient du bouton Annuler de l'InputBox. Je n'arrive pas à définir, dans la boucle, qu'au clique sur Annuler, ça coupe simplement la procédure.

Je vous met mon bout de code pour vous aider.

Code:
Sub Bouton1_Cliquer()

'au clique, ouverture de la boite de dialogue annee
    
    Dim annee As Integer
    If annee = InputBox("Insérer une année en 4 chiffres", "Année") = vbCancel Then
    Exit Sub
    'La boite demande l'insertion d'une année en 4 chiffres
    
   Do Until annee > 1000 And annee < 9999
    MsgBox "Cette entrée n'est pas valide!" & Chr(10) & "Merci d'entrer une année en 4 chiffres.", 0 + 48, "Entrée invalide"
    'si le nombre entré est inférieur à 1000 ou supérieur à 9999 une boite s'ouvre informant que le nombre entré est invalide
    annee = InputBox("Insérer une année en 4 chiffres", "Année")
    Loop

End Sub

Si vous avez une soluce ou au moins une piste, ce serais juste magnifique.

D'avance merci.

Neonours.
 

Pierrot93

XLDnaute Barbatruc
Re : Bouton d'InputBox dans une boucle.

Bonjour,

essaye peut être comme ceci :
Code:
    Dim annee
    annee = InputBox("Insérer une année en 4 chiffres", "Année")
    'La boite demande l'insertion d'une année en 4 chiffres
    If annee = "" Then Exit Sub
   Do Until annee > 1000 And annee < 9999
    MsgBox "Cette entrée n'est pas valide!" & Chr(10) & "Merci d'entrer une année en 4 chiffres.", 0 + 48, "Entrée invalide"
    'si le nombre entré est inférieur à 1000 ou supérieur à 9999 une boite s'ouvre informant que le nombre entré est invalide
    annee = InputBox("Insérer une année en 4 chiffres", "Année")
    Loop

bonne journée
@+
 

Hulk

XLDnaute Barbatruc
Re : Bouton d'InputBox dans une boucle.

Hello,

Comme ceci..
Code:
    Dim annee As Integer
    
    On Error Resume Next
    
    annee = InputBox("Insérer une année en 4 chiffres", "Année")
    
    If annee = "" Then Exit Sub
    
    'La boite demande l'insertion d'une année en 4 chiffres

    Do Until annee > 1000 And annee < 9999
        MsgBox "Cette entrée n'est pas valide!" & Chr(10) & "Merci d'entrer une année en 4 chiffres.", 0 + 48, "Entrée invalide"
        'si le nombre entré est inférieur à 1000 ou supérieur à 9999 une boite s'ouvre informant que le nombre entré est invalide
        annee = InputBox("Insérer une année en 4 chiffres", "Année")
    Loop
Edit :

Comme toujours à la bourre... Slt Pierrot :)
 

Pierrot93

XLDnaute Barbatruc
Re : Bouton d'InputBox dans une boucle.

Re, bonjour Hulk

on pourrait également le faire ainsi :
Code:
Option Explicit
Sub test()
Dim annee As Variant
    Do
        If annee <> "" Then MsgBox "Cette entrée n'est pas valide!" & Chr(10) & "Merci d'entrer une année en 4 chiffres.", 0 + 48, "Entrée invalide"
        annee = InputBox("Insérer une année en 4 chiffres", "Année")
        If annee = "" Then Exit Do
    Loop While CInt(annee) < 1000 Or annee > 9999
End Sub
 

Neonours

XLDnaute Nouveau
Re : Bouton d'InputBox dans une boucle.

Bonjour Pierrot,

ça joue pas, il me met une erreur d'exécution '13': incompatibilité de type. Y aurait un autre moyen?

Edit: J'ai pas pensé à rafraîchir, je vais tester et je vous redis.
 

Neonours

XLDnaute Nouveau
Re : Bouton d'InputBox dans une boucle.

Re Pierrot, Bonjour Hulk,

Pierrot: il me surligne If annee = "" Then

Hulk: c'est nickel, j'ai plus d'erreur quand j'annule, par contre, ça bousille ma boucle si je fais OK

Edit: (désolé, c'est le matin) ça ne boucle plus si j'entre un le nombre 123 ou 12345 alors que ça devrais.
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Bouton d'InputBox dans une boucle.

Re,

comprends pas, cette partie de code devrait fonctionner sans souci :
Code:
    Dim annee
    annee = InputBox("Insérer une année en 4 chiffres", "Année")
    'La boite demande l'insertion d'une année en 4 chiffres
    If annee = "" Then Exit Sub

avoir comment tu as déclaré "annee"...
 

Hulk

XLDnaute Barbatruc
Re : Bouton d'InputBox dans une boucle.

Re,

Je confirme que le deuxième code à Pierrot est nickel, faut juste que tu rajoutes On Error Resume Next en début de procédure !

Si non tu peux aussi utiliser une InputBox de type 1 pour forcer une valeur numérique.

Teste et tu verras...
Code:
    Dim annee As Variant
        
    On Error Resume Next
    
    Do
        If annee <> "" Then MsgBox "Cette entrée n'est pas valide!" & Chr(10) & "Merci d'entrer une année en 4 chiffres.", 0 + 48, "Entrée invalide"
        annee = Application.InputBox("Insérer une année en 4 chiffres", "Année", , Type:=1)
        If annee = False Then Exit Do
    Loop While CInt(annee) < 1000 Or annee > 9999
 

Pierrot93

XLDnaute Barbatruc
Re : Bouton d'InputBox dans une boucle.

Re,

Je confirme que le deuxième code à Pierrot est nickel, faut juste que tu rajoutes On Error Resume Next en début de procédure !
bah... pourquoi ??? erreur dans quel cas ? effectivement " On Error Resume Next" passe à l'instruction suivante, mais bon... préférable de gérer les erreurs....
 

Pierrot93

XLDnaute Barbatruc
Re : Bouton d'InputBox dans une boucle.

Re,

avec la méthode "inputbox", sans "on error..." cela pourrrait donner ceci :
Code:
Dim annee As Variant
Do
    If Not IsEmpty(annee) Then MsgBox "Cette entrée n'est pas valide!" & Chr(10) & "Merci d'entrer une année en 4 chiffres.", 0 + 48, "Entrée invalide"
    annee = Application.InputBox("Insérer une année en 4 chiffres", "Année", Type:=1)
    If VarType(annee) = vbBoolean Then Exit Do
Loop While annee < 1000 Or annee > 9999
 

Neonours

XLDnaute Nouveau
Re : Bouton d'InputBox dans une boucle.

Je commence à être un peu perdu, je débute en VBA. Pourquoi déclaré annee en Variant? Qu'est ce que le CInt?

Edit: Ok, ton dernier code fonctionne à la perfection Pierrot, merci bien. J'aimerais juste comprendre pourquoi déclaré annee en Variant au lieu de le déclaré en Integer stp.
 
Dernière édition:

Neonours

XLDnaute Nouveau
Re : Bouton d'InputBox dans une boucle.

Ok, je te remercie grandement pour le temps passé. Merci à toi aussi Hulk.

Je vais pouvoir passer à la suite de mon éléphant de code. Je risque de repasser d'ici la fin de la semaine mais je vais commencer par tenter par moi même.

Encore merci à vous deux pour le temps passé et les explications.

Neonours
 

Discussions similaires

Statistiques des forums

Discussions
312 266
Messages
2 086 654
Membres
103 353
dernier inscrit
jerem'