Erreur de type 5 : argument ou appel de procédure incorrect

Résolu/Fermé
Prunett Messages postés 30 Date d'inscription jeudi 5 mars 2015 Statut Membre Dernière intervention 12 mai 2015 - 1 avril 2015 à 09:36
Prunett Messages postés 30 Date d'inscription jeudi 5 mars 2015 Statut Membre Dernière intervention 12 mai 2015 - 1 avril 2015 à 11:17
Bonjour,

Dans le cadre d'un projet, je dois calculer la gène dû au courant d'air. La formule est la suivante :
DR= 3.14*(34-temp_ext)*(vitesse_du_vent-0.05)^0.62
Je souhaite calculer DR pour chaque heure de l'année.

J'ai réalisé le code suivant :
Sub Calcul_DR()

'Déclaration des variables

Dim tab_DR(8761) As Variant
Dim tab_temp_ext(8761) As Variant
Dim tab_vitesse_vent(8761) As Variant

Dim DR As Variant

For i = 0 To 8761

tab_temp_ext(i) = Sheets("Tableau données temp moy").Range("D" & i + 2)
tab_vitesse_vent(i) = Sheets("Tableau données temp moy").Range("AA" & i + 2)


DR = 3.14 * (34 - tab_temp_ext(i)) * (tab_vitesse_vent(i) - 0.05) ^ 0.62
tab_DR(i) = DR

Next

Worksheets("Tableau données temp moy").Cells(2, 55).Resize(UBound(tab_DR, 1)) = Application.Transpose(tab_DR)

End Sub


Mais ce dernier ne fonctionne pas. En effet, j'ai une erreur de type 5 : Argument ou appel de procédure incorrect.

Je n'arrive pas à voir où est mon erreur.

En vous remerciant d'avance,

2 réponses

Bonjour,

Je pense que ça vient de là:
(tab_vitesse_vent(i) - 0.05) ^ 0.62
Si (tab_vitesse_vent(i) - 0.05) est inférieur ou égal à 0, élever à la puissance ^0.62 est interdit.
Il faudrait mettre abs((tab_vitesse_vent(i) - 0.05)) ^ 0.62

A+
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
1 avril 2015 à 11:06
Salut yoda,

Le fait de transformer le nombre négatif en "positif" via abs, va fausser le résultat.
La puissance nième d'un nombre négatif est un nombre négatif.
Par exemple, la racine carrée de -9 est -3.
Or, en prenant la valeur absolue, on obtiendrait 3.
Il doit donc, selon moi (et je ne suis pas mathématicien plus que cela), multiplier ce résultat par -1 lorsque tab_vitesse_vent(i) - 0.05 est inférieur strictement à 0.
Pour cela, prunett peut utiliser une petite fonction de calcul, comme ceci :
appel de la fonction dans la Sub Calcul_DR :
DR = 3.14 * (34 - tab_temp_ext(i)) * RacineCinquantieme((tab_vitesse_vent(i) - 0.05) ^ 31)

Code de la function :
Function RacineCinquantieme(Nb As Double) As Double
If Nb >= 0 Then
    RacineCinquantieme = Nb ^ (1 / 50)
Else
    RacineCinquantieme = ((Nb * -1) ^ (1 / 50)) * -1
End If
End Function
0