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
34testfind-1-0.zip (13.19 Ko)

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

Rechercher des sujets similaires à "probleme find lors execution automatique"