VBA nombre entier [Résolu/Fermé]

Signaler
-
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
-
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

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 114
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
83
Date d'inscription
lundi 14 juillet 2008
Statut
Membre
Dernière intervention
9 novembre 2012
7
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
avec élégance en plus. Juste ce qu'il me fallait
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 114
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+
Messages postés
95
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
10 avril 2014
38
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"
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 114
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+
Messages postés
16260
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 octobre 2020
3 051
Bonjour
IIf(A - Fix(A) = 0

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


Vivement les vacances!!!
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
Messages postés
95
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
10 avril 2014
38
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
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 !
Messages postés
95
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
10 avril 2014
38
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 "
Messages postés
83
Date d'inscription
lundi 14 juillet 2008
Statut
Membre
Dernière intervention
9 novembre 2012
7
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 ?
Messages postés
16260
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 octobre 2020
3 051
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
Messages postés
83
Date d'inscription
lundi 14 juillet 2008
Statut
Membre
Dernière intervention
9 novembre 2012
7
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 ?
Messages postés
16260
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 octobre 2020
3 051
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é...
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 !
Messages postés
16260
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 octobre 2020
3 051
Bonjour
Lhermitte a donné la bonne réponse hier: regarde dans la discussion
Messages postés
83
Date d'inscription
lundi 14 juillet 2008
Statut
Membre
Dernière intervention
9 novembre 2012
7
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.