Problème avec Find lors d'une éxécution automatique
Bonjour ,
J'ai un problème avec Find, qui marche lorsque j'appelle la fonction en debug, mais pas en calcul automatique.
1/ Je déroule la fonction Test dans l'éditeur VBA, la fonction Test2 fonctionne correctement, la date passée en argument est trouvée
2/ Dans une cellule de ma 1ère feuille, je mets =Test2(D2;"Date2010"). La date contenue dans D2 n'est pas trouvée, bien que sa valeur soit bien présente dans la plage "Date2010"
J'utilise Excel 2003 FR
Si quelqu'un avait une piste ... j'ai joint un fichier de test
Merci !!!
Option Explicit
Sub Test()
Dim i As Double
i = Test2(ThisWorkbook.Sheets(1).Range("D2"), "Date2010")
End Sub
Function Test2(dateStart As Date, sRangeDate As String) As Double
Application.Volatile
Test2 = 14
Dim rCellTest As Range
For Each rCellTest In Range(sRangeDate)
' to check the range content
Debug.Print "Date " & rCellTest
Next rCellTest
Dim rCellStart As Range
Set rCellStart = Range(sRangeDate).Find(What:=dateStart, lookat:=xlWhole)
If (rCellStart Is Nothing) Then
Debug.Print "Date not found in range " & sRangeDate & " date : " _
& dateStart
Exit Function
Else
Debug.Print "Date found " & rCellStart
End If
Test2 = 15
End Function-- 07 Oct 2010, 12:23 --
Réponse d'aprés un autre forum, en passant directement le range et en précisant le format ça marche même en volatile.
Bizarre...trop fort pour moi
Option Explicit
Sub Test()
Dim i As Double
i = Test2(ThisWorkbook.Sheets(1).Range("D2"), Range("Date2010"))
End Sub
Function Test2(dateStart As Date, rRangeDate As Range) As Double
Application.Volatile
Test2 = 14
Dim rCellTest As Range
For Each rCellTest In rRangeDate
' to check the range content
Debug.Print "Date " & rCellTest
Next rCellTest
Dim rCellStart As Range
Set rCellStart = rRangeDate.Find(What:=Format(dateStart, rRangeDate.Cells(1).NumberFormat), _
lookat:=xlWhole, LookIn:=xlValues)
If (rCellStart Is Nothing) Then
Debug.Print "Date not found in range date : " _
& dateStart
Exit Function
Else
Debug.Print "Date found " & rCellStart
End If
Test2 = 15
End Function
Bonsoir,
Tiré de l'aide....
Comme quoi, un code ne "tombe pas en marche"....
Notes
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.
Donc, si ça fonctionne, ce n'est peut-être pas le fait du hasard.....
Mef à la fonction "Find", très capricieuse....
Bonne soirée