Erreur de type 5 : argument ou appel de procédure incorrect [Résolu/Fermé]

Signaler
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
-
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
-
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60742 internautes nous ont dit merci ce mois-ci

Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 476
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
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 476
Bonjour,

C'est un problème purement mathématiques.
J'ai essayé ta macro avec des valeurs bidons, et ensuite, lors d'un plantage, refait le même calcul avec une calculatrice (celle de windows). En fait, les deux calculateurs (excel et la calculette windows) ne parviennent pas à calculer une puissance décimale d'un nombre négatif.
(tab_vitesse_vent(i) - 0.05) ^ 0.62 lorsque tab_vitesse_vent(i) < 0.05 retourne une erreur de type 5...
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015

Le problème était bien la valeur absolue.
Dans mes vitesse de vents, je n'avais aucune valeur qui fait que j'ai (tab_vitesse_vent-0.05)<0.

Merci beaucoup pour votre aide