VB: mauvais type de donnees dans fonction

Bonjour,

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

Pourquoi Variant et pas Integer ? (ou Double si chiffre à virgule flottante)

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

Non, il n’y a pas d’autres méthodes pour retourner une valeur en VB(A).
Qu’est ce que ça donne si tu fais du pas à pas ?

alors la, je sais pas comment on fait ca, ca s appelle comment pour que je cherche dans une doc

J’ai pas Office mais normalement, tu te places dans le code et tu places des breakpoints en appuyant sur F9

merci j ai fait cela en creeant la macro suivante

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

La par contre c’est normal qu’il ne soit pas content, ta fonction titi doit ressembler à ça :


Sub titi ()
dim c as double
dim cusip as range

cusip = Range ("B9")
c = DVVALUE (cusip)         ' et pas l'inverse
Range ("A10").Value =c

merci bien en effet ca marche.

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

Essaye ça :


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

Merci.

mais cela bloque a Set R = Range(“A:A”).Find(cusip).Offset(3, 2)

erreur: object variable or with block variable not set

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)

Edité le 29/08/2007 à 16:43

En fait ca m arche avec ci-dessous.

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