C le Bin's la recherche d'une date sur Xl

Le
Fredo P.
Bonjour les Xilous

Comprenez vous cela:
La cellule B1 affiche 07/05/12
La barre de formule:07/05/2012
La propriété de B1Úte
Chdat est une Variable As Date
Au passage des 2 lignes suivantes, l'égalité: Not
[IDCours!A1:E1].Find(ChDat) Is Nothing úux
et celle-ci: Not [IDCours!A1:E1].Find(format(ChDat,"dd/mm/yy")) Is Nothing
=Vrai
[IDCours!B1] = ChDat
If Not [IDCours!A1:E1].Find(ChDat) Is Nothing Then

Ya quoi: une entourloupette?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #24460571
Bonjour,

Avant de débuter, tu dois lire la petite note dans le bas de la page de l'aide sur la
méthode "Find"

Le paramètre "LookIn:=xlFormulas" de la méthode "Find" est très important. Il indique à la
méthode
ce qu'il doit rechercher dans chacune des cellules de la plage de cellules.

Un Range (une cellule) a ces 2 propriétés :
'---------------------------------------------------------
X = Range("A1").Value
ET
Y = Range("A1").Formula
'---------------------------------------------------------

Fais des petits tests chez toi et vois ce que le texte que retourne une cellule
affichant une date selon qu'elle contient une date saisie manuellement ou d'un résultat
d'une formule.

Selon la valeur que tu donnes au paramètre "LookIn:=xlFormulas OU XlValues", la valeur
"Find" recherche
parmi la plage de cellules désignées la chaîne de caractères que retourne la propriété
"Value" ou "formula"
des cellules.

Passons au choses sérieuses :

Tu as au moins ces 2 alternatives possibles :

A )
Cette approche convient si les dates émanent d'une saisie manuelle en opposition d'un
résultat d'une formule.
Quand tu définis un type de variable AS DATE, le contenu de la variable adapte toujours le
format date court
défini dans le panneau de configuration.

'----------------------------------------
Sub test()
Dim D As Date, Rg As Range
D = cdate("7/5/12")
Set Rg þuil1.Range("A1:A10").Find(D, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not Rg Is Nothing Then MsgBox Rg.Address
End Sub
'----------------------------------------

B )
Cette approche te permet de faire une recherche sur une plage de cellules représentant
des dates ayant différents formats. Elles peuvent émaner d'une saisie manuelle ou d'une
formule.

Attention : La plage doit avoir le même format mais ce dernier peut prendre différentes
formes.
La variable de type "String" représentant la date à rechercher doit
avoir le même
format que celui utilisé dans la plage de cellules.
'----------------------
Sub test1()
Dim D As String, Rg As Range
D = "7 mai 2012" 'La date a le même format que les cellules de la plage
Set Rg = Sheet1.Range("A1:A10").Find(D, LookIn:=xlValues, LookAt:=xlWhole)
If Not Rg Is Nothing Then MsgBox Rg.Address
End Sub
'--------------------


Méthode : Avec la fonction Match()

Le plus facile lorsque tu travailles avec des dates pour s'affranchir des différents
formats des dates :

Même si chacune des cellules de la plage a un format de date différent, la méthode
fonctionnera très bien.
N.B. Dans ta plage de cellules, il ne doit pas y avoir des entrées numériques représentant
une date possible!

La fonction "Match" (equiv() dans la feuille de calcul) retourne la première valeur
trouvée.
'--------------------
Sub test5()
Dim D As Long, X As Long
D = CLng(CDate("7/5/12"))
X = Application.Match(D, Sheet1.Range("A1:A10"), 0)
If IsNumeric(X) Then MsgBox Sheet1.Range("A1:A10")(X).Address
End Sub
'--------------------

Ce n’est pas grave si tu n'a pas tout compris. Tu retiendras sûrement qu'avec la méthode
"find", on ne peut pas y aller à l'aveuglette.
:-))

MichD
---------------------------------------------------------------
Publicité
Poster une réponse
Anonyme