Detecter un integer

Résolu
arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014 - 15 déc. 2004 à 17:07
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 16 déc. 2004 à 00:00
Je voudrais créé une condition qui signale une erreur si elle detecte autre chose qu'un entier dans une variable.
J'avais fait ceci :

If Variable = "" Or somme <= 0 Or somme > 9999 Then
message = "Veuillez saisir un entier valide"
titre = "Erreur"
Float = MsgBox(message, 10, titre)
Exit Sub

Mais si Variable contient par exemple une chaine de caractere, la detection ne marche pas et le programme plante.

Comment faire ?

Merci

JC

19 réponses

arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014
15 déc. 2004 à 20:43
Pourquoi j'ai une erreur de compilation "la declaration de la pocedure ne correspond pas à la description de l'evenement ou de la procedure du meme nom" ?

JC
3
barley Messages postés 107 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
15 déc. 2004 à 17:14
if int(variable) <>variable then
msgbox "la variable n'est pas un entier"
end if

essaye ca, je ne sais pas si c'est la meilleur solution mais ca doit marcher...
a voir
0
arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014
15 déc. 2004 à 17:22
Et non cela ne marche pas, j'ai un plantage :

"erreur d'execution '13'
Type incompatible"

JC
0
barley Messages postés 107 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 28 janvier 2010
15 déc. 2004 à 17:25
heu, apres avoir relu, ma solution ne peut pas marcher, tu veux aussi que ca marche pour les caractères, donc ca colle pas...

sinon, vu le message d'erreur que tu veux afficher, il semblerait que tu veuille limiter la saisie dans un textbox ou autre composant par des nombres entiers

Tu peux faire cela, il y a des sources qui te disent comment ici...

Option Explicit
'# Déclaration de quelques API
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const ES_NUMBER As Long = &H2000&
Private Const GWL_STYLE As Long = -16

Private Sub Form_Load()
MakeNumericOnly Text1' si c'est le textbox text1
End Sub

Private Sub MakeNumericOnly(Obj As Object)
'# Cette variable contiendra le Style de notre Controle :
'# il s'agit d'une combinaison de differentes valeurs...
Dim Style As Long

'# On récupère le style actuel
Style = GetWindowLong(Obj.hwnd, GWL_STYLE)

'# On ajoute le style ES_NUMBER...
Style = Style Or ES_NUMBER

'# et on replace le tout dans le Controle
SetWindowLong Obj.hwnd, GWL_STYLE, Style
End Sub

sympa, on dit merci a renfield

il doit y en avoir d'autres, je le site parce que je trouve qu'il le merite bien en passant
allez, bonne chance a toi, en esperant que ca t'aide un peu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014
15 déc. 2004 à 17:32
ça a l'air bien compliqué, je croyais qu'il y avait une fonction standard qui permettait de le faire.

Effectivement, il s'agit d'une textbox, qui renvoi une somme à une base de donnée. Il faut donc interdire une autre entrée qu'un entier

Je vais quand meme essayer...

JC
0
cs_trabice Messages postés 328 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 24 novembre 2005 1
15 déc. 2004 à 17:38
si je comprend bien tu ve juste pouvoir rentrer un integer dans un textbox?
pas de caractère?
et controler la longeur?
t'as des nombres négatifs possible??
0
cs_trabice Messages postés 328 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 24 novembre 2005 1
15 déc. 2004 à 17:38
si je comprend bien tu ve juste pouvoir rentrer un integer dans un textbox?
pas de caractère?
et controler la longeur?
t'as des nombres négatifs possible??
0
arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014
15 déc. 2004 à 17:44
non pas de nombre negatif possible, juste un entier positif

JC
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
15 déc. 2004 à 18:14
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Dim p As Integer
    Dim z As Integer
    Select Case KeyAscii
       Case 8:
       Case 48 To 57:
          p = Text1.SelStart
          z = Len(Text1) - p
          If Val(Left$(Text1, p) & Chr$(KeyAscii) & Right$(Text1, z)) > 9999 Then KeyAscii = 0
       Case Else: KeyAscii = 0
       End Select
End Sub


Daniel
0
cs_trabice Messages postés 328 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 24 novembre 2005 1
15 déc. 2004 à 18:18
moi j'utilise ca
ds keypress tjs

If KeyAscii = &H8 Then
Exit Sub
End If
If KeyAscii = vbKeyReturn Then
KeyAscii = 0
Call Command1_Click ' par ex
Exit Sub
End If
If KeyAscii > 47 And KeyAscii < 58 Then
Else
KeyAscii = 0
End If

et puis mets ta propriété ds ta textbox maxlength à (nbe de chiffres max ds un integer)
0
arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014
15 déc. 2004 à 19:06
J'ai pas tout compris les gars;
que dois je faire pour integrer ce que vous me proposez à ceci :

If somme = "" Or somme <= 0 Or somme > 9999 Then
message = "Veuillez saisir une somme"
titre = "Erreur"
Float = MsgBox(message, 10, titre)
Exit Sub

Merci

JC
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
15 déc. 2004 à 19:14
c'est pas trop nécessaire étant donné que le contrôle est fait à la base et que l'utilisateur ne verra jamais son erreur puisque le caractère est supprimé d'office.

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim float   As Long
Dim message As String
Dim titre   As String

    Dim p As Integer
    Dim z As Integer
    Select Case KeyAscii
       Case 8:
       Case 48 To 57:
          p = Text1.SelStart
          z = Len(Text1) - p
          If Val(Left$(Text1, p) & Chr$(KeyAscii) & Right$(Text1, z)) > 9999 Then
message = "Veuillez saisir une somme inférieure à 9999"
titre = "Erreur"
float = MsgBox(message, 10, titre)
          
             KeyAscii = 0
             End If
       Case Else:
message = "Veuillez saisir une somme"
titre = "Erreur"
float = MsgBox(message, 10, titre)
           KeyAscii = 0
       
       End Select
End Sub


Daniel
0
arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014
15 déc. 2004 à 20:04
Je n'y arrive pas

que represente Text1_KeyPress ? un controle textbox, un bouton...?

JC
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
15 déc. 2004 à 20:16
Text1 c'est le nom du textBox par défaut.
clique 2 fois sur ton TextBox et il ya un évênement qui va apparaître, je crois que c'est Text1_Change par défaut, ensuite tu sélectionnes dans la fenêtre de droite l'évênement KeyPress, il doit être en gras s'il est utilisé.
après tu remplaces text1_KeyPress par le nom de ton TextBox:

Private Sub MonTextBox_KeyPress(KeyAscii As Integer)
- - - - - - - - - - - -
End Sub

Daniel
0
arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014
15 déc. 2004 à 20:51
J'ai résolu, ça fonctionne

JC
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
15 déc. 2004 à 20:51
est-ce que t'as plusieurs TextBox ? aurais-tu mis un index ?
enlève l'index si pas nécessaire, sinon la procédure est différente.
il faut aussi mettre un indice quand tu l'utilises.

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
- - - - - - - - - - - - - - - - -
Text1(Index)
- - - - - - - - - - - - - - - - -
End Sub

Daniel
0
kiboumz Messages postés 120 Date d'inscription mercredi 17 septembre 2003 Statut Membre Dernière intervention 18 mai 2007
15 déc. 2004 à 20:56
Je sais pas si tu programmes en vb6 ou .net, mais en .net une commande permet de savoir si le chiffre entré est numérique donc s'il y a des carctères ca te le dit.
Cette commande est is numeric ()

Ensuite pour savoir si c'est un entier, tu pourrais faire une boucle for

for intx= 0 to 9999 step 1 (pour faire des sauts de 1)e

next

Enfin, regarde cela

a+
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
15 déc. 2004 à 21:05
il y a aussi une Fonction is numéric en VB6 mais elle est pas très fiable

Text1 = "1 2 3 4 5,6 7"

If Not IsNumeric(Text1) Then
MsgBox "Faux"
Else
MsgBox "Bon"
End If

Daniel
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
16 déc. 2004 à 00:00
Salut,
J'arrive un peu tard mais un truc simple (en VB6) :

If IsNumeric(Text1.Text) Then
  If Val(Text1.Text) >= -32768 And Val(Text1.Text) <= 32767 Then
    MsgBox "OK"
  Else
    MsgBox "pas de l'integer"
  End If
Else
  MsgBox "pas numérique"
End If


ou mieux

If IsNumeric(Text1.Text) Then

Select Case Val(Text1.Text)
  Case -32768 To 32767
    MsgBox "Integer"
  Case -2147483648# To 2147483647
    MsgBox "Long"
  Case Else
    MsgBox "pas géré"
  End Select
  
Else
  MsgBox "pas numérique"
End If


Maintenant, au cas où on ne se souvient pas comment on a déclaré une variable, il existe toujours la fonction VarType.

Bonne prog

Cordialement, CanisLupus
0
Rejoignez-nous