Condition If

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.

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.

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/visual-basic/programming-guide/language-features/data-types/troubleshooting-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

Bonsoir Yvouille et bien vu !

Rien à ajouter !

@ bientôt

LouReeD

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

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

dhany

Bonjour à tous

Au lieu d'une succession de if elseif, utiliser select case plus lisible

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

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.

4classeur-demo.xlsm (17.72 Ko)

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

Bonsoir,

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

@ bientôt

LouReeD

Rechercher des sujets similaires à "condition"