Aide pour une fonction

Le
Phenix21
Bonjour à tous !

Je souhaiterais vous soumettre la fonction que j'ai réalisé. Mon
objectif : écrire une fonction du type "=SOMME()" qui réalise une
itération pour me sortir le résultat maximal.

Voilà ce que j'ai réalisé :

[quote]Public Function InsTech77(Sbv, C, Qfuite)

Dim i As Integer
Dim Seff As Single
Dim t As Single
Dim H As Single
Dim a1 As Single
Dim b1 As Single
Dim a2 As Single
Dim b2 As Single
Dim Ccorrection As Single
Dim Vbas As Single
Dim Vbas_fin As Single


'Récupération des valeurs des coefficients de Montana et du
coefficient multiplicateur
a1 = ActiveSheet.Cells(4, 5)
a2 = ActiveSheet.Cells(6, 5)
b1 = ActiveSheet.Cells(5, 5)
b2 = ActiveSheet.Cells(7, 5)
Ccorrection = ActiveSheet.Cells(9, 5)

'Calcul de la surface active de ruissellement
Seff = Sbv * C

'Mise à 0 des variables
Vbas = 0
Vbas_fin = 0

'Itération du calcul du volume nécessaire
For i = 1 To 24

'Utilisation des 2 pluies, et distinction
If i <= 5 Then
Vbas = Qfuite * 60 * i * 5 - Seff * a1 * (5 * i) ^ (1 - b1) /
1000
Else
Vbas = Qfuite * 60 * i * 5 - Seff * a2 * (5 * i) ^ (1 - b2) /
1000
End If

'Sélection du volume de bassin le plus important
If Vbas > Vbas_fin Then
Vbas_fin = Vbas
End If

Next

IT77 = Vbas_fin * Ccorrection


End Function
[/quote]

Elle a été insérée dans 'ThisWorkbook", mais lorsque je tape sous
Excel "=InsTech77()", Excel me renvoie #NOM. Je pense avoir mal
défini ma fonction.

Merci d'avance pour vos propositions et votre aide !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #4564251
Pour pouvoir utiliser une fonction personnalisée dans une feuille de calcul,
tu dois la mettre OBLIGATOIREMENT dans un module standard.



"Phenix21"
Bonjour à tous !

Je souhaiterais vous soumettre la fonction que j'ai réalisé. Mon
objectif : écrire une fonction du type "=SOMME(...)" qui réalise une
itération pour me sortir le résultat maximal.

Voilà ce que j'ai réalisé :

[quote]Public Function InsTech77(Sbv, C, Qfuite)

Dim i As Integer
Dim Seff As Single
Dim t As Single
Dim H As Single
Dim a1 As Single
Dim b1 As Single
Dim a2 As Single
Dim b2 As Single
Dim Ccorrection As Single
Dim Vbas As Single
Dim Vbas_fin As Single


'Récupération des valeurs des coefficients de Montana et du
coefficient multiplicateur
a1 = ActiveSheet.Cells(4, 5)
a2 = ActiveSheet.Cells(6, 5)
b1 = ActiveSheet.Cells(5, 5)
b2 = ActiveSheet.Cells(7, 5)
Ccorrection = ActiveSheet.Cells(9, 5)

'Calcul de la surface active de ruissellement
Seff = Sbv * C

'Mise à 0 des variables
Vbas = 0
Vbas_fin = 0

'Itération du calcul du volume nécessaire
For i = 1 To 24

'Utilisation des 2 pluies, et distinction
If i <= 5 Then
Vbas = Qfuite * 60 * i * 5 - Seff * a1 * (5 * i) ^ (1 - b1) /
1000
Else
Vbas = Qfuite * 60 * i * 5 - Seff * a2 * (5 * i) ^ (1 - b2) /
1000
End If

'Sélection du volume de bassin le plus important
If Vbas > Vbas_fin Then
Vbas_fin = Vbas
End If

Next

IT77 = Vbas_fin * Ccorrection


End Function
[/quote]

Elle a été insérée dans 'ThisWorkbook", mais lorsque je tape sous
Excel "=InsTech77(...)", Excel me renvoie #NOM. Je pense avoir mal
défini ma fonction.

Merci d'avance pour vos propositions et votre aide !
Phenix21
Le #4564231
C'est-à-dire dans un module standart ?
Phenix21
Le #4564221
On 2 juin, 14:44, Phenix21
C'est-à-dire dans un module standart ?


J'ai écrit trop vite j'ai trouvé ^^

Par contre je crois que j'ai un souci dans ma fonction, çà ne me
renvoie pas la bonne valeur ! Et je continue ;)

Merci pour la réponse !

Phenix21
Le #4564181
Le retour !

Alors effectivement, la fonction se lance bien. Par contre, Excel me
renvoie un "#VALEUR" : quelle pourrait en être la cause ?
MichDenis
Le #4564131
Observation générale :

Il est préférable d'utiliser un nom de variable qui soit significatif
par rapport à son usage... il serait sage d'éviter l'usage d'une
adresse de cellule comme variable.

Pourquoi ne pas donner aux paramètres de ta fonction, des noms
qui signifie quelque chose, tu as droit à des noms de 255 caractères...

Si tu donnes à une variable un type "numérique" (integer, long, double...)
la variable a automatiquement la valeur 0. Nul besoin de l'initialer à 0

Si ta fonction renvoie "#VALEUR" , tu dois avoir une valeur "Texte"
dans une des cellules utilisées pour évaluer la fonction.



"Phenix21"
Le retour !

Alors effectivement, la fonction se lance bien. Par contre, Excel me
renvoie un "#VALEUR" : quelle pourrait en être la cause ?
Hervé
Le #4564081
Bonjour Phenix21,

Dans une fonction, pour que celle-ci soit utilisée sans retourner de
résultat erroné, il ne faut pas utiliser de référence à une quelconque
cellule ou plage de cellules, elles doivent être passées en argument. Si tu
fait référence à une cellule et que, pour la mise en page de feuille, tu
veuille déplacer cette cellule la fonction ne la suivra pas et fera toujours
référence à la cellule indiquée en dur d'où des résultats erronés.
Comme te l'a si bien précisé MichDenis, utilise des noms de variables qui
soient parlant, ça facilite l'entretien du code.
J'ai testé la fonction ci-dessous avec des valeurs bidons et elle me
retourne un résultat (bidon lui aussi ;o) ).
Si tu as un message d'erreur, c'est dû à la présence de cette ligne de code
:
IT77 = Vbas_fin * Ccorrection
qui doit être le retour du résultat mais mal orthographié. Pour éviter ce
type d'erreur, en tête de module indique la ligne "Option Explicit" comme
dans l'exemple ci-dessous. Ceci oblige à déclarer les variables et évite pas
mal de désagréments.

A mettre dans un module standard :

Option Explicit

Public Function INS_TECH_77(Sbv As Double, _
C As Double, _
Qfuite As Double, _
a1 As Double, _
a2 As Double, _
b1 As Double, _
b2 As Double, _
Ccorrection As Double) As Double

Dim i As Integer
Dim Seff As Single
Dim t As Single
Dim H As Single
Dim Vbas As Single
Dim Vbas_fin As Single

'pour que la fonction soit recalculée
'à chaque calcul du classeur
Application.Volatile

'Calcul de la surface active de ruissellement
Seff = Sbv * C

'Itération du calcul du volume nécessaire
For i = 1 To 24

'Utilisation des 2 pluies, et distinction
If i <= 5 Then
Vbas = Qfuite * 60 * i * 5 - Seff * a1 * (5 * i) ^ (1 - b1) / 1000
Else
Vbas = Qfuite * 60 * i * 5 - Seff * a2 * (5 * i) ^ (1 - b2) / 1000
End If

'Sélection du volume de bassin le plus important
If Vbas > Vbas_fin Then
Vbas_fin = Vbas
End If

Next

'retourne le résultat
INS_TECH_77 = Vbas_fin * Ccorrection

End Function


Hervé.

"Phenix21"
Bonjour à tous !

Je souhaiterais vous soumettre la fonction que j'ai réalisé. Mon
objectif : écrire une fonction du type "=SOMME(...)" qui réalise une
itération pour me sortir le résultat maximal.

Voilà ce que j'ai réalisé :

[quote]Public Function InsTech77(Sbv, C, Qfuite)

Dim i As Integer
Dim Seff As Single
Dim t As Single
Dim H As Single
Dim a1 As Single
Dim b1 As Single
Dim a2 As Single
Dim b2 As Single
Dim Ccorrection As Single
Dim Vbas As Single
Dim Vbas_fin As Single


'Récupération des valeurs des coefficients de Montana et du
coefficient multiplicateur
a1 = ActiveSheet.Cells(4, 5)
a2 = ActiveSheet.Cells(6, 5)
b1 = ActiveSheet.Cells(5, 5)
b2 = ActiveSheet.Cells(7, 5)
Ccorrection = ActiveSheet.Cells(9, 5)

'Calcul de la surface active de ruissellement
Seff = Sbv * C

'Mise à 0 des variables
Vbas = 0
Vbas_fin = 0

'Itération du calcul du volume nécessaire
For i = 1 To 24

'Utilisation des 2 pluies, et distinction
If i <= 5 Then
Vbas = Qfuite * 60 * i * 5 - Seff * a1 * (5 * i) ^ (1 - b1) /
1000
Else
Vbas = Qfuite * 60 * i * 5 - Seff * a2 * (5 * i) ^ (1 - b2) /
1000
End If

'Sélection du volume de bassin le plus important
If Vbas > Vbas_fin Then
Vbas_fin = Vbas
End If

Next

IT77 = Vbas_fin * Ccorrection


End Function
[/quote]

Elle a été insérée dans 'ThisWorkbook", mais lorsque je tape sous
Excel "=InsTech77(...)", Excel me renvoie #NOM. Je pense avoir mal
défini ma fonction.

Merci d'avance pour vos propositions et votre aide !
Phenix21
Le #4564041
Merci pour votre aide !

En réponse à vos questions :
- pour les noms des variables, C, a, b correspondent aux noms
couramment utilisés pour les données qui me concernent. Si çà vous
intéresse, un aperçu des bases de mon calcul ;) http://www.dlzlogic.com /aides/Montana.htm
- la fonction créée a pour objectif de se répéter plusieurs fois, l es
paramètres a,b,Ccorrection étant identiques à chaque itération, seu ls
les paramètres S,C,Qfuite variant. Il n'y a pas moyen d'éviter de les
indiquer à chaque fois ? Sachant qu'à la fin, je comptais bloquer la
partie supérieure de la feuille pour éviter tout déplacement
intenpestif.

Au passage, que signifie "double" ?
fetnat
Le #4563721
Merci pour la découverte du coefficient de Montana.

On comprend mieux pourquoi la France est inondée. Vivement que VBA soit
au point...:)


climatiquement vôtre

fetnat

Bonjour à tous !

Je souhaiterais vous soumettre la fonction que j'ai réalisé. Mon
objectif : écrire une fonction du type "=SOMME(...)" qui réalise une
itération pour me sortir le résultat maximal.

Voilà ce que j'ai réalisé :

[quote]Public Function InsTech77(Sbv, C, Qfuite)

Dim i As Integer
Dim Seff As Single
Dim t As Single
Dim H As Single
Dim a1 As Single
Dim b1 As Single
Dim a2 As Single
Dim b2 As Single
Dim Ccorrection As Single
Dim Vbas As Single
Dim Vbas_fin As Single


'Récupération des valeurs des coefficients de Montana et du
coefficient multiplicateur
a1 = ActiveSheet.Cells(4, 5)
a2 = ActiveSheet.Cells(6, 5)
b1 = ActiveSheet.Cells(5, 5)
b2 = ActiveSheet.Cells(7, 5)
Ccorrection = ActiveSheet.Cells(9, 5)

'Calcul de la surface active de ruissellement
Seff = Sbv * C

'Mise à 0 des variables
Vbas = 0
Vbas_fin = 0

'Itération du calcul du volume nécessaire
For i = 1 To 24

'Utilisation des 2 pluies, et distinction
If i <= 5 Then
Vbas = Qfuite * 60 * i * 5 - Seff * a1 * (5 * i) ^ (1 - b1) /
1000
Else
Vbas = Qfuite * 60 * i * 5 - Seff * a2 * (5 * i) ^ (1 - b2) /
1000
End If

'Sélection du volume de bassin le plus important
If Vbas > Vbas_fin Then
Vbas_fin = Vbas
End If

Next

IT77 = Vbas_fin * Ccorrection


End Function
[/quote]

Elle a été insérée dans 'ThisWorkbook", mais lorsque je tape sous
Excel "=InsTech77(...)", Excel me renvoie #NOM. Je pense avoir mal
défini ma fonction.

Merci d'avance pour vos propositions et votre aide !



Publicité
Poster une réponse
Anonyme