OVH Cloud OVH Cloud

pb Valeur sur un Fonction VBA

3 réponses
Avatar
aline
est ce que quelqu'un pourrait m'aider =E0 trouver l'erreur dans cette
fonction qui devrait me permettre de renvoyer un jour ouvr=E9 (=E0 partir
d'une date entr=E9e)

meme en definissant la sortie de la fonction comme etant un type
Variant =E7a ne marche pas
Merci bcp


Function effectstart(start As Range, jours As Range, holidays As Range)
As Range
Dim r As Range
If WeekDay(Range("start")) <> 1 And WeekDay(Range("start")) <> 7 Then
For Each c In Range("holidays")
If Range("start").Value =3D c.Value Then
Range("r").Formula =3D "=3DSERIE.JOUR.OUVRE(" &
Range("start").Address & "," & Range("jours").Value & "," &
Range("holidays").Address & ")"
Exit For
Else
Range("r").Value =3D Range("start").Value
End If

Next

Else
Range("r").Value =3D Range("start").Value
End If
Range("effecstart").Value =3D Range("r").Value

End Function

3 réponses

Avatar
ThierryP
bonjour Aline,

Si tu veux utiliser le nom français de la fonction SERIE.JOUR.OUVRE, il
faut mettre range("r").formulalocal

est ce que quelqu'un pourrait m'aider à trouver l'erreur dans cette
fonction qui devrait me permettre de renvoyer un jour ouvré (à partir
d'une date entrée)

meme en definissant la sortie de la fonction comme etant un type
Variant ça ne marche pas
Merci bcp


Function effectstart(start As Range, jours As Range, holidays As Range)
As Range
Dim r As Range
If WeekDay(Range("start")) <> 1 And WeekDay(Range("start")) <> 7 Then
For Each c In Range("holidays")
If Range("start").Value = c.Value Then
Range("r").Formula = "=SERIE.JOUR.OUVRE(" &
Range("start").Address & "," & Range("jours").Value & "," &
Range("holidays").Address & ")"
Exit For
Else
Range("r").Value = Range("start").Value
End If

Next

Else
Range("r").Value = Range("start").Value
End If
Range("effecstart").Value = Range("r").Value

End Function



--
@+ thierryp

Avatar
aline
slt thierry malheureusement ça ne marche pas
le pb c'est que le prg tourne qd je le mets sous sub mais qd je veux le
passer comme fonction il m'affiche #Valeur! dans la cellule
Avatar
Ange Ounis
Ta fonction a plusieurs problèmes.

1- Les paramètres prévus ne correspondent pas à l'utilisation qui en est faite
dans le code :
ex : paramètre start, déclaré comme Range, utilisé ensuite comme du texte ("start").
Soit tu déclares start comme range, et ensuite tu écris
WeekDay(start.Value)
soit tu déclares start comme String (chaine de caractères) et ensuite tu écris
WeekDay(Range(start).Value)
Idem pour jours et holidays

2- Les fonctions de l'utilitaire d'analyse ne sont utilisables en VBA qu'en
anglais, et à condition que la référence à ces fonctions soit cochée dans ton
projet (en plus de l'être dans Excel).

3- Une fonction ne peut pas écrire quoi que ce soit dans une cellule :
par exemple
Range("r").Value = Range("start").Value
ne provoque pas d'erreur mais est purement et simplement ignoré d'Excel.
Une fonction renvoie un résultat dans la cellule (ou les cellules) où elle est
écrite. A condition toutefois que tu lui affectes un résultat à renvoyer, ce qui
se programme généralement par une dernière instruction dans la fonction qui
ressemble à
effectstart=leRésultat

4- Tu cherches à écrire une fonction qui peut renvoyer plusieurs résultats (en
fonction du nombre de cellules de la plage "holidays". C'est possible (il faut
alors valider la fonction de manière matricielle) mais il faut dans ce cas
particulier que les résultats à renvoyer soient stockés dans un tableau déclaré
en Variant et que ce tableau soit au final affecté à la fonction comme résultat
à renvoyer.

Bref, tu t'es lancée dans une entreprise ambitieuse. Bon courage.

----------
Ange Ounis
----------

est ce que quelqu'un pourrait m'aider à trouver l'erreur dans cette
fonction qui devrait me permettre de renvoyer un jour ouvré (à partir
d'une date entrée)

meme en definissant la sortie de la fonction comme etant un type
Variant ça ne marche pas
Merci bcp


Function effectstart(start As Range, jours As Range, holidays As Range)
As Range
Dim r As Range
If WeekDay(Range("start")) <> 1 And WeekDay(Range("start")) <> 7 Then
For Each c In Range("holidays")
If Range("start").Value = c.Value Then
Range("r").Formula = "=SERIE.JOUR.OUVRE(" &
Range("start").Address & "," & Range("jours").Value & "," &
Range("holidays").Address & ")"
Exit For
Else
Range("r").Value = Range("start").Value
End If

Next

Else
Range("r").Value = Range("start").Value
End If
Range("effecstart").Value = Range("r").Value

End Function