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+
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
Utilisateur anonyme
>
Teliau
Bonjour
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
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 !
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 ?
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) ;-)
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 !
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.
A noter que ça marche aussi avec son inverse :
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+