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 :

Déterminer si un nombre est entier ou pas [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    james bonde 007
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : james bonde 007

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut Déterminer si un nombre est entier ou pas
    Bonjour à vous,

    voilà je fais une petite macro vga sous excel dont voici un bout de code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a = p/4
    If a = entier Then
        u = a / 100
            If u = non.entier Then
                f = 29
            Else
                f = 28
            End If
    Else
        f = 28
    End If
    a est un entier (par ex 2014 ^^)

    Vous l'aurez surement compris, ce code n'est pas bon ^^
    En fait je cherche à savoir dans un 1er temps si le résulta de p/4 (donc a) est un nombre entier
    si c'est le cas je cherche a savoir si a/100 (donc u) n'est pas un entier.

    Le problème c'est que mes cours de VBA remontent un peu et que je ne sais plus comment regarder si un nombre est entier ou pas.

    Pouvez-vous m'aider ?

    Je reste disponible pour plus d'info ^^

    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Regarde du coté de Mod :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Test()
     
        Dim p As Integer
        Dim a As Integer
     
        p = 2000
        a = p Mod 4
     
        MsgBox IIf(a <> 0, "'a' n'est pas un entier !", "'a' est un entier !")
     
    End Sub
    Hervé.

  3. #3
    Membre à l'essai
    Homme Profil pro
    james bonde 007
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : james bonde 007

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Merci !!

    ça ne répond pas au pb mais ça le résoud ^^

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    (a mod 1) =>0 si a entier

    eric

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    ça ne répond pas au pb mais ça le résoud ^^
    C'est ceci que tu cherche ? Dans mon premier code, j'ai fais une erreur, j'ai déclaré a comme Integer alors qu'il fallait le déclarer Single !
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Sub Test()
     
        Dim p As Integer
        Dim a As Single
        Dim f As Integer
     
        p = 420
     
        If p Mod 4 = 0 Then
     
            If p / 4 Mod 100 <> 0 Then
     
                f = 29
     
            Else
     
                f = 28
     
            End If
     
        Else
     
            f = 28
     
        End If
     
    End Sub
    Hervé.

  6. #6
    Membre à l'essai
    Homme Profil pro
    james bonde 007
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : james bonde 007

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Mod permet de résoudre mon problème en effet.

    mais je pensai qu'excel était capable de reconnaître un entier.
    Car si je me souviens bien,
    il y a une propriété comme "integer" qui permet de voir ou dire que "a" est un entier.

    Mes souvenirs sont sûrement faux mais j'aimerai que vous me renseigniez sur ce point.

    Merci pour vos réponses en tout cas.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut,

    Regarde sur internet pour trouver l'inspiration: https://www.google.fr/search?hl=fr&q=test+entier+excel

    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
    17
    18
     
    ' Utilisation en condition réel de EstEntier
    Private Sub IsEntierTest()
        If IsWhole(5.5) Then
            MsgBox "..."
        ElseIf IsWhole(5) Or IsWhole(6) Then
            MsgBox "..."
        Else
            MsgBox "..."
        End If
    End Sub
     
    ' Fonction EstEntier : IsWhole (Est-ce la bonne traduction d'ailleurs ?)
    Function IsWhole(Nombre) As Boolean
        If IsNumeric(Nombre) Then
            IsWhole = (Nombre = Int(Nombre))
        End If
    End Function
    Aïe pour les dépassement de capacité par contre.

    Edit: CInt => Int
    Dernière modification par Invité ; 23/09/2014 à 09h20.

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Tes souvenirs ne sont pas faux.
    Mais (n Mod 1)=0 est beaucoup plus rapide que n-int(n)=0 pour le même résultat : la partie décimale est-elle nulle ?

    eric

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ah, Int effectivement permet de faire passer les variable de type Double sans dépassement de capacité.

  10. #10
    Membre à l'essai
    Homme Profil pro
    james bonde 007
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : james bonde 007

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Ok, je vais essayer.

    Merci pour l'aide en tout cas

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'arrive un peut tard mais...
    la meilleur façon de tester un integer est encore de passer la valeur à un integer qui vas arrondir à l'unité si le nombre est à virgule puis de le comparer au nombre original!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    If IsInterger(3 / 4) = False Then MsgBox "Pas Integer"
    If IsInterger(4 / 4) = True Then MsgBox "C'est un Integer"
    End Sub
     
    Function IsInterger(V) As Boolean
    Dim I As Integer
    IsInterger = True
    I = V
    If I <> V Then IsInterger = False
    End Function
    Dernière modification par Invité ; 24/09/2014 à 11h17.

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    la meilleur façon de tester un integer est encore de passer la valeur à un integer qui vas arrondir à l'unité si le nombre est à virgule puis de le comparer au nombre original!
    C'est vraiment meilleur que :
    if x mod 1 =0 then ?

    eric

  13. #13
    Invité
    Invité(e)
    Par défaut
    test ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Debug.Print 1.5 Mod 1
    Debug.Print 0.000005 Mod 1
    Debug.Print 1500 Mod 1
    Dernière modification par AlainTech ; 25/09/2014 à 18h25. Motif: Suppression de la citation inutile

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Oupssss... Cette machine est folle.
    Effectivement.

    Alors pour rester dans la même compacité, comme la fonction feuille est correcte ça pourrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Debug.Print Evaluate("=mod(1.5, 1)")
    Debug.Print Evaluate("=mod(0.000005 , 1)")
    Debug.Print Evaluate("=mod(1500 , 1)")
    Apparemment il ne connait pas worksheetfunction.mod().
    Sous réserve d'autres surprises

    eric

  15. #15
    Invité
    Invité(e)
    Par défaut
    en revanche ma solution est imparable!
    en plus comme je le fais sous forme de fonction tu l'appel simplement : IsInterger(valeur) comme IsNumeric IsDate!
    Dernière modification par AlainTech ; 25/09/2014 à 18h27. Motif: Suppression de la citation inutile

  16. #16
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    C'est vrai qu'on écrit le corps de la fonction qu'une fois et que le code est plus lisible lors de l'appel.
    Ok :-)
    eric

  17. #17
    Invité
    Invité(e)
    Par défaut
    Salut,

    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    j'arrive un peut tard mais...
    la meilleur façon de tester un integer est encore de passer la valeur à un integer qui vas arrondir à l'unité si le nombre est à virgule puis de le comparer au nombre original!
    Citation Envoyé par rdurupt Voir le message
    en revanche ma solution est imparable!
    en plus comme je le fais sous forme de fonction tu l'appel simplement : IsInterger(valeur) comme IsNumeric IsDate!
    C'est un petit peu la même logique de la fonction que j'ai fourni plus haut, dont l'idée, je l'avoue a été péché sur le NET.

    • Nombre = Int(Nombre) permet de comparer la partie entière de Nombre avec lui-même.
      Si la partie entière égale le nombre lui-même, alors c'est un entier.

    • IsNumeric permet de garantir qu'il sera compatible avec des opération de calcul numérique car c'est un Variant qui est passé pour éviter des conversions de type implicite lors du passage de l'argument.

    • Int permet de prendre en compte les variable de type Double pour supprimer les dépassements de capacité : un nombre de type Double pouvant très bien être un entier.
    Dernière modification par Invité ; 24/09/2014 à 19h23.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonsoir Nouveau2,
    je suis d'accord avec ce que tu dis; si je suis intervenue c'est parce que le sujet cotinuait bien que cloturé; j'ais pas lue!

  19. #19
    Invité
    Invité(e)
    Par défaut
    Salut,

    OK. J'avoue que moi non plus je ne regarde pas toujours les réponses précédente.

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pour vérifier si une année est bissextile sous Excel?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/04/2010, 18h09
  2. verifier qu'un nombre est entier
    Par waspy59 dans le forum C#
    Réponses: 2
    Dernier message: 14/01/2010, 17h00
  3. Savoir si un nombre est entier
    Par ovni dans le forum Langage
    Réponses: 11
    Dernier message: 28/04/2007, 20h19
  4. Réponses: 9
    Dernier message: 30/01/2007, 21h03
  5. Déterminer si un nombre est premier
    Par Fandefruit dans le forum Langage
    Réponses: 7
    Dernier message: 30/12/2005, 10h52

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