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 :

Probleme avec Select Case base sur le rapport de deux variables : [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 125
    Points
    125
    Par défaut Probleme avec Select Case base sur le rapport de deux variables :
    Bonjour tout le monde,

    J’ai la fonction qui compare la valeur de deux variables et attribue une valeur soit 0, 1 ou 2 a la variable Rlt.

    Mais quand je le teste, cela ne marche pas. Aucun scenario ne semble satisfaire a ma fonction. En fait, SelectCase ne reconnait pas les variables HO et CoL comme etant les composents de sa variable ie (HO/CoL)


    Svp aidez moi.


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Function BranchFct(CoL As Variant, HO As Variant) As Variant
     
        Dim Rlt  As Integer
     
     
     
        If IsNull(HO) Or IsNull(CoL) Then
            Rlt = 0
        Else
     
            Select Case (HO / CoL)   'si HO est superieur a CoL
                Case (HO / CoL) > 1
                    Rlt = 1
     
                Case (HO / CoL) < 1  'si Ho est inferieur a CoL
                    If CoL > 3 Then
                        Rlt = 1
                    Else
                        Rlt = 2
                    End If
     
     
                Case (HO / CoL) = 1  'si HO = CoL
                    If CoL > 4 Then
                        Rlt = 2
                    Else
                        Rlt = 1
                    End If
     
            End Select
     
     
     
        End If
     
     
     
     
        BranchFct = Rlt
     
    End Function
     
    Sub Call_Fct()
    'juste un essai.
     
     
        Debug.Print BranchFct(10, 5)
     
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 921
    Points : 28 907
    Points
    28 907
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Sans avoir regardé le reste de ton code, il y a à la première lecture une erreur de syntaxe
    Si tu fais un Select case (HO/COL), le test qui suit n'est pas Case (HO / CoL) > 1 mais Case > 1
    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
    Select Case (HO / CoL)   'si HO est superieur a CoL
                Case Is > 1
                    Rlt = 1
                Case Is < 1 'si Ho est inferieur a CoL
                    If CoL > 3 Then
                        Rlt = 1
                    Else
                        Rlt = 2
                    End If
                Case Is = 1 'si HO = CoL
                    If CoL > 4 Then
                        Rlt = 2
                    Else
                        Rlt = 1
                    End If
            End Select

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Comme cela avec utilisation de select

    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
    30
    31
    32
    33
    34
    Function BranchFct(CoL As Variant, HO As Variant) As Variant
     
        Dim Rlt  As Integer
     
        If IsNull(HO) Or IsNull(CoL) Then
            Rlt = 0
        Else
     
            Select Case (HO / CoL)   'si HO est superieur a CoL
                Case Is > 1
                    Rlt = 1
     
                Case Is < 1 'si Ho est inferieur a CoL
                    If CoL > 3 Then
                        Rlt = 1
                    Else
                        Rlt = 2
                    End If
     
                Case 1  'si HO = CoL
                    If CoL > 4 Then
                        Rlt = 2
                    Else
                        Rlt = 1
                    End If
     
            End Select
     
     
        End If
     
        BranchFct = Rlt
     
    End Function
    Tu peux aussi faire comme cela. Cela évite la division et je trouve que c'est plus lisible
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Function BranchFct(CoL As Variant, HO As Variant) As Variant
     
        Dim Rlt  As Integer
     
     
     
        If IsNull(HO) Or IsNull(CoL) Then
            Rlt = 0
        Else
     
            Select Case HO   'si HO est superieur a CoL
                Case Is > CoL
                    Rlt = 1
     
                Case Is < CoL 'si Ho est inferieur a CoL
                    If CoL > 3 Then
                        Rlt = 1
                    Else
                        Rlt = 2
                    End If
     
     
                Case CoL  'si HO = CoL
                    If CoL > 4 Then
                        Rlt = 2
                    Else
                        Rlt = 1
                    End If
     
            End Select
     
     
        End If
     
     
        BranchFct = Rlt
     
    End Function

  4. #4
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 804
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 804
    Points : 32 082
    Points
    32 082
    Par défaut
    ou alors, mon préféré, le select case true, qui permet de déporter l'intégralité de la condition au niveau de chaque branche :

    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
     
           Select Case true
                Case (HO / CoL) > 1
                    Rlt = 1
                Case (HO / CoL) < 1  'si Ho est inferieur a CoL
                    If CoL > 3 Then
                        Rlt = 1
                    Else
                        Rlt = 2
                    End If
                Case (HO / CoL) = 1  'si HO = CoL
                    If CoL > 4 Then
                        Rlt = 2
                    Else
                        Rlt = 1
                    End If 
            End Select
    Mais là, c'est juste une question de préférence.

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 125
    Points
    125
    Par défaut
    grand merci les gars pour vos reponses les unes aussi ingenieuses que les autres.

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

Discussions similaires

  1. Mise à jour Base relationnelle, probleme avec Select Last_Insert_id()
    Par SGASSAMA dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 13/07/2009, 19h19
  2. [VB]probleme avec select case
    Par mickael99 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 03/02/2006, 14h07
  3. Probleme avec Select Case
    Par GeffD dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 07/03/2005, 15h28
  4. [ADO.NET] Problème avec Insert dans base de données
    Par mpascolo dans le forum Accès aux données
    Réponses: 9
    Dernier message: 24/01/2005, 09h36
  5. [C#][débutant] Probleme avec un case
    Par Le Basque dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/01/2005, 12h45

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