j eesaie de creer une fonction qui renvoie une valeur numerique mais excel me renvoie le message d erreur mauvais data type.
Merci pour votre aide
Function DVVALUE(cusip As Range)
Range(“A:A”).Select
Selection.Find(cusip).Activate
ActiveCell.Offset(3, 2).Activate
Do While ActiveCell.Value <> Empty
a = Run([USA_CALC_DF], Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, -1)), Range(“KESCURVE”), 3, 1)
b = b + ActiveCell.Value * a(1)
ActiveCell.Offset(1, 0).Select
Loop
DVVALUE = b
End Function
Euh, il faudrait peut être pensé à typer tes variables … du genre dim b as quelques chose
De plus, une fonction renvoie quelque chose et la, Excel ne sait pas non plus de quel type …
merci, j ai type les variables de la facon suivante mais toujours la meme erreur; une autre idee? Merci
Function DVVALUE(cusip As Range) As Variant
dim b as Variant
Range(“A:A”).Select
Selection.Find(cusip).Activate
ActiveCell.Offset(3, 2).Activate
Do While ActiveCell.Value <> Empty
a = Run([USA_CALC_DF], Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, -1)), Range(“KESCURVE”), 3, 1)
b = b + ActiveCell.Value * a(1)
ActiveCell.Offset(1, 0).Select
Loop
DVVALUE = b
End Function
Merci.
J ai simplifie le code comme suit mais toujours le meme probleme; ce qui est tres etrange c est que le meme code marche tres bien en macro. je pense que ce aui pose probleme c est l instruction DVVALUE = b, y a t il un autre moyen d affecter le resultat
Function DVVALUE(cusip As Range) As Double
dim b as Double
Range(“A:A”).Select
Selection.Find(cusip).Activate
ActiveCell.Offset(3, 2).Activate
b = ActiveCell.Value
DVVALUE = b
End Function
Sub titi ()
cusip = Range (“B9”)
DVVALUE (cusip) = c
Range (“A10”).Value =c
tout se passe et se calcule bien jusqu a l affectation DVVALUE (cusip) = c
ou j ai l erreur OBJECT REQUIRED
une idee sur ce que ca veut dire? Merci
Function DVVALUE(cusip)
dim b as double
Range(“A:A”).Select
Selection.Find(cusip).Activate
ActiveCell.Offset(3, 2).Activate
Do While ActiveCell.Value <> Empty
a = Run([USA_CALC_DF], Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, -1)), Range(“KESCURVE”), 3, 1)
b = b + ActiveCell.Value * a(1)
ActiveCell.Offset(1, 0).Select
Loop
DVVALUE = b
End Function
Maintenant quand je tape la fonction directement dans excel j ai tjours la meme erreur de data type.
Faut il rajouter quelque chose apres DVVALUE = b pour afficher le resultat dans la cellule ou on a entre la formule?
merci
Function DVVALUE(cusip)
dim b as double
Range(“A:A”).Select
Selection.Find(cusip).Activate
ActiveCell.Offset(3, 2).Activate
Do While ActiveCell.Value <> Empty
a = Run([USA_CALC_DF], Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, -1)), Range(“KESCURVE”), 3, 1)
b = b + ActiveCell.Value * a(1)
ActiveCell.Offset(1, 0).Select
Loop
DVVALUE = b
End Function
Function DVVALUE(cusip) as String
dim b as double
Range("A:A").Select
Selection.Find(cusip).Activate
ActiveCell.Offset(3, 2).Activate
Do While ActiveCell.Value <> Empty
a = Run([USA_CALC_DF], Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, -1)), Range("KESCURVE"), 3, 1)
b = b + ActiveCell.Value * a(1)
ActiveCell.Offset(1, 0).Select
Loop
DVVALUE = Cstr(b)
End Function
non rien a faire toujours la meme erreur mais merci quand meme.
J ai vraiment du mal a comprendre comment ca peut marcher avec une macro et pas quand j essaye d utiliser la fonction directement; dans excel; les joies de VB je suppose
Le problème vient peut-être de ce que tu veux forcer la fonction à modifier la position de la cellule active.
Essaie avec un simple range en référence.
Dans le principe ça devrait donner quelque chose du genre
Function DVVALUE(cusip as Range) as Variant
dim b as double
set R = Range("A:A")..Find(cusip).Offset(3, 2)
for each c in range (R, R.end(xldown))
a = Run([USA_CALC_DF], Range(c.Offset(0, -1), c.Offset(0, -1)), Range("KESCURVE"), 3, 1)
b = b + c * a(1)
next
DVValue = b
end function
On peut décomposer au moins temporairement pour voir d’où vient exactement l’erreur :
Set R = Range("A:A")
cursipValue=cursip
set R * R.Find(cusipValue, lookin:=xlValues)
if R is Nothing then
MsgBox cursipValue + " : valeur non trouvée"
exit function
endif
set .R = R.Offset(3, 2)
Merci beaucoup pour ton aide gcc, c est super sympa de ta part.
Set R = Range(“A:A”).Find(cusip).Offset(3, 2)
For Each c In Range(R, R.End(xlDown))
a = Run([USA_CALC_DF], Range(c.Offset(0, -1), c.Offset(0, -1)), Range(“KESCURVE”), 3, 1)
b = b + c * a(1)
Next
DVVALUE1 = b
End Function