Bonjour, je voudrais savoir comment tester si une variable n'est pas un entier?
Je sais tester :
Si ce n'est pas numérique alors...
Mais je ne sais pas comment tester:
Si ce n'est pas un entier alors...
Bonjour, je voudrais savoir comment tester si une variable n'est pas un entier?
Je sais tester :
Si ce n'est pas numérique alors...
Mais je ne sais pas comment tester:
Si ce n'est pas un entier alors...
Bonjour,
une solution possible réside ici. Il s'agit de tester afin de voir si la partie décimale du nombre est nulle ou non.
Bonne journée!
Bonjour,
l'instruction VBA TypeName(..) renvoie la chaine de caractère du type de la variable passée en paramètre.
Ex:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 sub PorteNawak (j as variant) If TypeName(j)<>"Integer" Then ..... End if End sub
normalement cela suffit
if not int (variable) then
...
end if
RE,
Cette solution ne fonctionne pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If Not Int(Me.txtStockMinimum) Then MsgBox ("Le Stock Minimum doit être un nombre entier") Exit Sub Else End If
Pour cette solution:
Je fais comment sima sub est tu type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 sub PorteNawak (j as variant) If TypeName(j)<>"Integer" Then ..... End if End sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Private Sub cmdModiferRéférence_Click() End sub
Bonsoir,
En fait le plus simple c'est de traiter la saisie pendant qu'elle se déroule.
Le code suivant permet de ne prendre en compte que les chiffres saisies au clavier dans la zone de texte txtStockMinimum. Il s'agît de l'événement ToucheActivée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub txtStockMinimum_KeyPress(KeyAscii as Integer) If (KeyAscii<48 Or KeyAscii>57) Then KeyAscii=0 End sub
RE,
En fait ton code perùet juste de ne pas inserer de virgules, dans ma txtBox.
Le soucis c'est que je ne peux plus me servir de la touche effacer (au dessus de la touche entrer).
Il n'existe pas un test possible avec un IF au moment de la validation afin de retourner une msgBox ("Le stock doit être un nombre entier").
Bonjour,
oui il s'agît du backspace,
Le code permet de ne pas tenir compte de tous les caractères autres que les 10 chiffres et le backspace.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private sub txtStockMinimum_KeyPress(KeyAscii as Integer) If KeyAscii<>8 And (KeyAscii<48 Or KeyAscii>57) Then KeyAscii=0 End sub
Très bien je te remercie.
Si toutefois quelqu'un connais le code qui permet de tester avec un If si c'est un entier then MsgBox....
Bonjour,
essaie ceci sur l'événement Avant MAJ de la zone de texte
Ex:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Sub txtStockMinimum_BeforeUpdate(Cancel As Integer) Dim i i=Me.txtStockMinimum If (Not IsNumeric(i)) Or (IsNumeric(i) And Int(i)<CDbl(i)) Then Msgbox "Le stock minmum doit être un nombre entier" Cancel=True End if End sub
bonjour,
regarde ceci
tu peux utiliser cette fonction comme ça par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Option Compare Database Option Explicit Private Const Stockmaxi As Integer = 1000 Public Function testerNum(vDonnéeAtester As Variant) As Boolean Dim i As Integer ' c'est l'indexe qui nous permeterait de parcourir la vDonnéeAtester testerNum = True 'initialiser la fonction à true i = 1 Do While i <= Len(CStr(vDonnéeAtester)) And testerNum 'je cherche tant que je n'ai pas terminé tous les caractères et que je suis toujours sur true Debug.Print "i== " & i & " " & Mid(CStr(vDonnéeAtester), i, 1) If (Not IsNumeric(Mid(CStr(vDonnéeAtester), i, 1))) Then testerNum = False ' si c'est false je sors de la boucle i = i + 1 Loop 'reste un autre truc, integer est compris est entre -32 768 et 32 767 'tu ne voudrais certainement pas que ton stock maxi soit négatif ou supérieur à une certaine valeur ' c'est pour cela que j'ai défini en tête de module : Private Const Stockmaxi As Integer = 1000 'Un nombre négatif est considéré comme texte donc pas de problème 'c'est un autre if qu'il te faudrait ajouter, aller je te le donne pour la dernière fois. If (testerNum) Then If vDonnéeAtester > Stockmaxi Then testerNum = False ' je ne fais ce test que si la valeur est numérique End Function
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 If (testerNum) then ' c'est bon je continue else 'c'est pas bon je l'annonce et je sors end if
salut petitbison, ilank, galaktikx, al_bert et moilou2
en considèrant que -1 ou 1,00 sont aussi des entiers:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Function IsInt(txt As String) As Boolean IsInt = IsNumeric(txt) And (Val(Replace(txt, ",", ".")) = CInt(Val(txt))) End Function
bonjour,
oui, mais je crois que moilou2 voudrait un truc sans virgule pour son stock.
merci pour votre remarque.
A+
Je propose
cela fonctionne avec 132,00 aussi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 IF cint(Me!Saisie) <> cdbl(Me!Saisie) Then Msgbox(Me!saisie & " n'est pas un entier")
petitbison > comme cela il aura le choix.
salut helas,
comme ilank il y aura erreur avec "132.00"
Bonsoir,
Quelle erreur vodiem ? "132.00" n'est pas une valeur numérique en français.
Maintenant, personnellement je préfère utiliser l'événement KeyPress pour gérer la saisie surtout pour une valeur entière, la gestion des valeurs décimales est un poil plus compliqué.
bonsoit ilank,
tu as raison.Envoyé par ilank
je voulais dire que cint() ou int() génère une erreur dessus comme "a12" ou autre erreur de saisie (incompatibilité de type).
je comprends mais personnellement je n'aime pas intellectuellement l'idée que mon pc m'oblige à faire ce qu'il veut. ;pEnvoyé par ilank
je lui donne à manger je vais pas lui mâcher le travaille.
cela dit ma préférence intellectuellement serait d'utiliser un regexp bien que ce soit plus long.
j'en ai donc profité pour potasser le sujet pour trouver un pattern:
avec référencement préalable de "Microsoft VBScript Regular Expressions 5.5"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Function isIntRegExp(txt As String) Dim reg As VBScript_RegExp_55.RegExp Set reg = New VBScript_RegExp_55.RegExp reg.Pattern = "^[ ]*-?(\d)*,?[0]*[ ]*$" isIntRegExp = reg.test(txt) End Function
Bonsoir,
Bonne foi quand tu nous tiens !!
Hé beh, c'est bien l'idée en utilisant l'événement ToucheActivée; c'est l'utilisateur qui dicte la conduite du PC et non l'inverse; pas de message du genre : "Vous devez marcher dans les clous, recommencez." Avec le KeyPress, le PC attend les actions provoquées par l'utilisateur et agit en fonction.Envoyé par Vodiem
KeyPress je ne l'utilise pas pour du contrôle sur le contenu saisie.
le pc réagit à chaque action ca fait vraiment flicage...
comme "le chemin le plus court n'est pas la ligne droite" j'aime marcher en dehors de clous, revenir sur mes pas, marcher en arrière, sauter à cloche pied... avant de reprendre le droit chemin. :p
cela dit un mask de saisie ca pourrait aussi le faire.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager