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 :

VBA fonction IsEven ne fonctionne pas


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    AKM
    Inscrit en
    Février 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : AKM
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2014
    Messages : 17
    Points : 18
    Points
    18
    Par défaut VBA fonction IsEven ne fonctionne pas
    Bonjour à tous,

    Je suis débutant en VBA.
    Je voudrais faire un test pour savoir si un nombre est pair ou impair.
    J'ai pensé utilisé la fonction IsEven.
    Par contre je ne parviens pas à la faire fonctionner...
    Quelque soit le nombre que je test, j'obtiens toujours faux.
    J'ai récupérer un exemple sur le site Microsoft (je le joins juste après) et j'obtiens la même chose, le résultat du test est toujours Faux.

    Pourriez vous m'aider?
    Merci et bonne journée!

    Pour info ceci est tapé dans un module

    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
    29
       Public Function IsEven(counter) As Boolean
    End Function
     
       Sub EvenOrOdd()
     
           'Enter loop
           For counter = 1 To 5
     
               'Use the IsEven function to determine whether or not the number
               'being tested is even: a return value of False means the number
               'is odd. You could alternatively use the IsOdd function.
     
               ValueIsEven = IsEven(counter)
     
               'If ValueIsEven is true, then...
               If ValueIsEven = True Then
     
                   '...display a message box stating so.
                   MsgBox "The value " & counter & " is even."
     
               'Otherwise...
               Else
     
                   '...display a message box stating that the value is odd.
                   MsgBox "The value " & counter & " is odd."
               End If
     
           Next counter
       End Sub

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Cela m'étonnerait que cette horreur provienne de Microsoft !

    Et dire qu'il n'y a besoin que d'une seule ligne de code !
    Pour rappel un nombre est pair si le reste de la division par deux est égal à zéro !
    Donc simple avec l'opérateur Mod
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Cette fonction fonctionne bien. Mais elle est vide. Donc elle ne sert à rien. Il ne reste plus qu'à y mettre au moins une ligne de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Function IsEven(counter) As Boolean
    End Function
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function IsEven(counter) As Boolean
     
    If Int(counter / 2) = counter / 2 Then
     IsEven = True
    Else
     IsEven = False
    End If
     
    End Function
     
    Sub tt()
     result = IsEven(5)
    End Sub
    Cordialement

    Docmarti.

  4. #4
    Membre à l'essai
    Homme Profil pro
    AKM
    Inscrit en
    Février 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : AKM
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2014
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Marc-L Voir le message




    Cela m'étonnerait que cette horreur provienne de Microsoft !

    Et dire qu'il n'y a besoin que d'une seule ligne de code !
    Pour rappel un nombre est pair si le reste de la division par deux est égal à zéro !
    Donc simple avec l'opérateur Mod
    Je te joins l'adresse où j'ai trouvé cela.

    http://support.microsoft.com/kb/150374/en-us

    Citation Envoyé par Docmarti Voir le message
    Cette fonction fonctionne bien. Mais elle est vide. Donc elle ne sert à rien. Il ne reste plus qu'à y mettre au moins une ligne de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Function IsEven(counter) As Boolean
    End Function
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function IsEven(counter) As Boolean
     
    If Int(counter / 2) = counter / 2 Then
     IsEven = True
    Else
     IsEven = False
    End If
     
    End Function
     
    Sub tt()
     result = IsEven(5)
    End Sub


    Merci de ton aide.
    Je ne connaissais INT. Effectivement en l'utilisant je suis parvenu à faire ce que je voulais.
    Par contre, je me demande toujours à quoi sert IsEven.
    Je pensai que l'on faisait un test directement avec IsEven sur un nombre pour savoir si il était pair ou impair.
    Mais ta solution (qui fonctionne parfaitement) est un moyen détourné de faire ce test. Le résultat me va très bien! C'est juste que par curiosité, je me demande à quoi sert IsEven.

  5. #5
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut vba-fonction-iseven
    Bonjour,

    Ceci te renvoie exactement "vrai" ou "faux" selon que la cellule b2 est "paire" ou "impaire"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub pair()
    resultat = WorksheetFunction.IsEven(Sheets("feuil1").Cells(2, 2))
    MsgBox resultat
    End Sub
    je t'accorde que dans l'aide F1 un exemple ne serait pas superflu pour le débutant.

    Cordialement,

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par sambrelin Voir le message
    Merci de ton aide.
    Je ne connaissais INT. Effectivement en l'utilisant je suis parvenu à faire ce que je voulais.
    Par contre, je me demande toujours à quoi sert IsEven.
    Je pensai que l'on faisait un test directement avec IsEven sur un nombre pour savoir si il était pair ou impair.
    Mais ta solution (qui fonctionne parfaitement) est un moyen détourné de faire ce test. Le résultat me va très bien! C'est juste que par curiosité, je me demande à quoi sert IsEven.

    IsEven n'est pas une fonction de VBA. C'est une fonction de Excel. Pour utiliser la fonction de Excel, il faut indiquer que tu veux utiliser une fonction de Excel avec la syntaxe proposée par nibledispo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat = WorksheetFunction.IsEven(Sheets("feuil1").Cells(2, 2))
    Si tu ne veux pas utiliser la fonction IsEven de Excel, tu peux créer ta propre fonction personnalisée comme tu as fait, mais il faut y mettre du code.
    Cordialement

    Docmarti.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    je rejoint un peu Marc L sur ce coup la

    Cela m'étonnerait que cette horreur provienne de Microsoft !


    faire une fonction pour l'utiliser comme une variable booléenne ca me parait un peu pédaler dans la choucroutte

    a mediter
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut autre alternative
    une autre alternative
    test sur la cellule "A1"

    FONCTION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function test_pair( cellule as range )
    test_pair = cellule Mod 2 = 0
    End Function
    APPEL A LA FONCTION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    MsgBox test_pair [A1]  
    End Sub
    Et puisque tu tiens a "iseven"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function IsEven( cellule as range )
    IsEven= cellule Mod 2 = 0
    End Function
    test de la fonction LA FONCTION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    msgbox IsEven [A1]  
    nd Sub
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par patricktoulon Voir le message

    faire une fonction pour l'utiliser comme une variable booléenne ca me parait un peu pédaler dans la choucroutte

    a mediter
    Tu parles sérieusement ?
    C'est pourtant très souvent le cas qu'une fonction retourne simplement une valeur Vrai ou Faux.

    Exemple bien connu : function FileExists
    Cordialement

    Docmarti.

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour Docmarti

    Non je suis sérieux

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim pair as boolean
    pair  = [A1] Mod 2 = 0
    msgbox pair
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par sambrelin Voir le message
    Je te joins l'adresse où j'ai trouvé cela.

    http://support.microsoft.com/kb/150374/en-us
    APPLIES TO
    Microsoft Excel 97 Standard Edition
    Microsoft Excel 95 Standard Edition
    Microsoft Excel 5.0 Standard Edition
    Microsoft Excel 98 for Macintosh

    C'est une page qui concerne Excel 97 et 2 versions antérieures. La fonction IsEven ne faisait pas partie de Excel à l'époque. Elle faisait partie d'un module séparé : Microsoft Excel Analysis ToolPak. Les choses ont changé depuis et c'est devenu une fonction native de Excel : c'est la fonction Est.Pair qui peut être utilisée dans les formules.
    Cordialement

    Docmarti.

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par sambrelin Voir le message
    Je te joins l'adresse où j'ai trouvé cela.

    http://support.microsoft.com/kb/150374/en-us
    Eh bien oui l'article date un peu ! Autant pour moi …

    Soit via l'opérateur Mod, soit par la fonction de feuille de calculs Application.IsEven
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

Discussions similaires

  1. [Mail] fonction mail qui fonctionne pas
    Par digger dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2006, 22h28
  2. fonction ridicule qui fonctionne pas sous firefox
    Par Isses dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/06/2006, 12h08
  3. [VBA] Column(x) ne fonctionne pas
    Par menguygw dans le forum Access
    Réponses: 4
    Dernier message: 26/04/2006, 15h43
  4. fonction plpgsql qui fonctionne pas...
    Par Empty_body dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/01/2006, 18h22
  5. La fonction CurrentDb() ne fonctionne pas dans une requête
    Par Sébastien Le Goyet dans le forum Access
    Réponses: 8
    Dernier message: 24/11/2005, 17h46

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