XL 2010 ERREUR SUR UNE FONCTION (PASSAGE ARGUMENT)

sevy1

XLDnaute Occasionnel
Bonjour à tous
je suis entrain de construire un TB qui me fournira la performance par semaine. En recherchant sur le net j'ai trouvé une fonction qui me donne le Numéro de la semaine mais seulement lorsque je l'appelle dans une autre fonction j'ai un message d'erreur et je coince car ne n'arrive pas à déceler ce qui ne va pas merci pour votre aide ci dessous le code
Code:
Sub DECLARANT()
Set sh1 = Feuil1
Set sh2 = Feuil2
Set sh3 = Feuil3
te = sh1.[a2].Resize(sh1.[a65000].End(xlUp).Row, 31).Value
nb_decl = 0
For i = 1 To UBound(te, 1)
    If te(i, 21) > 0 And Year(te(i, 21)) = sh2.Range("p2") And NOSEM2(te(i, 21)) = sh2.Range("O1") Then
        nb_decl = nb_decl + 1
    End If
Next i
sh2.Range("C2") = nb_decl
End Sub

Function NOSEM2(D As Date) As Long
   D = Int(D)
   NOSEM2 = DateSerial(Year(D + (8 - Weekday(D)) Mod 7 - 3), 1, 1)
   NOSEM2 = ((D - NOSEM2 - 3 + (Weekday(NOSEM2) + 1) Mod 7)) \ 7 + 1
End Function
 

Roland_M

XLDnaute Barbatruc
Bonsoir,

D=int(D) !?

remplacer par ceci:

Code:
Function NOSEM2(D As Date) 'norme ISO(Sem 4 Jrs mini)(de Renauder XLD)
Dim T&: T = DateSerial(Year(D + (8 - Weekday(D)) Mod 7 - 3), 1, 1)
NOSEM2 = ((D - T - 3 + (Weekday(T) + 1) Mod 7)) \ 7 + 1
End Function
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Mettez :
VB:
Function NOSEM2(ByVal D As Date) As Long
Sinon, en ByRef (assumé si non spécifié) il n'acceptera jamais autre chose de modifiable comme argument qu'une variable ou une propriété As Date, et notamment pas un Variant/Date comme la Value d'un Range.
Tandis que s'il a le droit d'aller en mettre une copie à domicile chez la procédure, dans une de ses variables locales As Date, là il peut se débrouiller à partir du Variant/Date qu'il a dans les mains…
Mais si, à cause du ByRef, il est contraint de passer l'adresse d'une variable As Date, et qu'on lui demander de passer de cette façon là quelque chose de bel et bien modifiable en principe par la procédure appelée mais qui n'est pas As Date, ben là il est coincé, y peut rien faire.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
ByRef: il dépose, dans une zone de la pile réservée à une adresse, l'adresse d'une zone du type exact demandé, pour que la procédure puisse éventuellement la modifier.
ByVal: il dépose, dans une zone de la pile réservée à une donnée du type exact demandé, une copie de la valeur du paramètre. il s'en suit que cette zone a très exactement un statut de variable locale dans la procédure appelé, et n'est donc pas conservée après son exécution.
 

Discussions similaires

Réponses
12
Affichages
225
Réponses
14
Affichages
621

Statistiques des forums

Discussions
311 733
Messages
2 082 009
Membres
101 865
dernier inscrit
MLL