Bonjour.

Envoyé par
Docmarti
Bien sûr que le format d'affichage d'une cellule peut perturber la recherche […] avec le paramètre LookIn:=xlValues,
la fonction FIND semble effectuer sa recherche dans la propriété TEXT des cellules et non dans la propriété VALUE […]
Mais le résultat est négatif si :
FormatNumber- Valeur affichee dans cellule
dd/mm/yyyy----- 01/03/2014
De mon côté, avec différentes versions françaises d'Excel sur plusieurs ordinateurs,
le format date classique jj/mm/aaaa d'une cellule et sa propriété Range.Value ne gênent aucunement la recherche
avec le paramètre LookIn:=xlValues ‼ (voir le code Demo1)
Et cela ne fonctionne pas avec la propriété Range.Text (Demo7), et pour cause !
Là où il faut prêter attention c'est dans le passage du premier paramètre - la date cherchée - de la méthode Range.Find.
Comme en VBA la représentation d'une date entre dièses ou guillemets est au format natif américain,
il faut veiller à inverser le jour et le mois, pour le 1er mars 2014, c'est #3-1-2014# ou "3/1/2014" (Demo2 & Demo3).
Par contre s'il y a un zéro devant le mois ou le jour, même au format américain, la recherche échoue … (Demo6)
Avec la fonction DateValue une date texte au format français classique même avec un zéro est bien trouvée. (Demo4)
Pas de souci non plus avec une variable au format Date, heureusement ! (Demo5)
Pour le code suivant testé dans un classeur vierge (en pièce jointe),
les dates sont au format classique français jj/mm/aaaa en colonne A et dans la cellule H1 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Private Sub DateFind(V)
Dim Rg As Range
Set Rg = Columns(1).Find(V, , xlValues)
If Rg Is Nothing Then [C1].Select Else Rg.Select: Set Rg = Nothing
End Sub
Sub Demo1()
DateFind [H1].Value
End Sub
Sub Demo2()
DateFind #3/1/2014#
End Sub
Sub Demo3()
DateFind "3/1/2014"
End Sub
Sub Demo4()
DateFind DateValue("01/03/2014")
End Sub
Sub Demo5()
Dim Dt As Date
Dt = [H1].Value
DateFind Dt
End Sub
'------------------
' Ne trouvent pas !
Sub Demo6()
DateFind "03/01/2014"
End Sub
Sub Demo7()
DateFind [H1].Text
End Sub |
Partager