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 :

fonction qui compare 3 nombres


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Par défaut fonction qui compare 3 nombres
    Bonsoir , j'ai écrit une fonction qui compare 3 nombres et affiche le plus grand mais apparemment elle ne marche pas , elle ne me renvoit pas le plus grand :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function LePlusGrandDes3(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
        If (x And y) < z Then
        LePlusGrandDes3 = z
        ElseIf (y And z) < x Then
        LePlusGrandDes3 = x
        Else
        LePlusGrandDes3 = y
        End If
    End Function
    quelqu'un pourrait il me dire ce qui ne va pas svp ?

    merci
      0  0

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function LePlusGrandDes3(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
      LePlusGrandDes3 = Application.Max(x, y, z)
    End Function
    celle ci fonctionne aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Function LePlusGrandDes3(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
        If x < z And y < z Then
        LePlusGrandDes3 = z
        ElseIf y < x And z < x Then
        LePlusGrandDes3 = x
        Else
        LePlusGrandDes3 = y
        End If
    End Function
    cordialement
      0  0

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Par défaut
    exact ça marche mais j'ai 2 interrogations :

    1.pourquoi la mienne ne marchait pas alors qu'elle est dit la même chose que la tienne ?

    2.voici une fonction équivalente à celle que tu as faite et elle ne compile pas , pourtant elle est tirée de la correction de l'exercice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function LePlusGrandDes3(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
    If x > y Then
      LePlusGrandDes3 = LePlusGrandDes3(x, y)
    Else
      LePlusGrandDes3 = LePlusGrandDes3(y, z)
    End If
    End Function
    ça me dit argument non facultatif...
      0  0

  4. #4
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir
    point 1
    voir le post de Gorfael

    point 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LePlusGrandDes3(x, y)
    la fonction à trois arguments, ici il n'y en a que deux, VBE te dit qu'il en manque 1

    cordialement
      0  0

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Par défaut
    ok donc j'ai tout compris sauf une chose , pour le dernier exemple que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function LePlusGrandDes3(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
    If x > y Then
      LePlusGrandDes3 = LePlusGrandDes3(x, z)
    Else
      LePlusGrandDes3 = LePlusGrandDes3(y, z)
    End If
    End Function
    Je comprends pas pq cette fonction marcherait car l'instruction LePlusGrandDes3(x, z) ne compare absolument pas la valeur de x et z , d'ailleurs cette ligne n'a aucun sens je trouve , ...en français on traduirait cette fonction par :

    Si x est plus grand que y alors LePlusGrandDes3(x ,z)...ça compare rien....
      0  0

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut
    Citation Envoyé par Maxence45 Voir le message
    ok donc j'ai tout compris sauf une chose , pour le dernier exemple que j'ai mis :


    Je comprends pas pq cette fonction marcherait car l'instruction LePlusGrandDes3(x, z) ne compare absolument pas la valeur de x et z , d'ailleurs cette ligne n'a aucun sens je trouve , ...en français on traduirait cette fonction par :

    Si x est plus grand que y alors LePlusGrandDes3(x ,z)...ça compare rien....
    Avec cette fonction, on demande à VBA de comparer X et Y. Si X > Y, il compare X et Z et renvoie le plus grand, sinon, il compare Y et Z et renvoie le plus grand. (C'est pour le concept, car la traduction en VBA laisse à désirer). Fais ce cheminement sur papier et tu verras que cela fonctionne (outre les égalités qui passent à la trappe...)

    Cette fonction récursive (qui s'appelle elle-même) est impossible à utiliser puisque, comme le dit Fred, il manque un argument lorsque la fonction s'appelle.

    Pour qu'elle fonctionne, il faudrait au moins que le dernier argument soit optionnel puis que l'on teste à l'intérieur de la fonction que le dernier argument est passé ou pas.

    Je passe le fait qu'attribuer le nom LePlusGrandDesTrois à une fonction qui pourrait ne comparer que deux arguments est pour moi un non-sens.

    Es-tu certain d'avoir retranscrit correctement la fonction proposée dans le livre que tu utilises?
    Je suis très curieux de savoir de quel bouquin tu as tiré cet exercice (plus la page ou le chapitre), pour pouvoir me faire une idée du contexte dans lequel cette formule a été proposée, car si le bouquin donne cette fonction telle que tu la présentes, il est juste bon à faire du feu...(et j'ai quand même un très gros doute là-dessus )
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Citation Envoyé par Maxence45 Voir le message
    ok donc j'ai tout compris sauf une chose , pour le dernier exemple que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function LePlusGrandDes3(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
    If x > y Then
      LePlusGrandDes3 = LePlusGrandDes3(x, z)
    Else
      LePlusGrandDes3 = LePlusGrandDes3(y, z)
    End If
    End Function
    Je comprends pas pq cette fonction marcherait car l'instruction LePlusGrandDes3(x, z) ne compare absolument pas la valeur de x et z , d'ailleurs cette ligne n'a aucun sens je trouve , ...en français on traduirait cette fonction par :

    Si x est plus grand que y alors LePlusGrandDes3(x ,z)...ça compare rien....
    Salut
    Problème de logique excel :
    la comparaison se fait par le lancement d'une function(celle que tu utilises). Mais il faudrait la modifier, introduire [Optional] et gérer pour que ça ne finisse pas en bouclage infini. Une solution sans récurrence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function LePlusGrandDes3(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
    If x > y Then
      LePlusGrandDes3 = IIf(x > z, x, z)
    Else
      LePlusGrandDes3 = IIf(y > z, y, z)
    End If
    End Function
    A+
    NOTA à force de chercher des solutions dans les livres et les sites, je me suis aperçu qu'il ne faut pas se fier aveuglément aux auteurs. Dans les forums, les proposeurs de solutions les testent (pas toujours, mais presque : quelques fois c'est tellement simple que...). Mais quand ça passe entre les mains de personnes plus sensibles à la longueur de l'exemple qu'à sa validité, on a des surprises.
      0  0

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut
    Les fonction VBa respectent les mêmes règles que les fonctions excel
    If (x And y) < z Then se dit entre humains, mais est incompréhensible pour Excel :
    If (x < z) And (y < z) Then
    est la bonne instruction (quoique celle de fred65200 semble plus adaptée)
    A+
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. fonction qui calcule le nombre de checkbox cochés
    Par namstou3 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2007, 14h55
  2. fonction pour comparer des nombres
    Par insa59 dans le forum Débuter
    Réponses: 5
    Dernier message: 21/06/2007, 11h34
  3. fonction qui renvoie le nombre de possibilité
    Par psyko72 dans le forum Mathématiques
    Réponses: 8
    Dernier message: 21/04/2007, 22h59
  4. Fonction qui totalise des nombres mais met 1 au lieu de 1.5
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/09/2006, 17h05
  5. Fonction qui compte le nombre de jours ouvrés par mois
    Par griese dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/07/2006, 16h32

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