Bonjour tous,
Quel que soit la configuration de la variable, entier, single, double...etc.
Essais avec respectivement la variable A = 52.32 et A=52
Dim A
A = 52
If A - Fix(A) = 0 Then
'C'est un entier
Else
'C'est pas un entier
End If
A+
Yoskopolite
Eh ben voilà, c'est ce qu'il nous fallait.
A noter que ça marche aussi avec son inverse :
A = ThisWorkbook.Worksheets("paramètres").Range("B2")
If A - Int(A) = 0 Then
'C'est un entier
Else
'C'est pas un entier
End If
MrMT
avec élégance en plus. Juste ce qu'il me fallait
lermite222
Contributeur
Bonjour tous,
Puisque tu fais remonter ce fil..
1°) Int32, c'est pour du VB net, rien à voir avec VBA
2°) Avec Vartype ça te renvoi la "déclaration du nombre" mais pas sont contenu, exemple
Dim A as long
A = 5
A = 5.34
Les deux vont te renvoyer la même valeur.
A+
LDMBatman
bool result = Int32.TryParse(value, out number);
result : valeur booléen. Vrai si c'est un entier, faux sinon.
Value : la valeur à tester
number : valeur d'entrée/sortie. Renvoie le nombre converti en "entier"
Teliau
Bonjour, j'ai une question. Comment faire pour demander au VBA uniquement des nombres entier
Le mieux aurait été d'ouvrir ton propre sujet et expliquer ton contexte.
En l'état, cette question date de 13 ans, le choses peuvent avoir évolué.
En plus tu commentes une message de LBMBatmann qui est complètement hors sujet, lui il codait en vb.net qui contrairement à ce que son nom laisse penser n'a pas grand chose en commun avec vba.
Les réponses potentiellement utiles à la question initiale sont celles de yoskopilite, michel_m et lermite222, mais ça dépend du contexte d'utilisation.
Donc si avec ces réponses tu ne t'en sors pas, tu ouvres un sujet et tu expliques d'où vient le nombre
D'une cellule
d'un fichier texte
d'une textbox
d'une inpitbox
etc...
lermite222
Contributeur
Et pour conclure et suivre la dernière question...
MsgBox "La valeur sélectionnée " & IIf(A - Fix(A) = 0, "Est un entier", "n'est pas un entier")
A+
michel_m
Contributeur
Bonjour
IIf(A - Fix(A) = 0
B... D...! mais c'est bien sûr!
et ub petit + en vert
Vivement les vacances!!!
tut
Heu, je suis désolé mais je ne suis pas assez calé pour comprendre ton explication.
Je voudrais juste que l'algorythme me renvoie : Vrai si c'est un entier, Faux sinon.
Donc je met un truc du style :
If Bool result (Worksheets("Paramètres").cells(2,2))=False then
MsgBox "Attention ce nombre n'est pas entier"
End if
LDMBatman
int32 monEntier=0;
Bool result = Int32.TryParse(Worksheets("Paramètres").cells(2,2), out monEntier);
If (result)=False then
MsgBox "Attention ce nombre n'est pas entier"
End if
tut
Voila tel que le code que j'ai inséré dans mon programme:
Dim monEntier
int32 monEntier = 0
Bool result = Int32.TryParse(Worksheets("Paramètres").cells(12,6), out monEntier);
If (result) = False Then
MsgBox "Attention ce nombre n'est pas entier"
End If
Il me renvoie un message d'erreur sur la ligne 3 en me mettant en gras "monEntier" et en me disant : Attendu : séprateur de liste ou ).
Avez vous une idée de pourquoi ?
je vous remercie de votre aide! c'est important pour mon travail !
LDMBatman
Je ne suis pas un pro du VB donc mon Int32 n'existe pas forcement, je ne sais pas.
Essaie de supprimer la ligne "int32 monEntier = 0 "
Yoskopolite
Je ne connais pas trop la solution que t'as proposé LDMBatman, donc je ne peux pas trop t'aider. Cependant, on dirait plus du VB que du VBA.
Par contre à mon avis, il doit y avoir d'autres solutions plus simples à comprendre.
Par exemple en utilisant VarType :
Dim TypeDeMaVariable as Integer
TypeDeMaVariable = VarType(Range("A1").Value)
Bon, normalement, il devrait te retourner "2" si c'est un entier. Malgré tout en testant rapidement, il me retourne "5" (ce qui signifie double au lieu d'entier)...
En fouillant de ce côté-ci, ça devrait t'aider (regarde dans l'aide en faisant F1 sur le mot clé VarType).
Malgré tout, si tu cherches à vérifier que c'est un entier, quel autre type de donnée peux-tu avoir ? du texte ? des décimaux ?
michel_m
Contributeur
bonjour
bon, restons en VBA !
VarType(nombre) te renvoie 2 ou 3 s'il s'agit d'un entier (3 pour "long")
attention: nombre ne doit pas être déclaré les valeurs des cellules XL sont toujours considérés comme des "doubles"
par ex A1=3
vartype(range("A1").value) te renvoie 5
donc
if vartype(nombre)=2 OR vartype(nombre)=3 then: msgbox "c'est un entier"
edit à Yosko:
c'est piégé: il ne faut pas déclarer et donc pour Tut ne pas utiliser "option explicit" (souvenir de crises de nerfs) ;-)
:-x
Yoskopolite
Moi je trouve que ça aide à faire du code plus propre ^^
Mais je ne vois pas en quoi ça change quelque chose. Il y verra toujours un double, non ?
michel_m
Contributeur
Effectivement, on peut laisser option explicit si on déclare sous la forme
dim nombre as variant
ou
dim nombre
Il y verra toujours un double,
je ne crois pas
essaies
Option Explicit
Sub entier()
Dim nombre, test As Byte
nombre = 14
test = VarType(nombre)
End Sub
test renvoie 2
si tu mets 14.53 il renvoie 5
et avec 123456 il renvoie 3
a moins qu'il n'y ait un truc que je n'ai pas pigé...
tut
Lorsqu'il renvoie 5, cela désigne quoi ? parcke moi je veux savoir si il y a des chiffre après la virgule ou pas. Par exemple, la j'ai mis 500 et il me renvoie 5 ! seulement si il me renvoi aussi 5 avec 14.53; ce n'est pas cette fonction qui peut m'être utile !
michel_m
Contributeur
Bonjour
Lhermitte a donné la bonne réponse hier: regarde dans la discussion
Yoskopolite
Pour avoir ce genre d'info, tut, je te conseille de prendre le réflexe d'utiliser l'aide d'Office. Quand t'es dans ton code VBA, place le curseur sur le mot clé (ici VarType) et presse la touche "F1". Tu verras qu'il détaille toutes les valeurs retournées par la méthode, en fonction des différents cas.