Codage VBA Select Case ou autre manière?
Ma problématique , une petite partie du programme consiste à faire le graphe du CAC_40 et de ses MM20 et 50 qui sont préparées dans une feuille dédiée. Pour ça je passe les paramètres DateDeb et Date Fin Cac que je pilote avec une période de 1 à 7 ans depuis le ribbon.
'Création du graphe Cac_40 avec les différentes particularités.
Call Creation_Graphe_CAC_40(Titre, DateDeb_CAC, DateFin_CAC, MinScale_CAC, MaxScale_CAC)
avec en axe horizontal les dates du CAC et axe vertical les valeurs du CAC
Compte tenu, de l'évolution importante sur les 8 dernières années j'ai été amené à calculer le minScale et maxScale à forcer dans le graphe (adaptation automatique et optimisée. En amont, je calcule le min et max du CAC sur la période choisie.
Je trouve le code (ci-dessous) très long et je me dis qu'il doit y avoir une autre maniére de coder.
'Sélectionne le MinScale par pas de 500.
Select Case Min_CAC
Case 0 To 999
MinScale_CAC = 0
Case 1000 To 1499
MinScale_CAC = 1000
Case 1500 To 1999
MinScale_CAC = 1500
Case 2000 To 2499
MinScale_CAC = 2000
Case 2500 To 2999
MinScale_CAC = 2500
Case 3000 To 3499
MinScale_CAC = 3000
Case 3500 To 3999
MinScale_CAC = 3500
Case 4000 To 4499
MinScale_CAC = 4000
Case 4500 To 4999
MinScale_CAC = 4500
Case 5000 To 5499
MinScale_CAC = 5000
Case 5500 To 5999
MinScale_CAC = 5500
Case 6000 To 6499
MinScale_CAC = 6000
Case 6500 To 6999
MinScale_CAC = 6500
Case 7000 To 7499
MinScale_CAC = 7000
Case Else
MinScale_CAC = 0
End Select
'Sélectionne le MaxScale par pas de 500.
Select Case Max_CAC
Case 7000 To 7499
MaxScale_CAC = 7500
Case 6500 To 6999
MaxScale_CAC = 7000
Case 6000 To 6499
MaxScale_CAC = 6500
Case 5500 To 5999
MaxScale_CAC = 6000
Case 5000 To 5499
MaxScale_CAC = 5500
Case 4500 To 4999
MaxScale_CAC = 5000
Case 4000 To 4499
MaxScale_CAC = 4500
Case 3500 To 3999
MaxScale_CAC = 4000
Case 3000 To 3499
MaxScale_CAC = 3500
Case 2500 To 2999
MaxScale_CAC = 3000
Case 2000 To 2499
MaxScale_CAC = 2500
Case 1500 To 1999
MaxScale_CAC = 2000
Case 1000 To 1499
MaxScale_CAC = 1500
Case 500 To 999
MaxScale_CAC = 1000
Case Else
MaxScale_CAC = 500
End Select
Bonjour,
peut être pas tout compris de ton problème, perso je fixerais avec une marges les 2 échelles... A voir...
MinScale_CAC = Min_CAC - 100
MaxScale_CAC = Max_CAC + 100bonne journée
@+
Salut, Pierrot Je te souhaite une bonne année et te remercie de me répondre.
Exemple de restitution pour des CAC 40 sur 1, 3 et 7 ans :
j'ai appliqué ta méthode pour voir le résultat et le choix de l'échelle fait par Excel. les résultats sont pour un Cac sur 3 ans:
-échelle min 2710 et le max est de 4406 avec des unités tous les 200 soit, affichage de 2910, 3110, etc, etc.
Alors qu'avec ma méthode, les résultats sont :
- échelle mini 2500 et le max est de 4500 avec des unités tous les 200 soit affichage de 2700, 2900, etc, etc.
j'ai appliqué ta méthode pour voir le résultat et le choix de l'échelle fait par Excel. les résultats sont pour un Cac sur 1 an:
- échelle min 3549 et le max est de 4359avec des unités tous les 100 soit,affichage de 3649, 3749, etc, etc.
Alors qu'avec ma méthode, les résultats sont :
- échelle mini 3500 et le max est de 4500 avec des unités tous les 100
j'ai appliqué ta méthode pour voir le résultat et le choix de l'échelle fait par Excel. les résultats sont pour un Cac sur 7 ans:
- échelle min 2434 et le max est de 5934 avec des unités tous les 500 soit, affichage de 2934, 3434, etc, etc
Alors qu'avec ma méthode, les résultats sont :
- échelle mini 2500 et le max est de 6500 avec des unités tous les 500
De fait, la lecture de l'axe vertical est plus facile à lire et interpréter.
Re,
pour avoir des chiffres ronds :
MinScale_CAC = Application.Floor(Min_CAC, 100) - 100
MaxScale_CAC = Application.Ceiling(Max_CAC, 100) + 100Bon, le résultat attendu est parfait. C'est sur cela me raccourcit le code et j'ai appris Floor et Ceilling
J'ai fait un essai :
- pour un Cac min de 2810 cela donne pour Floor 2800 puis -100 et MinScale = 2700
- pour un CaC max de 4306 cela me donne un ceilling de 4400 puis +100 et MaxScale = 4500
Je solde la fiche et encore Merci.