|
|
|
|
Bonjour,
Je me suis mis depuis peu a excel et a la programmation en VBA.
En effet, je cherche a créer mes propres fonctions sur excel.
J'ai voulu creer la fonction delta (dont le code est a la suite) qui se compose d'une boucle for.
J'aimerai que dans la cellule dans laquelle je met =delta (3) me soit affiché le resultat de la fonction avec la variable i =3.
Mes données d'entrée sont aussi une liste de valeur dans la colonne D. (valeur commencant a la ligne 8 d'ou le k+8)
voila le code que j'ai crée dans un module :
Function delta(i As Integer) As Variant
Dim k As Integer
Dim p As Integer
For k = 1 To i - 1
p = k + 8
delta = delta + Feuil1.cell("D" & p) * (i - k)
Next k
End Function
résultat :
Quand je le fais pour i= 3 ou autres differents de 0, ca me revoit la valeur 0. Or si je le fais a la main, je devrais avoir une valeur bien differente.
Une ame charitable peut elle m'aider??
Merci d'avance
Féféx
Configuration: HP Pavillon dv6000 (portable) proc core 2duo T7300 2Ghz,2Go de RAM windows vista OEM. excel 2007.
Tu peux déposer ton fichier (débarrassé des infos trop confidentielles) sur http://www.cijoint.fr/ qui est un service gratuit et tu colles dans un post le lien qu'il te donne.
|
Ok merci pour le tuyau tres pratique ce site
|
Bonsoir,
Function delta(i As Integer, plage As Range) As Double
Dim lig As Long, col As Byte, k As Integer
lig = plage.Row
col = plage.Column
For k = 1 To i - 1
delta = delta + Cells(lig + k, col) * (i - k)
Next k
End Function
:-x |
Salut michel_m,
|
Bonjour,
Function delta(i As Integer, plage As String) As Double Dim lig As Long, col As Byte, k As Integer lig = Range(plage).Row col = Range(plage).Column d'autre part, tu appelles une plage dans un autre classeur et actuellement le calcul de delta s'effectue sur un appel de cellule dans la feuille où tu insères la fonction delta= delta + cells(... le problème est que l'on a par exemple en E9: [Classeur1]Feuil1!$D$5:$D$14 et qu'il faudrait workbooks("classeur1.xls").sheets("feuil1").cells.... le seul moyen avec le moins de trituration possible est alors la fonction "evaluate" après avoir récupéré la lettre de la colonne. Si la zone se trouve dans le 26 premières colonnes la fonction devient: Function delta_exterieur(i As Integer, plage As String) As Double Dim lig As Long, col As String, k As Integer lig = Range(plage).Row col = Chr(Range(plage).Column + 64) adresse = Left(plage, InStr(plage, "!")) For k = 1 To i - 1 valeur = Evaluate(adresse & col & (lig + k)) delta = delta + valeur * (i - k) Next k End Function pour 2 ou 3 lettres (je n'ai pas 2007) je vois pas trop... une fonction n'est généralement pas aisée à créer et doit être pensée pour un usage général; pour des usages restreints on peut utiliser une "sous-sub" paramétrée ou non plus facile à créer qu'une fonction :-x |
Bonjour féféx et michel_m
|
Re bonjour,
|
Merci, Pilas mais pas les moyens de me procurer 2007 surtout que 2010 arrive!
|
Bonjour Messieurs,
|