utilisation d'une fonction

nina71287

XLDnaute Occasionnel
Bonsoir,

Je n'arrive pas à utiliser cette fonction:

Function DateAddress(Plage As Range, LaDate) As String
'recherche une date dans une plage d'une ligne ou d'une colonne
'renvoie l'adresse de la cellule où elle a été trouvée en cas
'de succès, une chaîne vide dans tous les autres cas
Dim ArrDates, Li&, S$

'ne traite pas les plages discontinues
S = Plage.Address
If InStr(1, S, ";") > 0 Or InStr(1, S, ",") > 0 Then Exit Function

'ni plusieurs lignes/colonnes
If Plage.Rows.Count > 1 And Plage.Columns.Count > 1 Then Exit Function

'Value2 contient le numéro de série d'une date
ArrDates = Plage.Value2
On Error Resume Next
Li = Application.Match(CLng(CDate(LaDate)), ArrDates, 0)
On Error GoTo 0
'aucune correspondance
If Li = 0 Then Exit Function

If Plage.Columns.Count = 1 Then
'colonne
DateAddress = Plage.Range("A" & Li).Address(0, 0)
Else
'ligne
DateAddress = Cells(Plage.Row, Plage.Column + Li - 1).Address(0, 0)
End If

End Function


date_existe = DateAddress("A4:A65336", D)

ou D=inputbox("entrez une date")

ce qui pose problème c'est la plage ce n'est apparemment pas le type attendu

J'envahis un peu le forum mais si quelqu'un pouvait m'aider ce serait trés sympas merci d'avance
 

JNP

XLDnaute Barbatruc
Re : utilisation d'une fonction

Bonsoir Nina :),
je n'ai pas l'impression que tu envahisse le forum tant que tu ne fait pas du multi postage pour la même question :p.
Pour ta fonction, le problème ne vient pas du Range à partir du moment où il n'est pas discontinu, et qu'il s'exerce bien sur 1 seule colonne.
Par contre, elle a été prévue pour étre utilisée sur une feuille, et non en VBA. Pour améliorer, tu peux déjà forcer le format de D dans la fonction
Code:
Function DateAddress(Plage As Range, LaDate As Date) As String
D'autre part, tu peux aussi forcer le format de ta date à la sortie de ton InputBox
Code:
Dim D As Date
D = CDate(InputBox("entrez une date"))
Pour finir, tu utilises une variable date_existe qui fait penser à du Boolean, alors que la fonction va renvoyer une adresse en String... Si tu veux savoir si la date existe dans la plage, le test sera plutôt
Code:
If DateAddress("A4:A65336", D) <> "" Then
Bon courage :cool:
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 148
Membres
103 131
dernier inscrit
diaz.evelyne17