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 :

Le plus grand des 3


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut Le plus grand des 3
    Bonjour tout le monde,
    J'essaye d'écrire ce programme mais le programme ne retourne pas la bonne valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function leplusgranddes3(ByVal X As Double, ByVal Y As Double, ByVal Z As Double) As Double
    If X > Y Then
    leplusgranddes3 = X
    ElseIf Y > Z Then
    leplusgranddes3 = Y
    Else
    leplusgranddes3 = Z
    End If
    End Function
     
    Sub Test()
    MsgBox leplusgranddes3(10, 8, 25)
    End Sub
    Le programme me retounre 10 or je veux qu'il retourne 25. Je pense que le problème vient de if. Je crois que j'utilise mal. Pourriez-vous me corriger s'il vous plaît.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut
    je crois qu'il faut que je fasse
    If X > Y and If X>Z
    = X mais je ne sais pas comment rediger sous excel.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    c'est parce que tu ne comprend pas comment fonctionne la boucle if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function leplusgranddes3(ByVal X As Double, ByVal Y As Double, ByVal Z As Double) As Double
    If X > Y Then
    leplusgranddes3 = X
    ElseIf Y > Z Then
    leplusgranddes3 = Y
    Else
    leplusgranddes3 = Z
    End If
    End Function
     
    Sub Test()
    MsgBox leplusgranddes3(10, 8, 25)
    End Sub
    dans ton exemple
    X = 10, Y = 8 et Z =25
    If X > Y Then leplusgranddes3 = X
    si 10 est plus grand que 8 alors leplusgranddes3 est 10
    a partir de là, le programme n'as pas de raison d'aller voir le elsif puisque la condition est réalisée, il va directement au end if
    tu pourrais t'en apercevoir si tu déroulais ton programme en pas par pas (touche "F8")
    la bonne méthode serais d'imbriquer des boucle if
    if x>y then (je compare x a y)
    if x>z si x est le plus grand je le compare a z
    elseif y>z sinon, c'est que y est le plus grand, c'est lui que je compare a z

    sinon tu pourrais utiliser la fonction max
    et une piste de plus, il me semble qu'il y avait déja eu une grande discussion sur cet exercice sur ce forum il n'y a pas si longtemps que ça
    bon dimanche

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    essaie

    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
     
    Function leplusgranddes3(ByVal X As Double, ByVal Y As Double, ByVal Z As Double) As Double
     
    If X>Y and X>Z then
       leplusgranddes3=X
    Else
        If Y>Z then
             leplusgranddes3=Y
        Else
             leplusgranddes3=Z
        End IF
    End If
     
    End Function
     
    Sub Test()
    MsgBox leplusgranddes3(10, 8, 25)
    End Sub

  5. #5
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    Pourquoi t’obstines-tu à ne pas utiliser la balise Code ? Je te rappelle que la manip ne concerne nullment Excel, mais le navigateur. Quel navigateur utilises-tu ?

    Ne trouves-tu pas que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
        MsgBox LePlusGrandDes3(10, 8, 25)
    End Sub
    est beaucoup plus agréable que :

    Sub Test()
    MsgBox LePlusGrandDes3(10, 8, 25)
    End Sub

    Pour des raisons de lisibilité également, LePlusGrandDes3 est mieux que leplusgranddes3.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function LePlusGrandDes3(ByVal X As Double, ByVal Y As Double, ByVal Z As Double) As Double
            If X > Y Then
                    If X >= Z Then
                        LePlusGrandDes3 = X
                    Else
                        LePlusGrandDes3 = Z
                    End If
            ElseIf Y > Z Then
                LePlusGrandDes3 = Y
            Else
                LePlusGrandDes3 = Z
            End If
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
        MsgBox LePlusGrandDes3(10, 8, 25)
    End Sub
    S’il s’agit d’apprendre à utiliser If, Then, Else, le code ci-dessus fait l’affaire. Cependant, les "ByVal" sont inutiles, et surtout il ne faut pas réinventer la roue : de nombreuses foncions existent dans Excel, qu’on peut appeler directement de VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function LePlusGrandDes3(X As Double, Y As Double, Z As Double)
        LePlusGrandDes3 = WorksheetFunction.Max(X, Y, Z)
    End Function
     
    Sub Test()
        MsgBox LePlusGrandDes3(34, 108, 25)
    End Sub
    ou mieux encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
    MsgBox WorksheetFunction.Max(34, 108, 25)
    End Sub
    Dans VBA, exploiter les possibilités de l’application associée est essentiel :

    • Moins de code à écrire
    • Moins de risques de bugs
    • Plus rapide à l’exécution
    • Maintenance plus simple.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut
    Merci à tous. En fait j'utlise firefox et je ne vois pas toujours comment je peux faire pour ecrire comme vous avec le cadre bleu

  7. #7
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Citation Envoyé par bolltt Voir le message
    Merci à tous. En fait j'utlise firefox et je ne vois pas toujours comment je peux faire pour ecrire comme vous avec le cadre bleu

    Tu as une barre d'outils pour faire de la mise en forme lorsque tu écris.
    Cette barre d'outils se trouve SUR LA PAGE et pas dans ton navigateur.
    Donc, le navigateur, on s'en fout !
    Tu vois les boutons G, I, S, ... et bien, il y a le bouton # puor le code.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut
    ah merci sayé je vois. la prochaine fois je vous ferai avec le cadre bleu

  9. #9
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    et pour une fonction qui fonctionne dans tous ls softs (Excel, ET access, ET word, ET...)
    N'utiliser que des concepts propres à VBA.

    Ainsi, comme ceci, ton code fonctionnera parfaitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function LePlusGrandDesTrois(ByVal X As Double, ByVal Y As Double, ByVal Z As Double) As Double
        Select Case True
            Case X >= Y And X >= Z
                LePlusGrandDesTrois = X
            Case Y >= X And Y >= Z
                LePlusGrandDesTrois = Y
            Case Z >= Y And Z >= X
                LePlusGrandDesTrois = Z
        End Select
    End Function

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/06/2011, 12h06
  2. Réponses: 8
    Dernier message: 24/04/2009, 19h13
  3. Réponses: 1
    Dernier message: 07/05/2007, 21h12
  4. [DATE] - Recup des N dates plus grandes
    Par jacquesh dans le forum Oracle
    Réponses: 3
    Dernier message: 24/04/2007, 16h10
  5. VBA_E : Selection des 5 plus grandes valeurs d'une colonne..
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/09/2006, 18h39

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