Condition If

Y compris Power BI, Power Query et toute autre question en lien avec Excel
J
JustSayNothing
Nouveau venu
Nouveau venu
Messages : 1
Inscrit le : 9 février 2019
Version d'Excel : 2019
Version de Calc : 2019

Message par JustSayNothing » 9 février 2019, 21:00

Bonjour,

Je rencontre actuellement un problème avec une macro.

Voilà, je commence tout juste à essayer de faire quelques tests mais il s'avère que lors de l'exécution de mon code, cela ne fonctionne pas correctement.

Voici mon code :

Sub Test_Condition()
'
' Test_Condition Macro
' Selection d'un chiffre si une valeure x est comprise entre 2 nombres
'
'
' Déclaration des variables
Dim KMh As Single, Echelle As Integer

' If (KMh = False) Then

' Valeur des variables
KMh = Range("C6").Value


If KMh >= 0.1 And KMh < 0.9 Then
Echelle = 0
ElseIf KMh >= 1 And KMh < 5.9 Then
Echelle = 1
ElseIf KMh >= 6 And KMh < 11.9 Then
Echelle = 2
ElseIf KMh >= 12 And KMh < 19.9 Then
Echelle = 3
ElseIf KMh >= 20 And KMh < 28.9 Then
Echelle = 4
ElseIf KMh >= 29 And KHh < 38.9 Then
Echelle = 5
ElseIf KMh >= 39 And KMh < 49.9 Then
Echelle = 6
ElseIf KMh >= 50 And KMh < 61.9 Then
Echelle = 7
ElseIf KMh >= 62 And KMh < 74.9 Then
Echelle = 8
ElseIf KMh >= 75 And KMh < 88.9 Then
Echelle = 9
ElseIf KMh >= 89 And KMh < 102.9 Then
Echelle = 10
ElseIf KMh >= 103 And KMh < 117.9 Then
Echelle = 11
ElseIf KMh >= 118 And KMh < 200 Then
Echelle = 12
End If

Range("D6") = Echelle



End Sub


Je m'explique, je souhaite en fonction d'une valeur X, faire afficher dans la cellule D6 un nombre correspondant à une échelle.
Sauf que, en rentrant un nombre étant dans la plage de valeur 39-49.9 cela me retourne la variable Echelle égale à 5 mais ça devrait être égale à 6.

Je ne comprend donc pas pourquoi cela me retourne 5.

Pourriez-vous m'aider s'il vous plaît?

En vous remerciant.
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'589
Appréciations reçues : 40
Inscrit le : 6 avril 2007
Version d'Excel : 2010

Message par Yvouille » 9 février 2019, 22:53

Salut,

A la ligne ElseIf KMh >= 29 And KHh < 38.9 Then, tu as une erreur (KHh à la place de KMh).

La prochaine fois, joins un fichier exemple.

Cordialement.
Yvouille


:btres:
Avatar du membre
LouReeD
Passionné d'Excel
Passionné d'Excel
Messages : 5'541
Appréciations reçues : 221
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Téléchargements : Mes applications
Contact :

Message par LouReeD » 9 février 2019, 23:00

Bonsoir, :-)
Précision. Lorsque vous travaillez avec des nombres à virgule flottante, n’oubliez pas qu’ils n’ont pas toujours de représentation précise dans la mémoire. Cela peut entraîner des résultats inattendus à partir de certaines opérations, comme la comparaison de valeurs
https://docs.microsoft.com/fr-fr/dotnet ... data-types

Si cela peut vous aider... ;-)

Une solution : multipliez la valeur à comparer par 10 ou 100 afin de "supprimer" la décimale, puis faites des tests de valeurs en multipliant également les valeurs test et votre test serait du type :
ElseIf KMh >= 390 And KMh < 499 Then
@ voir...

@ bientôt

LouReeD
1 membre du forum aime ce message.
Quelques règles à lire ICI ;;)
_______________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
LouReeD
Passionné d'Excel
Passionné d'Excel
Messages : 5'541
Appréciations reçues : 221
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Téléchargements : Mes applications
Contact :

Message par LouReeD » 9 février 2019, 23:02

Bonsoir Yvouille et bien vu ! :P

Rien à ajouter ! :lol:

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
_______________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'698
Appréciations reçues : 646
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 10 février 2019, 05:52

JustSayNothing ? « Nothing » ; LouReeD write : « Rien à ajouter ! :lol: » ; « Nothing else to add ! :lol: »

(my english is good, doesn't it ?  :wink:)

dhany
Avatar du membre
78chris
Passionné d'Excel
Passionné d'Excel
Messages : 3'419
Appréciations reçues : 221
Inscrit le : 9 juillet 2017
Version d'Excel : 2010 à 2019

Message par 78chris » 10 février 2019, 08:58

Bonjour à tous

Au lieu d'une succession de if elseif, utiliser select case plus lisible
Chris
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'708
Appréciations reçues : 436
Inscrit le : 27 août 2012
Version d'Excel : O365 32 bits

Message par Jean-Eric » 10 février 2019, 09:32

Bonjour,
un exemple pour illustrer la proposition de 78chris :
Option Explicit
'Test_Condition Macro
'Selection d'un chiffre si une valeure x est comprise entre 2 nombres
Sub Test_Condition()
'Déclaration des variables
Dim KMh As Double, Echelle As Long
    KMh = Cells(6, 3).Value2
    Select Case True
        Case KMh >= 0.1 And KMh < 0.9: Echelle = 0
        Case KMh >= 1 And KMh < 5.9: Echelle = 1
        Case KMh >= 6 And KMh < 11.9: Echelle = 2
        Case KMh >= 12 And KMh < 19.9: Echelle = 3
        Case KMh >= 20 And KMh < 28.9: Echelle = 4
        Case KMh >= 29 And KMh < 38.9: Echelle = 5
        Case KMh >= 39 And KMh < 49.9: Echelle = 6
        Case KMh >= 50 And KMh < 61.9: Echelle = 7
        Case KMh >= 62 And KMh < 74.9: Echelle = 8
        Case KMh >= 75 And KMh < 88.9: Echelle = 9
        Case KMh >= 89 And KMh < 102.9: Echelle = 10
        Case KMh >= 103 And KMh < 117.9: Echelle = 11
        Case KMh >= 118 And KMh < 200: Echelle = 12
    End Select
    Cells(6, 4).Value = Echelle
End Sub
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'589
Appréciations reçues : 40
Inscrit le : 6 avril 2007
Version d'Excel : 2010

Message par Yvouille » 10 février 2019, 09:50

Bonjour,

Si on recherche la simplification, on peut aussi utiliser ce code :
Sub Test_Condition_Bis() 
Dim KMh As Double, Echelle As Long
    KMh = Cells(6, 3).Value2
    Select Case True
        Case KMh >= 118: Echelle = 12
        Case KMh >= 103: Echelle = 11
        Case KMh >= 89: Echelle = 10
        Case KMh >= 75: Echelle = 9
        Case KMh >= 62: Echelle = 8
        Case KMh >= 50: Echelle = 7
        Case KMh >= 39: Echelle = 6
        Case KMh >= 29: Echelle = 5
        Case KMh >= 20: Echelle = 4
        Case KMh >= 12: Echelle = 3
        Case KMh >= 6: Echelle = 2
        Case KMh >= 1: Echelle = 1
        Case Else: Echelle = 0
    End Select
    Cells(6, 4).Value = Echelle
End Sub
@ Jean-Eric : Avec ton code, ça ne renvoie pas la bonne valeur si tu inscrits par exemple 49.9 en C3.

@ JustSayNothing : Please, say something :|

Cordialement.
Classeur_Démo.xlsm
(17.72 Kio) Téléchargé 3 fois
Yvouille


:btres:
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'708
Appréciations reçues : 436
Inscrit le : 27 août 2012
Version d'Excel : O365 32 bits

Message par Jean-Eric » 10 février 2019, 17:52

Bonjour,
Un autrre exemple.
Si on veut revoir l'énoncé et simplifier la chose :
Function getScale(KMh As Range)
Dim tbl, a As Double
    getScale = ""
    If Not IsEmpty(KMh) And IsNumeric(KMh) Then
        tbl = Array(0, 1, 6, 12, 20, 29, 39, 50, 62, 75, 89, 103, 118)
        a = Application.Match(KMh, tbl, 1)
        getScale = VBA.Choose(a, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
    End If
End Function
JustSayNothing.xlsm
(15.85 Kio) Pas encore téléchargé
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Avatar du membre
LouReeD
Passionné d'Excel
Passionné d'Excel
Messages : 5'541
Appréciations reçues : 221
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Téléchargements : Mes applications
Contact :

Message par LouReeD » 10 février 2019, 18:27

Bonsoir,

je sent une certaine émulsion... Etes vous sur qu'il n'y a pas plus simple ? ;-)

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
_______________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message