Problème avec la fonction round

Bonjour,

Actuellement j'essais de remettre en fonction un fichier Excel avec des macros, mais je rencontre un soucis au niveau de la fonction Round ().

Le fichier ayant des données sensible je ne peux pas le joindre, mais voici la partie de la macro où je bloque.

Tol_TM = "< " & Round(Valeur_Max * 0.0158 + 1, 0) & " MW"

La Valeur_Max peut être remplacer par une valeur tel que 175,63.

Et en appliquant la formule de la macro nous devons obtenir 175,63 * 0,0158 + 1 = 3,774954 qui devrai donner via la macro 4.

Mais voilà à chaque fois que j'applique la macro j'obtiens un arrondi de 1.

Pourriez vous me dire où pourrait se trouver l'erreur car je n'arrive pas à la trouver et en regardant sur le forum j'ai l'impression de ne pas avoir fait d'erreur.

Alors que si je reprend l'ancien fichier la macro fonctionne correctement.

J'ai recopié ta ligne en remplaçant Valeur_Max par 175.63 comme tu le suggère, et j'obtiens bien 4

Bonjour le fil, bonjour le forum,

Peut être comme ça :

Tol_TM = " < " & Roud((Valeur_Max * 0.0158)+1, 0) & " MW"

Merci pour voir réponse.

J'ai rajouté l'ensemble du module ci-dessous, j'obtiens à chaque fois un message d'erreur.

Private Sub Tolerance()

Dim Tol_TM As String

Dim Valeur_Max As String

TextBox5.Value = ""

TextBox6.Value = ""

TextBox5.BackColor = &H80000005

TextBox6.BackColor = &H80000005

Label12.Visible = False

Set ws = ActiveSheet

Dim niv As String

Dim toll As String

'Affichage de la valeur max et tolérance

For Each c In Range(ws.[B5], ws.[B65536].End(xlUp))

'Si même nom de site

If c = Me.ComboBox1 And c.Offset(, 3) = Me.ComboBox2 And c.Offset(, 16) = "TM" And c.Offset(, 5) = Me.ComboBox3 Then

' Donne le nom et l'unité à la valeur max

If c.Offset(, 47).Value = 65535 Then

Label12.Visible = True

TextBox5.BackColor = &H8686EB

End If

If TextBox7.Value = "" Then

Valeur_Max = c.Offset(, 47).Value

Else

Valeur_Max = TextBox7.Value

TextBox5.BackColor = &H8686EB '&H80000005 blanc

TextBox6.BackColor = &HAEFFFF

End If

If Me.ComboBox2.Value Like "7*" Then

niv = 7

Else

If Me.ComboBox2.Value Like "6*" Then

niv = 6

Else

If Me.ComboBox2.Value Like "5*" Then

niv = 5

Else

If Me.ComboBox2.Value Like "4*" Or Me.ComboBox2.Value Like "3*" Or Me.ComboBox2.Value Like "2*" Then

niv = 4

Else

If Me.ComboBox2.Value Like "1*" Then

niv = 1

Else

niv = "rien"

End If

End If

End If

End If

End If

' Donne le nom et l'unité à la valeur max

If Me.ComboBox3.Value Like "U*" And Not Me.ComboBox3.Value Like "U*P*P*" And Not Me.ComboBox3.Value Like "U*BAS*" And Not Me.ComboBox3.Value Like "U*CONS*" And Not Me.ComboBox3.Value Like "U*HAUT*" Then

toll = "U"

TextBox6.BackColor = &H80000005

Else

If Me.ComboBox3.Value Like "P*" And Not Me.ComboBox3.Value Like "P*H*I*" Then

toll = "P"

Else

If Me.ComboBox3.Value Like "Q*" Then

toll = "Q"

Else

toll = "Autre que U P Q"

End If

End If

End If

' If c.Offset(, 47).Value = 65535 Then

TextBox5.Value = c.Offset(, 47) & " " & c.Offset(, 48)

If toll = "U" And niv = "7" Then

Tol_TM = "TM/CONV < 6 kV ou TM/TM < 8 kV"

Else

If toll = "U" And niv = "6" Then

Tol_TM = "TM/CONV < 4 kV ou TM/TM < 5 kV"

Else

If toll = "U" And niv = "5" Then

Tol_TM = "TM/CONV < 3 kV ou TM/TM < 4 kV"

Else

If toll = "U" And niv = "4" Then

Tol_TM = "TM/CONV < 2 kV ou TM/TM < 3 kV"

Else

If toll = "U" And niv = "1" Then

Tol_TM = "TM/CONV < 1 kV ou TM/TM < 3 kV"

Else

If toll = "P" And niv = "7" Then

Tol_TM = "< " & Round(Valeur_Max * 0.0148 + 1, 0) & " MW"

Else

If toll = "P" And (niv = "6" Or niv = "5" Or niv = "4" Or niv = "1") Then

Tol_TM = " < " & Round(Valeur_Max * 0.0158 + 1, 0) & " MW"

Else

If toll = "Q" And niv = "7" Then

Tol_TM = "< " & Round(Valeur_Max * 0.0242 + 1, 0) & " MVar"

Else

If toll = "Q" And (niv = "6" Or niv = "5" Or niv = "4" Or niv = "1") Then

Tol_TM = "< " & Round(Valeur_Max * 0.0284 + 1, 0) & " MVar"

Else

End If

End If

End If

End If

End If

End If

End If

End If

End If

End If

Next c

TextBox6.Value = Tol_TM

End Sub

Le message d'erreur est Erreur d'exécution ' 13': Incompatibilité de type.

En vous remerciant encore pour votre aide.

Re,

Quelle est la ligne de code qui provoque le message d'erreur ?

ThauThème a écrit :

Re,

Quelle est la ligne de code qui provoque le message d'erreur ?

La ligne qui provoque l'erreur est la suivante:

If toll = "P" And (niv = "6" Or niv = "5" Or niv = "4" Or niv = "1") Then

Tol_TM = "< " & Round(Valeur_Max * 0.0158 + 1, 0) & " MW" => Provoque l'erreur.

Mais je retrouve en plus de l'erreur ' 13' le problème d'arrondi.

Re,

C'est normal ! Tu as déclaré la variable Valeur_Max de type String. Il te faut la déclarer de type Single ou Double...

Bonjour,

essaie en remplaçant ces instructions

If TextBox7.Value = "" Then
Valeur_Max = c.Offset(, 47).Value
Else
Valeur_Max = TextBox7.Value

par

If TextBox7.Value = "" Then
Valeur_Max = c.Offset(, 47).Value
Else
Valeur_Max = replace(TextBox7.Value,",",".")
Rechercher des sujets similaires à "probleme fonction round"