[RESOLU] Select case avec deux expression testées

Enerjp

XLDnaute Junior
Bonjour tout le monde,

Alors voila, pour le moment j'ai deux select case avec les mêmes instructuions mais deux expression testées différentes... J'aimerai donc savoir s'il n"existe pas une méthode de ce genre :

Code:
                    classe = resultat1
                    classeMax = resultat2

            Select Case classe And classeMax
                Case Is <= 45
                        classe = "Classe A"
                        classeMax = "Classe A"
                Case Is <= 75
                        classe = "Classe B"
                        classeMax = "Classe B"
                Case Is <= 85
                        classe = "Classe C"
                        classeMax = "Classe C"
                Case Is <= 100
                        classe = "Classe D"
                        classeMax = "Classe D"
                Case Is <= 155
                        classe = "Classe E"
                        classeMax = "Classe E"
                Case Is <= 225
                        classe = "Classe F"
                        classeMax = "Classe F"
                Case Is <= 280
                        classe = "Classe G"
                        classeMax = "Classe G"
                Case Is <= 355
                        classe = "Classe H"
                        classeMax = "Classe H"
                Case Is > 355
                        classe = "Classe I"
                        classeMax = "Classe I"
                Case Else
                        classe = "Classe 0"
                        classeMax = "Classe 0"
            End Select

Au lieu de le faire deux fois... :

Code:
classe = resultat1
         
            Select Case classe
                Case Is <= 45
                        classe = "Classe A"
                ....

            End Select

classeMax = resultat2

            Select Case classeMax
                Case Is <= 45
                        classeMax = "Classe A"
                  ....

            End Select

Voila merci d'avance
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Select case avec deux expression testées

Bonjour,
comme ça:
Code:
Sub appel()
Call test(classe, resultat1)
Call test(classeMax, resultat2)
End Sub
Code:
Sub test(nom_classe, resultat)
  
            Select Case nom_classe
                Case Is <= 45
                        nom_classe = "Classe A"
                       
                Case Is <= 75
                        nom_classe = "Classe B"
                        
                Case Is <= 85
                        nom_classe = "Classe C"
                        
                Case Is <= 100
                        nom_classe = "Classe D"
                       
                Case Is <= 155
                        nom_classe = "Classe E"
                        
                Case Is <= 225
                        nom_classe = "Classe F"
                        
                Case Is <= 280
                        nom_classe = "Classe G"
                       
                Case Is <= 355
                        nom_classe = "Classe H"
                        
                Case Is > 355
                        nom_classe = "Classe I"
                        
                Case Else
                        nom_classe = "Classe 0"
                        
            End Select
End Sub
A+
 

ROGER2327

XLDnaute Barbatruc
Re : Select case avec deux expression testées

Bonsoir à tous.


Autre possibilité :​
VB:
Sub toto()
Dim i%, resultat1%, resultat2%, classe$, classeMax$, r()

'   Code
'   ...

    r = Array(resultat1, resultat2)
    For i = 0 To 1
        Select Case r(i)
            Case Is <= 45: r(i) = "Classe A"
            Case Is <= 75: r(i) = "Classe B"
            Case Is <= 85: r(i) = "Classe C"
            Case Is <= 100: r(i) = "Classe D"
            Case Is <= 155: r(i) = "Classe E"
            Case Is <= 225: r(i) = "Classe F"
            Case Is <= 280: r(i) = "Classe G"
            Case Is <= 355: r(i) = "Classe H"
            Case Is > 355: r(i) = "Classe I"
            Case Else: r(i) = "Classe 0"
        End Select
    Next
    classe = r(0)
    classeMax = r(1)

'   Code
'   ...

End Sub


Bonne nuit !


ROGER2327
#6832


Vendredi 13 Absolu 141 (Saint Cantarel, l’illuminateur - fête Suprême Quarte)
4ème Sanculottide An CCXXI, 9,9364h - fête de l'Opinion
2013-W38-5T23:50:51Z
 

ROGER2327

XLDnaute Barbatruc
Re : Select case avec deux expression testées

Suite...


À fhoest :
Ne conviendrait-il pas d'écrire Select Case resultat au lieu de Select Case nom_classe ?​


ROGER2327
#6833


Samedi 14 Absolu 141 (Saint Sophrotatos l’Arménien, pataphysicien - fête Suprême Quarte)
5ème Sanculottide An CCXXI, 0,0411h - fête des Récompenses
2013-W38-6T00:05:55Z
 

fhoest

XLDnaute Accro
Re : Select case avec deux expression testées

Bonjour Roger2327

Effectivement tu as raison ,mais dans la précipitation et du fait que je ne connais pas ce que fait le code du départ, il se pourrait bien que ce que j'ai proposé corresponde, après tout Classe du départ #1 et ClasseMax peuvent être des variantes.

Au plaisir.
 

Enerjp

XLDnaute Junior
Re : Select case avec deux expression testées

bonjour et merci pour ces solutions !!

Tout d'abord je vous présente mes excuses pour le retard et ensuite vous pause une dernière question.

J'aurrai tendance à choisir la méthode de ROGER2327 car j'aime bien l'idée et que je risque d'avoir plus de deux expressions testées.
Maintenant à votre avis (je n'ai pas encore eu le temps de testé) quelle méthode demande le moins de ressource ? ou plutot sera la plus rapide d'éxecution.

Je m'explique, ce fragment de code fait parti d'une macro calculant des résultats d'une grosse BdD (1000 lignes pour 30 colonnes) qui est déjà bien longue à l'éxécution (10 min).

Bien à vous,
 

ROGER2327

XLDnaute Barbatruc
Re : Select case avec deux expression testées

Re...


(...) quelle méthode demande le moins de ressource ? ou plutot sera la plus rapide d'éxecution.
(...)
Je ne sais pas. Je pense que la solution de fhoest est peut-être un peu plus lente en raison du double appel à une procédure extérieure, mais c'est une intuition purement pifométrique qui demande à être vérifiée dans le contexte dont nous ignorons tout...

Tenez-nous au courant, ça peut être intéressant...​


Bon courage.


ROGER2327
#6856


Mardi 24 Absolu 141 (Saints Rakirs et Rastrons, porte-côtelettes - fête Suprême Quarte)
10 Vendémiaire An CCXXII, 0,8302h - cuve
2013-W40-2T01:59:33Z
 

fhoest

XLDnaute Accro
Re : Select case avec deux expression testées

Je ne sais pas. Je pense que la solution de fhoest est peut-être un peu plus lente en raison du double appel à une procédure extérieure,

Tenez-nous au courant, ça peut être intéressant...


Bon courage.


ROGER2327
#6856


Mardi 24 Absolu 141 (Saints Rakirs et Rastrons, porte-côtelettes - fête Suprême Quarte)
10 Vendémiaire An CCXXII, 0,8302h - cuve
2013-W40-2T01:59:33Z

Bonjour,

Moi aussi je pense la même chose ,mais parfois on est surpris...
A bientôt.
 

Enerjp

XLDnaute Junior
Re : Select case avec deux expression testées

Bonjour,
Alors nous avons 17.33 secondes pour fhoest et 10.98 s pour roger2327 soit 36.6% d'écart. Donc encore merci à vous car maintenant la macro complete est beaucoups plus fluide d'autant plus que ça m'aurra permis de corriger d'autres erreurs mangeuses de ressources^^.
Bien à vous,
enerjp
 

fhoest

XLDnaute Accro
Re : Select case avec deux expression testées

Bonjour,
si tu veux encore gagner du temps si ce n'est déjà fait:
Code:
Application.screenupdating=false
Application.Calculation= xlCalculationManual
........ton code......
Application.screenupdating=true
Application.Calculation=xlCalculationAutomatic

A+


 
Dernière édition:

fhoest

XLDnaute Accro
Re : Select case avec deux expression testées

Bonjour,
je te propose une nouvelle solution si tu veux
Code:
Dim classe, classemax As Variant
Dim resultat1 As Integer, resultat2 As Integer
Sub test()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
classe = FCLASSE(resultat1)
classemax = FCLASSE2(resultat2)
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Function FCLASSE(nom_classe As Variant)
FCLASSE = Switch(nom_classe <= 45, "Classe A", nom_classe <= 75, "Classe B", nom_classe <= 85, _
"Classe C", nom_classe <= 100, "Classe D", nom_classe <= 155, "Classe E", _
nom_classe <= 225, "Classe F", nom_classe <= 280, "Classe G", _
nom_classe <= 355, "Classe H", nom_classe > 355, "Classe I")
End Function
Function FCLASSE2(nom_classeMax As Variant)
FCLASSE2 = Switch(nom_classeMax <= 45, "Classe A", nom_classeMax <= 75, "Classe B", nom_classeMax <= 85, _
"Classe C", nom_classeMax <= 100, "Classe D", nom_classeMax <= 155, "Classe E", _
nom_classeMax <= 225, "Classe F", nom_classeMax <= 280, "Classe G", _
nom_classeMax <= 355, "Classe H", nom_classeMax > 355, "Classe I")
End Function

A+
 

Enerjp

XLDnaute Junior
Re : Select case avec deux expression testées

bonjour,

alors .screenupdating je connais et j'utilise par contre le .calculation je connais pas... l'aide VBA me dis "Le calcul est effectué sur demande de l'utilisateur." pour le .xlcalcutationManual . C'est pour séparer l'execution des calculs du reste de la macro??

Je vous tiens au courrant sur les nouveaux temps d"execution^^.
 

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 175
Membres
103 152
dernier inscrit
Karibu