méthode find

Le
ptck
Bonsoir

je cherche à trouver le jour d'une date avec la méthode find
la date est obtenue avec la formule aujourdhui() dans la feuille
j'ai essayé ceci mais çà ne marche pas
ladate = sh2.Columns("A:M").Find(What:="=aujourdhui()", LookIn:=xlFormulas,
lookat:=xlWhole, MatchCase:úlse)

merci de votre aide
ptck
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mishell
Le #19337851
Bonsoir.

Essaie plutôt de chercher "=today()"

Mishell

"ptck" news:
Bonsoir

je cherche à trouver le jour d'une date avec la méthode find
la date est obtenue avec la formule aujourdhui() dans la feuille
j'ai essayé ceci mais çà ne marche pas
ladate = sh2.Columns("A:M").Find(What:="=aujourdhui()",
LookIn:=xlFormulas, lookat:=xlWhole, MatchCase:úlse)

merci de votre aide
ptck



Mishell
Le #19337861
Plutôt que de chercher la formule,
cherche la valeur résultant de la formule
en utilisant les paramètres What:Úte, LookIn:=xlValues

Exemple:

Dim today As Date

today = Date

Cells.Find(What:=today, After:¬tiveCell, LookIn:=xlValues, _
lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse).Activate

Mishell


"ptck" news:
Bonsoir

je cherche à trouver le jour d'une date avec la méthode find
la date est obtenue avec la formule aujourdhui() dans la feuille
j'ai essayé ceci mais çà ne marche pas
ladate = sh2.Columns("A:M").Find(What:="=aujourdhui()",
LookIn:=xlFormulas, lookat:=xlWhole, MatchCase:úlse)

merci de votre aide
ptck



MichDenis
Le #19337881
Bonjour Ptck,

2 façons de faire :

A ) Si tu veux rechercher une cellule par la
formule qu'elle contient :
'-----------------------------------------
Sub test()
Dim X As String
X = "=today()"

With sh2.Columns("A:M")
Set rg = .Cells.Find(What:=X, LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, lookat:=xlWhole)
End With
If Not rg Is Nothing Then
MsgBox rg.Address
Else
Err = 0
MsgBox "Pas trouvé"
End If
End Sub
'-----------------------------------------

B ) Pour rechercher par sa valeur, une cellule contenant une date
'-----------------------------------------
Sub Test2()
Dim Y As Date
Y = Date

With sh2.Columns("A:M")
Set rg = .Cells.Find(What:=Y, LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, lookat:=xlWhole)
End With
If Not rg Is Nothing Then
MsgBox rg.Address
Else
MsgBox "Pas trouvé"
End If
End Sub
'-----------------------------------------



"ptck"
Bonsoir

je cherche à trouver le jour d'une date avec la méthode find
la date est obtenue avec la formule aujourdhui() dans la feuille
j'ai essayé ceci mais çà ne marche pas
ladate = sh2.Columns("A:M").Find(What:="=aujourdhui()", LookIn:=xlFormulas,
lookat:=xlWhole, MatchCase:úlse)

merci de votre aide
ptck
garnote
Le #19337871
Ave,

Et pour le plaisiir

Sub Cherche_Jour_Aujourdhui_Dans_Plage()
Dim aujourdhui As Date
Dim jour As String
Dim ladate As Range
aujourdhui = Date
Set ladate = sh2.Columns("A:M").Find(What:=aujourdhui, _
After:¬tiveCell, LookIn:=xlValues, lookat:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse)
If ladate Is Nothing Then
MsgBox "Aucune date ne correspond à aujourdhui."
Else
jour = Format(ladate, "dddd")
ladate.Activate
MsgBox jour
End If
End Sub

Serge



"Mishell"
Plutôt que de chercher la formule,
cherche la valeur résultant de la formule
en utilisant les paramètres What:Úte, LookIn:=xlValues

Exemple:

Dim today As Date

today = Date

Cells.Find(What:=today, After:¬tiveCell, LookIn:=xlValues, _
lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse).Activate

Mishell


"ptck" news:
Bonsoir

je cherche à trouver le jour d'une date avec la méthode find
la date est obtenue avec la formule aujourdhui() dans la feuille
j'ai essayé ceci mais çà ne marche pas
ladate = sh2.Columns("A:M").Find(What:="=aujourdhui()",
LookIn:=xlFormulas, lookat:=xlWhole, MatchCase:úlse)

merci de votre aide
ptck







MichDenis
Le #19340251
Pour plus d'informations sur le sujet, un "must" à consulter, un petit texte
que j'ai commis sur le sujet publié là :
http://excelabo.net/pasapas/find-date
Mishell
Le #19348031
Pour Chercher une date avec Find(),
le critère LookIn:= doit être xlFormulas.

Si on Cherche une date avec xlFormulas :

Les cellules au format Date
et les cellules au format Texte contenant une date valide
feront partie des résultats de la recherche.
Si la valeur est le résultat d'une formule,
elle ne fera pas partie des résultats de la recherche.

Si on Cherche une date avec xlValues :

Les cellules au format Texte contenant une date valide
incluant les cellules dont la valeur est le résultat d'une formule
feront partie des résultats de la recherche.
Mais toutes les cellules au format Date seront exclues de la recherche.


Mishell


"MichDenis" news:
Bonjour Ptck,

2 façons de faire :

A ) Si tu veux rechercher une cellule par la
formule qu'elle contient :
'-----------------------------------------
Sub test()
Dim X As String
X = "=today()"

With sh2.Columns("A:M")
Set rg = .Cells.Find(What:=X, LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, lookat:=xlWhole)
End With
If Not rg Is Nothing Then
MsgBox rg.Address
Else
Err = 0
MsgBox "Pas trouvé"
End If
End Sub
'-----------------------------------------

B ) Pour rechercher par sa valeur, une cellule contenant une date
'-----------------------------------------
Sub Test2()
Dim Y As Date
Y = Date

With sh2.Columns("A:M")
Set rg = .Cells.Find(What:=Y, LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, lookat:=xlWhole)
End With
If Not rg Is Nothing Then
MsgBox rg.Address
Else
MsgBox "Pas trouvé"
End If
End Sub
'-----------------------------------------



"ptck" discussion :

Bonsoir

je cherche à trouver le jour d'une date avec la méthode find
la date est obtenue avec la formule aujourdhui() dans la feuille
j'ai essayé ceci mais çà ne marche pas
ladate = sh2.Columns("A:M").Find(What:="=aujourdhui()",
LookIn:=xlFormulas,
lookat:=xlWhole, MatchCase:úlse)

merci de votre aide
ptck



MichDenis
Le #19348341
Bonjour Mishell,

Je ne répéterais pas ici ce que tu peux lire dans le commentaire
que j'ai commis sur le sujet là : http://excelabo.net/pasapas/find-date

avec la méthode "Find" pour rechercher une date, il n'y a pas une
façon de définir les paramètres qui fassent mouche à tout coup.

A ) L'usager doit savoir d'abord ce qu'il cherche (une date émanant
d'une formule ou d'une saisie dans une cellule ou peut-être les 2
avant de déterminer la nature des paramètres, voire si la méthode
est appropriée dans les circonstances.
B ) Que contiennent les autres cellules dans la plage scrutée par la
méthode Find ?
C ) Se rappeler que la méthode "Find" recherche toujours une chaîne
de caractères passée par l'argument "What" à la méthode.
D ) La méthode "Find" utilise la propriété "Formula" ou "Value"
que retourne un objet "Range" pour évaluer si la chaîne du
paramètre "What" est "=" à la chaîne de caractère retournée
par la propriété "Formula" ou "Value" de la cellule selon que l'on
a retenue l'une ou l'autre lorsque l'on a défini le paramètre "LookIn".
C'est là la vraie signification des constantes "XlFormulas" ou "xlvalues"
de l'argument "LookIn" de la méthode Find.

Ceci étant dit,

| Pour Chercher une date avec Find(),
| le critère LookIn:= doit être xlFormulas.
****Ça dépend du contenu de la plage de cellules !

| Si on Cherche une date avec xlFormulas :
| Les cellules au format Date
| et les cellules au format Texte contenant une date valide
| feront partie des résultats de la recherche.

****Sauf erreur, cet énoncé est inexact :
Si A1 contient une date reconnue dans un format date compris par Excel
x = Range("A1").Formula -> renvoie : "39949"
Si B1 est au format texte, mais contient une date habituellement reconnue par Excel
x = Range("B1").Formula -> renvoie : "16-05-09"

La méthode "Find" ne peut pas trouver les 2 cellules avec XlFormulas
SAUF si on passe à l'argument "What" une variable d'un type "String"
une fois et une variable d'un type "Date" une autre fois.
Variable type date - > elle trouve A1
Variable Type String -> elle trouve B1
En conséquence, tu dois faire un choix et l'une des
2 sera exclue selon ton choix.

| Si on Cherche une date avec xlValues :

**** Je pourrais répéter le même commentaire que précédemment
mais cette fois avec XlValues

P.S - J'arrête ici. Il y a un grand professeur qui me coure après
avec sa piqure. J'arrête avant qu'il s'énerve un peu trop !
ptck
Le #19348551
Merci pour votre aide
ptck
"MichDenis"
Bonjour Mishell,

Je ne répéterais pas ici ce que tu peux lire dans le commentaire
que j'ai commis sur le sujet là : http://excelabo.net/pasapas/find-date

avec la méthode "Find" pour rechercher une date, il n'y a pas une
façon de définir les paramètres qui fassent mouche à tout coup.

A ) L'usager doit savoir d'abord ce qu'il cherche (une date émanant
d'une formule ou d'une saisie dans une cellule ou peut-être les 2
avant de déterminer la nature des paramètres, voire si la méthode
est appropriée dans les circonstances.
B ) Que contiennent les autres cellules dans la plage scrutée par la
méthode Find ?
C ) Se rappeler que la méthode "Find" recherche toujours une chaîne
de caractères passée par l'argument "What" à la méthode.
D ) La méthode "Find" utilise la propriété "Formula" ou "Value"
que retourne un objet "Range" pour évaluer si la chaîne du
paramètre "What" est "=" à la chaîne de caractère retournée
par la propriété "Formula" ou "Value" de la cellule selon que l'on
a retenue l'une ou l'autre lorsque l'on a défini le paramètre "LookIn".
C'est là la vraie signification des constantes "XlFormulas" ou
"xlvalues"
de l'argument "LookIn" de la méthode Find.

Ceci étant dit,

| Pour Chercher une date avec Find(),
| le critère LookIn:= doit être xlFormulas.
****Ça dépend du contenu de la plage de cellules !

| Si on Cherche une date avec xlFormulas :
| Les cellules au format Date
| et les cellules au format Texte contenant une date valide
| feront partie des résultats de la recherche.

****Sauf erreur, cet énoncé est inexact :
Si A1 contient une date reconnue dans un format date compris par
Excel
x = Range("A1").Formula -> renvoie : "39949"
Si B1 est au format texte, mais contient une date habituellement
reconnue par Excel
x = Range("B1").Formula -> renvoie : "16-05-09"

La méthode "Find" ne peut pas trouver les 2 cellules avec
XlFormulas
SAUF si on passe à l'argument "What" une variable d'un type
"String"
une fois et une variable d'un type "Date" une autre fois.
Variable type date - > elle trouve A1
Variable Type String -> elle trouve B1
En conséquence, tu dois faire un choix et l'une des
2 sera exclue selon ton choix.

| Si on Cherche une date avec xlValues :

**** Je pourrais répéter le même commentaire que précédemment
mais cette fois avec XlValues

P.S - J'arrête ici. Il y a un grand professeur qui me coure après
avec sa piqure. J'arrête avant qu'il s'énerve un peu trop !







Mishell
Le #19349771
Voici les tests que j'ai effectués pour vérifier les résultats différents
obtenus par la fonction Find selon que le paramètre est xlFormulas ou
xlValues.

Conclusion:
Pour chercher une date,
xlValues n'est pas fiable parce qu'il est dépendant du format des cellules
et qu'il ne trouve rien dans les cellules au format Date.
xlFormulas trouve tout dans les cellules au format Date ainsi que dans les
cellules au format texte contenant une date valide.

Mishell


'Mettre dans le code d'une feuille
Sub Tester_Find_xlFormulas_et_xlValues()
Mettre_les_donnees_sur_la_feuille
Formulas_Sur_Texte
Values_Sur_Texte
Text_Sur_Texte
Recherches
End Sub

Sub Recherches()

Dim nombre As Double
Dim strNombre As String

nombre = 38785
strNombre = "38785"

Trouver_Tout(CDate(nombre), Range("B:B"), xlFormulas, xlWhole).Select

MsgBox "Chercher la date (Type Date) " & CDate(nombre) & "." _
& vbCrLf & "Le critère LookIn:=xlFormulas." _
& vbCrLf & "La recherche s'effectue donc dans Formula." _
& vbCrLf & "Les cellules au format Date" _
& vbCrLf & "et les cellules au format Texte contenant une date valide" _
& vbCrLf & "feront partie des résultats de la recherche." _
& vbCrLf & "Mais si la valeur est le résultat d'une formule," _
& vbCrLf & "elle ne fera pas partie des résultats de la recherche."

Trouver_Tout(CDate(nombre), Range("B:B"), xlValues, xlWhole).Select

MsgBox "Chercher la date (Type Date) " & CDate(nombre) & "." _
& vbCrLf & "Le critère LookIn:= doit être xlFormulas." _
& vbCrLf & "Essayons avec LookIn:=xlValues" _
& vbCrLf & "La recherche s'effectue donc dans Text." _
& vbCrLf & "Les cellules au format Date seront exclues de la recherche." _
& vbCrLf & "Les cellules au format Texte contenant une date valide" _
& vbCrLf & "incluant les cellules dont la valeur est le résultat d'une
formule" _
& vbCrLf & "feront partie des résultats de la recherche." _


Trouver_Tout(nombre, Range("B:B"), xlFormulas, xlWhole).Select
MsgBox "Critère LookIn:=xlFormulas." _
& vbCrLf & "Cherche le nombre (Type Double) " & nombre & " dans Formula. " _
& vbCrLf & "Si la cellule est au format Date" _
& vbCrLf & "elle ne fera pas partie des résultats de la recherche" _
& vbCrLf & "parce que la valeur recherchée n'est pas de Type Date."

Trouver_Tout(strNombre, Range("B:B"), xlFormulas, xlWhole).Select
MsgBox "Critère LookIn:=xlFormulas." _
& vbCrLf & "Cherche le nombre (Type String) " & nombre & " dans Formula. " _
& vbCrLf & "Le résultat est le même" _
& vbCrLf & "avec Type String qu'avec Type Double."


Trouver_Tout(nombre, Range("B:B"), xlValues, xlWhole).Select
MsgBox "Critère LookIn:=xlValues." _
& vbCrLf & "Chercher le nombre " & nombre & " dans Text (ce qui est
affiché)." _
& vbCrLf & "Même si la valeur est le résultat d'une formule," _
& vbCrLf & "elle fera partie des résultats de la recherche." _
& vbCrLf & "parce que la recherche s'effectue dans Text et non dans
Formula." _
& vbCrLf & "Le problème est que si l'affichage " _
& vbCrLf & "montre 2 décimales ( par exemple 38785.00 )" _
& vbCrLf & "et que la valeur recherchée ne comporte pas 2 décimales (ex.:
38785 )" _
& vbCrLf & "la recherche avec xlValues ne produira aucun résultat."

NombreFormate = "38785.00"
Trouver_Tout(NombreFormate, Range("B:B"), xlValues, xlWhole).Select
MsgBox "Critère LookIn:=xlValues." _
& vbCrLf & "Chercher le nombre " & NombreFormate & " dans Text." _
& vbCrLf & "Si la valeur réelle est 38785 et la valeur affichée est
38785,00" _
& vbCrLf & "il faut rechercher 38785.00 pour que la recherche produise un
résultat."



On Error Resume Next
Trouver_Tout(CStr(CDate(nombre)), Range("B:B"), xlFormulas, xlWhole).Select

MsgBox "Chercher la date (Type String) " & CStr(CDate(nombre)) & "" _
& vbCrLf & "avec le critère LookIn:=xlFormulas." _
& vbCrLf & "La recherche d'une date de Type String avec xlFormulas" _
& vbCrLf & "ne produit aucun résultat."

On Error GoTo 0



End Sub
Sub Formulas_Sur_Texte()
Cells(1, 3).Value = "'.Formula"
For i = 2 To 20
Cells(i, 3).Value = Cells(i, 2).Formula
Next
End Sub
Sub Values_Sur_Texte()
Cells(1, 4).Value = "'.Value"
For i = 2 To 20
Cells(i, 4).Value = Cells(i, 2).Value
Next
End Sub
Sub Text_Sur_Texte()
Cells(1, 5).Value = "'.Text"
For i = 2 To 20
Cells(i, 5).Value = Cells(i, 2).Text
Next
End Sub
Function Trouver_Tout(Item_rechercher As Variant, _
Champ_de_recherche As Range, _
Optional LookIn As Variant, _
Optional LookAt As Variant, _
Optional MatchCase As Boolean) As Range

Dim cellule As Range

If IsMissing(LookAt) Then LookAt = xlPart

If IsMissing(LookIn) Then LookIn = xlValues

If IsMissing(MatchCase) Then MatchCase = False

Range("A1").Select

With Champ_de_recherche
Set cellule = .Find( _
What:=Item_rechercher, _
LookIn:=LookIn, _
LookAt:=LookAt, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=MatchCase)

If Not cellule Is Nothing Then

Set Trouver_Tout = cellule
PremiereAdresse = cellule.Address
Do
Set Trouver_Tout = Union(Trouver_Tout, cellule)
Set cellule = .FindNext(cellule)

Loop While Not cellule Is Nothing And cellule.Address <>
PremiereAdresse

End If
End With

End Function


Sub Mettre_les_donnees_sur_la_feuille()

Cells.Clear

Range("A1").Select
ActiveCell.Formula = "Format"
Range("C1").Select
ActiveCell.Formula = "Formulas"
Range("D1").Select
ActiveCell.Formula = "Values"
Range("E1").Select
ActiveCell.Formula = "Text"
Range("A:A,C:C,D:D,E:E").Select
Range("E1").Activate
Selection.NumberFormat = "@"


Range("B7:B8").Select
Selection.NumberFormat = "0.00"
Range("B13:B14").Select
Selection.NumberFormat = "dd/mm/yy"
Range("B16:B17").Select
Selection.NumberFormat = "@"
Range("B19").Select
Selection.NumberFormat = "@"

Range("A7").Select
ActiveCell.Formula = "Nombre 2 déc"
Range("A8").Select
ActiveCell.Formula = "Nombre 2 déc"
Range("A10").Select
ActiveCell.Formula = "Standard"
Range("A11").Select
ActiveCell.Formula = "Standard"
Range("A13").Select
ActiveCell.Formula = "Date"
Range("A14").Select
ActiveCell.Formula = "Date"
Range("A16").Select
ActiveCell.Formula = "Texte"
Range("A17").Select
ActiveCell.Formula = "Texte"
Range("A19").Select
ActiveCell.Formula = "Texte"

Range("B2").Select
ActiveCell.Formula = "·"

Range("B3").Select
ActiveCell.Formula = "±6"

Range("B4").Select
ActiveCell.Formula = "±3"

Range("B5").Select
ActiveCell.Formula = "±9"

Range("B7").Select
ActiveCell.Formula = "38785"

Range("B8").Select
ActiveCell.Formula = "38785"

Range("B10").Select
ActiveCell.Formula = "38785"

Range("B11").Select
ActiveCell.Formula = "38785"

Range("B13").Select
ActiveCell.Formula = "3/9/2006"

Range("B14").Select
ActiveCell.Formula = "3/9/2006"

Range("B16").Select
ActiveCell.Formula = "38785"

Range("B17").Select
ActiveCell.Formula = "38785"

Range("B19").Select
ActiveCell.Formula = "3/9/2006"

End Sub
MichDenis
Le #19350921
Bonjour Mishell,

A ) d'abord, je n'ai regardé que la première procédure de ta démonstration :
Trouver_Tout(CDate(nombre), Range("B:B"), xlFormulas, xlWhole).Select

**** Elle réussit à retenir et sélectionner les cellules contenant ceci :
J'ai fait un copier-coller à partir du contenu de ces
cellules dans la barre de formule suite à l'exécution de la
procédure "Mettre_les_donnees_sur_la_feuille"

En B13 -> 09-03-2006 Cellule Format date
B14 -> 09-03-2006 Cellule Format date
ET
B19 -> 3/9/2006 Cellule Format Texte
**** C'est un tour de force, avec la même procédure, et une même
variable (nombre8785) passée en paramètre à la procédure,
tu réussis à sélectionner ces 3 cellules représentant 2 dates
différentes et 2 formats différents de cellule.

**** Dans ta procédure : "Mettre_les_donnees_sur_la_feuille"
tu utilises ceci pour renseigner le contenu de la cellule B19
Range("B19").Select
ActiveCell.Formula = "3/9/2006"
On reconnaît que "3/9/2006" est la représentation au
format américain du contenu de la cellule B14 : 09-03-2006

Que sait-il passé ? Comme tu as retenu la propriété "Formula"
pour définir le contenu de la cellule B19, Microsoft énonce
cette remarque dans l'aide d'Excel-vba sur cette propriété :

Copier-coller d'une partie de l'aide sur la propriété Formula d'Excel
'***************************
Si vous affectez une date à la formule d'une cellule, Microsoft Excel vérifie si la
cellule est déjà dotée de l'un des formats numériques ou de date. Si tel n'est pas le cas,
Microsoft Excel lui affecte le format de date numérique par défaut
'***************************
Selon moi, Excel enregistre à l'interne une "date" et bien attendu comme cela provient de
l'interface VBA, son format est américain. C'est ce qui "expliquerait" qu'il puisse
reconnaître le contenu de cette cellule en utilisant XlLookIn:=XlFormula.

****Si tu veux faire davantage de test sur la colonne B:B de ton fichier exemple, utilise
la commande "Rechercher" du menu "édition". L'interface graphique te permet de définir au
besoin
le paramètre "Formule" ou "Valeur". Les observations que j'ai faites vos dans le sens des
explications que j'ai énoncées. Pour l'instant et jusqu'à preuve du contraire, c'est ma
perception de la chose !

****Ceci étant dit, je n'ai rien à vendre, que le paramètre de xlLookIn soit xlvalues ou
xlformulas, ce n'est pas la quintessence de mon propos. Mon objectif est surtout de
comprendre la mécanique de ce paramètre afin de pouvoir faire un usage éclairé de la
méthode "Find" lors d'une recherche sur les "dates". Quand il s'agit de date dans excel,
il faut se méfier des automatismes et des copier-coller trop faciles...
Publicité
Poster une réponse
Anonyme