Detecter un integer [Résolu]

arbomont 57 Messages postés mardi 21 septembre 2004Date d'inscription 3 février 2014 Dernière intervention - 15 déc. 2004 à 17:07 - Dernière réponse : cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention
- 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
Afficher la suite 

19 réponses

Meilleure réponse
arbomont 57 Messages postés mardi 21 septembre 2004Date d'inscription 3 février 2014 Dernière intervention - 15 déc. 2004 à 20:43
3
Merci
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

Merci arbomont 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

barley 107 Messages postés jeudi 28 janvier 2010Date d'inscription 28 janvier 2010 Dernière intervention - 15 déc. 2004 à 17:14
0
Merci
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
arbomont 57 Messages postés mardi 21 septembre 2004Date d'inscription 3 février 2014 Dernière intervention - 15 déc. 2004 à 17:22
0
Merci
Et non cela ne marche pas, j'ai un plantage :

"erreur d'execution '13'
Type incompatible"

JC
barley 107 Messages postés jeudi 28 janvier 2010Date d'inscription 28 janvier 2010 Dernière intervention - 15 déc. 2004 à 17:25
0
Merci
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
arbomont 57 Messages postés mardi 21 septembre 2004Date d'inscription 3 février 2014 Dernière intervention - 15 déc. 2004 à 17:32
0
Merci
ç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
cs_trabice 328 Messages postés mercredi 26 novembre 2003Date d'inscription 24 novembre 2005 Dernière intervention - 15 déc. 2004 à 17:38
0
Merci
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??
cs_trabice 328 Messages postés mercredi 26 novembre 2003Date d'inscription 24 novembre 2005 Dernière intervention - 15 déc. 2004 à 17:38
0
Merci
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??
arbomont 57 Messages postés mardi 21 septembre 2004Date d'inscription 3 février 2014 Dernière intervention - 15 déc. 2004 à 17:44
0
Merci
non pas de nombre negatif possible, juste un entier positif

JC
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 15 déc. 2004 à 18:14
0
Merci
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
cs_trabice 328 Messages postés mercredi 26 novembre 2003Date d'inscription 24 novembre 2005 Dernière intervention - 15 déc. 2004 à 18:18
0
Merci
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)
arbomont 57 Messages postés mardi 21 septembre 2004Date d'inscription 3 février 2014 Dernière intervention - 15 déc. 2004 à 19:06
0
Merci
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
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 15 déc. 2004 à 19:14
0
Merci
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
arbomont 57 Messages postés mardi 21 septembre 2004Date d'inscription 3 février 2014 Dernière intervention - 15 déc. 2004 à 20:04
0
Merci
Je n'y arrive pas

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

JC
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 15 déc. 2004 à 20:16
0
Merci
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
arbomont 57 Messages postés mardi 21 septembre 2004Date d'inscription 3 février 2014 Dernière intervention - 15 déc. 2004 à 20:51
0
Merci
J'ai résolu, ça fonctionne

JC
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 15 déc. 2004 à 20:51
0
Merci
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
kiboumz 120 Messages postés mercredi 17 septembre 2003Date d'inscription 18 mai 2007 Dernière intervention - 15 déc. 2004 à 20:56
0
Merci
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+
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 15 déc. 2004 à 21:05
0
Merci
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
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 16 déc. 2004 à 00:00
0
Merci
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.