VBA nombre entier

Résolu/Fermé
tut - 1 juil. 2010 à 14:33
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
- 24 mai 2013 à 19:11
J'aimerai demander en VBA de vérifier que le valeur de la cellule 2,2 de la feuille "paramètres" est un nombre entier. Savez vous comment faire ?

7 réponses

lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
1 juil. 2010 à 16:51
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+
5
Yoskopolite
Messages postés
83
Date d'inscription
lundi 14 juillet 2008
Statut
Membre
Dernière intervention
9 novembre 2012
8
1 juil. 2010 à 16:59
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
0
avec élégance en plus. Juste ce qu'il me fallait
0
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
24 mai 2013 à 19:11
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+
0
LDMBatman
Messages postés
95
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
10 avril 2014
39
1 juil. 2010 à 14:48
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"
1
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 193
1 juil. 2010 à 17:15
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+
1
michel_m
Messages postés
16577
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 août 2022
3 278
1 juil. 2010 à 17:24
Bonjour
IIf(A - Fix(A) = 0

B... D...! mais c'est bien sûr!
et ub petit + en vert


Vivement les vacances!!!
0
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
0
LDMBatman
Messages postés
95
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
10 avril 2014
39
1 juil. 2010 à 15:01
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
0

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

Posez votre question
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 !
0
LDMBatman
Messages postés
95
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
10 avril 2014
39
1 juil. 2010 à 15:45
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 "
0
Yoskopolite
Messages postés
83
Date d'inscription
lundi 14 juillet 2008
Statut
Membre
Dernière intervention
9 novembre 2012
8
1 juil. 2010 à 15:48
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 ?
0
michel_m
Messages postés
16577
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 août 2022
3 278
Modifié par michel_m le 1/07/2010 à 16:02
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
0
Yoskopolite
Messages postés
83
Date d'inscription
lundi 14 juillet 2008
Statut
Membre
Dernière intervention
9 novembre 2012
8
1 juil. 2010 à 16:50
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 ?
0
michel_m
Messages postés
16577
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 août 2022
3 278
1 juil. 2010 à 17:13
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é...
0
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 !
0
michel_m
Messages postés
16577
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
22 août 2022
3 278
2 juil. 2010 à 14:07
Bonjour
Lhermitte a donné la bonne réponse hier: regarde dans la discussion
0
Yoskopolite
Messages postés
83
Date d'inscription
lundi 14 juillet 2008
Statut
Membre
Dernière intervention
9 novembre 2012
8
2 juil. 2010 à 14:42
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.
0