INPUTBOX , des chiffres et touche annuler

bertgrav

XLDnaute Occasionnel
bonsoir,

je suis plantée....
dans l'exemple qui suit, je veux afficher dans l'inputbox le n° de 1 à 12 (dim as BYTE irait trés bien)
je voudrais si on clique sur annuler sortir de la procédure, mais je ne sais pas pourquoi avec BYTE j'ai une erreur 13 incompatibilité de type

donc je met dim as variant
si j'affiche des lettres : ok ça bloque lors du contrôle suivant (avec le test entre 1 et 12)
mais si je met un chiffre entre 1 et 12 avec une virgule, ça passe mais je bloque plus tard dans le reste de ma procédure

comment faire pour imposer un format entre 1 et 12 sans virgule ?????

MERCI

CHANTAL






Sub a()

Dim mm As variant
suiv2:
mm = InputBox('mois: ', 'mois à planifier', 1) ' indique le mois
If mm = '' Then
Exit Sub
End If

If mm = 0 Then
GoTo suiv1
Else
If mm > 12 Then
suiv1:
MsgBox 'TAPER UN CHIFFRE ENTRE 1 ET 12 POUR LES MOIS !'
GoTo suiv2
Else
MsgBox mm 'pour contrôler ce qui a été tapé
End If
End If

End Sub
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

un petit exemple utilisant la méthode inputbox et non la fonction (on peut préciser le type de données) avec une boucle de vérification.

Cordialement, A+
Code:
Sub exemple()
Dim MM As Single
Do
If Not (MM = 0) Then MsgBox 'un nombre entier entre 1 et 12', vbOKOnly + vbInformation
MM = Application.InputBox(Title:='Mois', prompt:='Mois à planifier', Type:=1)
If MM = 0 Then Exit Sub
Loop Until (MM / 1 = MM \\ 1) And MM > 0 And MM < 13
'code à exécuter
End Sub
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
ps +
n'utiles pas une variable byte, integer ou long car le chiffre entré sera alors arrondi à l'initialisation de la variable et pourra passer le test sans correspondre à ce que voulait l'utilisateur
ex: 11,6 deviendra 12 et passera

A+

Message édité par: yeahou, à: 26/03/2006 20:32
 

bertgrav

XLDnaute Occasionnel
je viens d'essayer ton code, ça a l'air de fonctionner trés bien

merci

chantal

p'tite question au passage: pourquoi un inputbox se plante avec un BYTE auquel on demande d'annuler ?
REPRENDRE MON EXEMEPLE EN METTANT
mm as BYTE
et demander l'annulation
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
cela plante car tu utilises la fonction inputbox et non la méthode inputbox, la syntaxe est légérement différente. la fonction inputbox renvoie obligatoirement du texte, quand tu initialises une variable numérique avec du spécifié texte, en l'occurence Faux, qui est renvoyé sur annulation, cela plante (cela aurait peut être pu passer si l'annulation renvoyait false (=0 pour VBA) mais faux ne signifie rien pour VBA).
avec la méthode inputbox, on n'a pas ce problème (elle renvoie 0 sur un type décimal), elle est de plus plus puissante que la fonction puisqu'on peut l'initialiser avec plusieurs types de données
0 Une formule.
1 Un nombre.
2 Texte (une chaîne).
4 Une valeur logique (True ou False).
8 Une référence de cellule, sous la forme d'un objet Range.
16 Une valeur d'erreur, telle que #N/A.
64 Un tableau de valeurs.

pour plus d'info, regardes l'aide visual basic ou tout cela est précisé

Cordialement, A+

Message édité par: yeahou, à: 26/03/2006 21:07
 

Staple1600

XLDnaute Barbatruc
Bonsoir

Une autre approche (mais imparfaite)

Sub test()
Dim MOIS
MOIS = InputBox('Indiquez le mois', 'Choix du mois')
Select Case MOIS
Case 1 To 12
[A1] = MOIS 'ici pour l'exemple
Case Else
MsgBox 'Veuillez saisir un chiffre entre 1 et 12'
End
End Select
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Avec une petite amélioration

Sub test2()
Dim MOIS
MOIS = InputBox('Indiquez le mois', 'Choix du mois')
If MOIS = vbNullString Then Exit Sub
Select Case MOIS
Case 1 To 12
[A1] = MOIS 'ici pour l'exemple
Case Else
MsgBox 'Veuillez saisir un chiffre entre 1 et 12'
End Select
End Sub

Message édité par: staple1600, à: 26/03/2006 21:38
 

Staple1600

XLDnaute Barbatruc
Re
Encore une petit modif

Sub test3()
Dim MOIS
MOIS = InputBox('Indiquez le mois:' & Chr(13) & Chr(13) _
& '(Saisir un chiffre entre 1 et 12, svp)', 'Choix du mois')
'If MOIS = vbNullString Then Exit Sub
Select Case MOIS
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
[A1] = MOIS 'ici pour l'exemple
Case Else
Exit Sub
End Select
End Sub
 

bertgrav

XLDnaute Occasionnel
encore un grand merci

j'ai fini ce que je devais faire, et tout fonctionne trés bien, en cas d'erreur de saisie, je me retrouve soit au début de programme soit en fin en cas d'annulation, aucun message d'erreur.......
que du bonheur

chantal
 

Statistiques des forums

Discussions
312 493
Messages
2 088 946
Membres
103 989
dernier inscrit
jralonso