IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

quel code pour dire "x n'est pas un Integer" ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut quel code pour dire "x n'est pas un Integer" ?
    Bonjour,

    j'ai défini une variable x en tant que Integer

    Pour qu'il n'y ait pas de bugg, je chercher le code pour dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if x n'est pas Integer then
    .....
    end if
    Malheureusement je n'arrive pas à trouver

    Quelqu'un peut-il m'aider ?

    Merci d'avance
    Nat

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Le mieux ne serait-il pas que tu connaisses les caractéristiques des différents types de données ? Regarde à "Résumé des types de données" dans l'aide en ligne de VBA -> F1

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    La fonction que tu cherches est VarType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Not VarType(x) = vbInteger Then
     ...
    End If
    Sachant qu'en déclarant x comme Integer ce test sera toujours faux et tu n'entreras jamais dans la condition.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci de tenter de m'aider, mais je ne comprends pas...

    J'ai bien sûr tenté l'aide office F1, dont résumé des types de données, mais le plupart du temps c'est du chinois pour moi.

    Il faut savoir que x prend la valeur donnée dans une Textbox.
    Je souhaite que cette valeur soit un nombre entier et je cherche à éviter l'erreur pour "incompatibilité de Type" si la valeur tapée est autre que numérique.

    au départ mon code était

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if x <> vbInteger then
    msgbox("veuillez entrer une donnée valide")
    end if
    Mais dans ce cas, il n'y a que 2 qui est accepté comme donnée valide (le code correspondant à VbInteger).

    Peut être que je ne déclare pas le bon type de variable...

    Merci d'éclairer ma lanterne
    Nat

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Suis je bête !

    Je viens de trouver la réponse à ma question en vous la reformulant

    voilà une partie de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dim x as integer
    
    ...
    
    If IsNumeric(TextBox1.Value) Then
    x = TextBox1.Value
    Else
    MsgBox ("veuillez entrer un nombre valide")
    End
    End If
    c'était aussi simple que cela et cela fait 2 heures que je me casse la tête dessus !

    En tout cas merci de m'avoir aidé à réfléchir
    Nat

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    D'une part ce n'est pas le test que j'ai écris, d'autre part, je le répète, en déclarant x comme Integer ce sera forcément un Integer...

    La valeur d'un textbox est une chaîne. Ce n'est pas x qu'il faut tester, mais le textbox avant de l'affecter à une variable qui sera forcément entière (soit ça provoque une erreur de type soit il y a conversion implicite si la chaîne ne peut pas être convertie en nombre.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim maSaisie as Variant
    maSaisie = txtNombre
    If VarType(maSaisie) <> vbInteger Then
     MsgBox "Veuillez saisir un nombre entier"
     Exit Sub
    Endif
    ' traitement...
    Par exemple.

    EDIT pour au dessus : IsNumeric() teste sur un nombre, pas forcément un entier (décimal, long...)

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    1) à laestic :
    tu es bien trop sûr de toi ...
    essaye donc ceci :

    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
    Private Sub Command1_Click()
      Dim x As Integer
      If Not VarType(x) = vbInteger Then MsgBox x & " = pas entier" Else MsgBox x & " = entier" & vbCrLf & _
      "et regarde ce qu'est devenu ton x"
      x = 12.61
      If Not VarType(x) = vbInteger Then MsgBox x & " = pas entier" Else MsgBox x & " = entier" & vbCrLf & _
      "et regarde ce qu'est devenu ton x"
      'ici, on va ajouter un on error resume next, sinon on se ferait jeter, pardi
      On Error Resume Next
      x = "a"
      If Not VarType(x) = vbInteger Then MsgBox x & " = pas entier" Else MsgBox x & " = entier" & vbCrLf & _
      "et regarde ce qu'est devenu ton x"
      x = a
      If Not VarType(x) = vbInteger Then MsgBox x & " = pas entier" Else MsgBox x & " = entier" & vbCrLf & _
      "et regarde ce qu'est devenu ton x"
    End Sub
    2) à nat44 :
    tu es toi également trop sûr de toi !
    frappe donc 12,61 (avec une virgule) dans ta textbox et vois (et vois aussi ce qu'est devenu ton x, hein...)

    Si tu nous expliquais maintenant ce que tu cherches à faire exactement ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Je vois ce que tu veux dire, mon bout de code "fonctionne", mais n'est pas propre. j'ai la msgbox quand la donnée n'est pas numérique, mais si c'est un décimal la valeur est arrondie automatiquement ce qui va me générer des erreurs de calcul ensuite si elle l'est à l'entier supérieur.

    Par contre je ne comprends pas :
    C'est quoi txtNombre ?

    J'ai fait un copier/coller de ton bout de code, et j'ai une erreur de compilation : variable non définie.

    j'ai modifié comme suit,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim maSaisie As Variant
    maSaisie = Textbox1.Value
    If VarType(maSaisie) <> vbInteger Then
     MsgBox "Veuillez saisir un nombre entier"
     Exit Sub
    End If
    Mais là, quoique j'entre dans ma textbox, la msgbox s'affiche.
    ????

    Nat

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Si tu nous expliquais maintenant ce que tu cherches à faire exactement ?
    on gagnera peut-être alors beaucoup de temps

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bon (à tout hasard, donc)...

    Voilà une solution (ce sera la énième manière différente de traiter cette question plus que récurrente) ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Command1_Click()
      If Len(Trim(Str(Val(Textbox1.Text)))) = Len(Textbox1.Text) And IsNumeric(Textbox1.Text) Then
        MsgBox "ok"
      Else
        MsgBox "pas bon"
      End If
    End Sub
    et tu seras ainsi à l'abri de tout ...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Ok on y va. Je vais essayer d'être claire

    Je suis en train de mettre en place des outils de gestion informatisé pour un artisan (stage DUT GEA). Mais avant le début de mon stage, les macros et VBA m'étaient totalement inconnus.

    Et là je tente de lui faire un suivi de sa trésorerie sur Excel. J'ai donc créé diverses userform pour cela. L'enregistrement immédiat d'une opération fonctionne et maintenant j'entreprends la planification d'opérations (échéances de prêts bancaires par exemple).

    Pour cela j'ai besoin entre autre du nombre d'échéances (c'est mon x) et de la date de la 1ère échéance. Toutes ces données s'inscrivent dans un tableau qui doit me servir par la suite à enregistrer les opérations dans mon tableau de trésorerie, quand la date d'échéance est arrivée, et pendant x mois si la périodicité est mensuelle.

    C'est pour cela que j'ai besoin que x soit un entier (et pas arrondi au supérieur)

    Là je viens de bidouiller un truc qui a l'air de fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If IsNumeric(TextBox1.Value) And TextBox1.Value = Format(TextBox1.Value, "0") Then
    x = TextBox1.Value
    Else
    MsgBox ("veuillez saisir un nombre entier")
    Exit Sub
    End If
    Qu'en pensez-vous ?
    Il y a peut-être mieux comme écriture ?

    Merci d'avance
    Nat

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    énième + 1 méthode, donc ... il en existe plein d'autres encore ...

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Si ton textbox est dans un userform tu as une manière simple de vérifier le code saisi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim st as string
        st = String(Len(TextBox1), "#")
        If Not IsNumeric(TextBox1.Value) Or Not TextBox1.Value Like st Then
                MsgBox "Veuillez saisir une valeur entière"
                Cancel = True
        End If
    End Sub
    Si tu souhaites que le nombre de chiffre soit fixe, tu peux fixer st à cette dimension
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsNumeric(TextBox1.Value) Or Not TextBox1.Value Like "#####" Then
    Le code ci-dessus fixe à 5 le nombre de chiffres
    Mais ainsi tu ne pourras pas saisir de décimaux.
    Cancel = True impose de retourner dans la textbox.
    Bonne soirée

    NB - Ce code impose que ce soit un entier mais n'impose pas que ce soit un "integer" au sens de VBA (inférieur à 32768)

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci à tous pour votre aide
    Nat

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel code pour trouver l'OS ?
    Par ddorange dans le forum Débuter
    Réponses: 2
    Dernier message: 12/02/2010, 13h28
  2. quel code pour enregistrer une image dans la base de donnée
    Par bambi98 dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/05/2009, 15h55
  3. Réponses: 2
    Dernier message: 08/02/2009, 18h55
  4. quel script pour dire de charger une autre version du site si IE6
    Par Anonyme1 dans le forum Webdesign & Ergonomie
    Réponses: 8
    Dernier message: 12/12/2007, 17h25
  5. Quel code pour suppression enregistrement ?
    Par Nessie37 dans le forum VBA Access
    Réponses: 30
    Dernier message: 19/10/2007, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo