Problème dans la fonction .Find

zmus

XLDnaute Nouveau
Bonjour,

On utilisant la fonction (.find), j'ai de sérieux problème.
En effet, je cherche dans une colonne une date au format "d/m;@".
Toute fois, je me trouve devant deux situations problématiques :
1. si je défini ma variable recherché « as date », le format n'est plus le même que j'ai dans ma colonne. Et par conséquent la valeur recherchée est "Nothing". Pourtant elle est présente.

2. Si je ne défini pas ma variable :
par exemple je cherche la date 1/6, oui je la trouve mais aussi des date comme 11/6/2011, ou 21/06/2011, ...

Quoi faire alors????????

Merci d'avance pour votre aide.
 
Dernière édition:

flyonets44

XLDnaute Occasionnel
Re : Problème dans la fonction .Find

bonjour quelques idées de solution glanées il y a longtemps sur le forum ms et un fichier contenant plein d'exemples d'utilisation de la fonction find
JE pense qu'il est préférable que tu définisse ta plage de recherche avec
set plage =rangs("a2:a12000")
bon courage
FLYONETS
'Quel que soit le paramètre utilisé, la méthode "Find" de l'objet "Range"
'recherche toujours sur la totalité de la plage qui a été définie. Le paramètre
'"LookIn:..." est plutôt un caractère qualitatif quant au contenu de chacune
'des cellules de la plage examinée.
'L'objet "Range" a plusieurs propriétés et parmi elles se trouvent :
'A ) .Value
'B ) .Formula
'"LookIn:XlValues" réfère à la propriété "Value" de la cellule. En fait,
' la méthode "Find" utilisant ce paramètre, effectue sa recherche sur
' la plage de cellules concernées en tenant compte de la propriété ".value"
' que retourne le contenu de chacune des cellules de la plage concernée.

'"LookIn:XlFormula" : Le principe de ce paramètre est le même que "XlValue".
' Cependant c'est la propriété "Formula" de l'objet "Range" qui est scrutée.
' Lorsqu'une cellule contient une date, la propriété "Formula" retourne la
' composante numérique de la date quelle a trouvée dans la cellule.
' L'expression numérique d'une date facilite grandement la tâche à excel
' car la valeur numérique est SANS ÉGARD au format des dates de la plage
' de cellules. En d'autres mot, la méthode "Find" avec le paramètre XlFormulas
' n'est pas sensible au format de la plage de données quel que soit celui-ci,
' car la recherche s'effectue sur la valeur numérique que retourne la date
' contenue dans la cellule. Cette valeur n'est pas fonction du format de la date.

' Attention! Comme la méthode "Find" utilisant le paramètre "Lookin:=xlformulas"
' est sensible à l'expression numérique des dates, certains pourraient vouloir
' définir le type de la variable de la date recherchée "As Long" comme par exemple
' Dim UneVraieDate As Long. Ceci ne fonctionne pas.
' Excel sait très bien faire la différence entre une donnée numérique... et
' l'expression numérique d'une date. Le type de la variable contenant la valeur
' recherchée doit être du type "Date".

' Si une date dans une cellule est l'expression d'une formule comme
' par exemple : =aujourdhui(), Il devient évident que la méthode Find
' affublé du paramètre "XlFormulas" ne pourra la "percevoir..." puisque
' la propriété ".Formula" de cette cellule renvoie non pas une date (que
' son expression soit numérique ou format(texte))mais une formule ( =today() ).


'B ) LookIn:=xlValues

'N.B. Il faut se rappeler qu'une variable ayant été affublé du type "date" ne peut pas
'prendre un format autre que celui défini dans le panneau de configuration, nonobstant
'l'utilisation de la fonction "Format"

'Pour imager le propos, essayer ceci:
'Si votre format système est : "DD/MM/YY"
'Dim LaDate as Date
'LaDate = format(cdate("09/12/02"),"DD/MM/YYYY")
'Est-ce que la variable Ladate possède un format
'dont l'année est représentée par 4 chiffres? Non.

'Cette dernière affiche toujours le format date système de la machine.
'La fonction "Format" n'a aucune prise sur une variable de type date.
'Excel lui donne donne et maintient automatiquement le format système.

'Pour ce faire : 2 alternatives quant au choix du type de la variable.
'Dim UneVraieDate As Variant OU As Date

'1-) Si une plage de cellules où s'effectue la recherche n'a pas le format système

'Dim UneVraieDate As Variant
'À l'instar du type "Date", l'utilisation du type "Variant" permet d'affecter
'à cette variable le même format de date de la plage de cellules où la
'recherche a lieu. (à adapter dans la ligne de code suivante le format approprié)
'UneVraieDate = Format(DateSerial(2002, 11, 15), "dd/mm/yyyy")

'2-) Si une plage de cellules où s'effectue la recherche a le format système

'Dim UneVraieDate As Date
'Comme énoncé précédemment, la ligne de code suivante est sans effet
'lorsque la variable a le type "Date"... donc inutile.
'UneVraieDate = Format(DateSerial(2002, 11, 15), "dd/mm/yyyy")


'Résultat obtenu:
'Pour que la méthode Find fonctionne avec ce paramètre "LookIn:=xlValues",
'la plage de cellules où s'effectue la recherche doit obligatoirement être
'du même format que la variable utiliée pour la recherche. Que la date
'affichée dans la cellule soit une constante (08/11/02) ou l'expression
'd'une formule comme "aujourdhui()" n'a aucune importance. La propriété
'"Value" d'une cellule renvoie toujours la valeur affichée et non la
'formule qui se cache dernière.

'De fait, Excel avec la méthode "Find" et le paramètre "LookIn:=xlValues"
'ne recherche plus une date.... mais sa représentation (son format) qui
'n'est ni plus ni moins qu'une chaîne de caractères...d'où l'obligation
'd'avoir le même format.

'Pour les incrédules du dernier énoncé, essayer ceci :
'Dim LaDate As String
'"dd/mm/yy" étant le format de la plage des dates où s'effectue la recherche
'LaDate = Format(DateSerial(2002, 11, 8), "dd/mm/yy")
'A = Range("A1:A25").Find(LaDate, , xlValues, , , xlNext).Row
 

Pièces jointes

  • Find_function.zip
    39.5 KB · Affichages: 25

Hippolite

XLDnaute Accro
Re : Problème dans la fonction .Find

Bonjour à tous,
La méthode FIND a une particularité qu'il faut connaître :
Les paramètres de Find, LookIn, LookAt, SearchOrder, MatchByte et de la boîte de dialogue Rechercher/Remplacer sont sauvegardés à chaque utilisation. Si des arguments sont omis, les valeurs enregistrées, qui sont communes, seront utilisées au prochain appel de la méthode, elles peuvent donc avoir été modifiées.
En conséquence, pour éviter les problèmes, il faut définir tous les arguments explicitement à chaque fois que cette méthode est utilisée ou bien réinitialiser les paramètres avec Application.FindFormat.Clear
A+
 

Hippolite

XLDnaute Accro
Re : Problème dans la fonction .Find

Re,
Sachant qu'on demande à Find de rechercher une chaîne de caractères, il faut convertir la variable_date dans le même format que dans la feuille et faire la recherche sur la totalité et non une partie du texte de la cellule :
.Find("1/6", LookIn:=xlValues, lookat:=xlWhole)
A+
 

Discussions similaires

Réponses
3
Affichages
288