Rechercher une date précise dans une liste

C@thy

XLDnaute Barbatruc
Bonjour le forum, ;)

je voudrais rechercher 31 décembre 2012 dans une colonne
comportant des dates au format jj/mm/aa
par macro afin de récupérer des données de la ligne et les copier
j'utilise Datevalue pour la transformer en date
la date 31/12/2012 se trouve bien dans ma colonne car c'est un jour ouvré
mais la recherche est infructueuse

En réalité c'est un peu + complexe, je recherche dans une liste
le dernier jour travaillé de l'année en cours (de lundi à vendredi)

Auriez-vous rencontré cd problème et trouvé une solution???

Un immense MERCI pour votre aide

Bises

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Un grand merci donc à Jean-Marcel et David pour leur match

Je n'ai pas testé (pas d'ordi le WE) si on saisit une date dans un USF
(par le biais d'un calendrier)... J'imagine que c'est pareil...

Édit je viens d'aller voir l'exemple de JBoisgontier, oui, ça marche pareil

Encore merci à toutes et tous et bon ouik

C@thy
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

bonjour le fil
retrouvé ces codes De JB

Le format de la date cherchée est le même que le format des dates du champ de recherche

Sub RechercheDateFind()
d = InputBox("Date? jj/mm/aa")
If d <> "" Then
On Error Resume Next
[L:L].Find(What:=CDate(d), LookIn:=xlValues).Select
If Err <> 0 Then MsgBox "Inconnu"
End If
End Sub

On adapte le format de la date recherchée au format des dates du champ de recherche

Sub RechercheDateFind2()
d = InputBox("Date? jj/mm/aa")
If d <> "" Then
On Error Resume Next
[N:N].Find(What:=Format(CDate(d), "dddd d mmmm yyyy"), LookIn:=xlValues).Select
If Err <> 0 Then MsgBox "Inconnu"
End If
End Sub
 

C@thy

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Merci Bebere pour ta dernière réponse que je n'avais pas vue avant:eek:
(mieux vaut tard que jamais il paraît!)

a nouveau plongée dans ces problèmes de date, lorsque je fais

NumLigne = [N:N].Find(What:=Format(CDate(d), "dddd dd/mm/yy"), LookIn:=xlValues).row

je ne trouve pas la date alors qu'elle y est, et pour cause :

je refais manuellement le rechercher/remplacer et je vois qu'il a mis dans la zone rechercher
lun. 05/11/12, j'étais déjà tombée sur ce cas mais ne retrouve plus le fil 'arf... j'ai perdu le fil, Lol!)
comment remplacer le point après lun par rien?

il faut placer un replace quelquepart, mais où?

Merci:):):) à vous si vous avez la réponse

Bises et bonne soiréche:cool:

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Coucou David,

Effectivement, le match fonctionne, c'est bien pratique!!!

Edit : Rien ne vaut un bon match devant la télé... avec des pizzas et de la bière!...

Quelqu'un sait pourquoi le find avec jjj génère un . ???

Bisettes

C@thy
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Bonjour à tous

J'ai un peu affiné le sujet et voila, dans ce fichier une synthèse de ma recherche :).

Tout commentaire sera apprécié, sinon, c'est pas grave :eek:.
 

Pièces jointes

  • TrouveDateVBA.xls
    302.5 KB · Affichages: 68

Misange

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Hello

j'ai pas lu tous les messages précédents (il y en a trop !)
mais c'est un pb bien connu.
quand range("A1").value2 ne donne pas ce qui est attendu comme résultat (c'est quand même toujours le plus simple !) il y a d'autres possibilités.
Il y a deux pages intéressantes sur ce sujet sur excelabo :
Ce lien n'existe plus
Ce lien n'existe plus, page assortie de deux classeurs exemples, l'un d'Alain vallon, l'autre de Denis Michon

sur ton classeur j'ai utilisé cette macro (qui vient du premier lien) pour trouver la date du 4/2/2012 (toujours plus compliqué quand la date est interprétable suivant le mode amerloque ou la notre) et elle trouve les bonnes cellules quel que soit le format.

Code:
c = Range("G1")
txt = Format(c, "Short Date")
On Error Resume Next
With Worksheets("excelabo").Range("date3")
Set f = .Find(CDate(txt), LookIn:=xlFormulas)
Range("G2") = f.Address
End With
 

Pièces jointes

  • Copie de TrouveDateVBA.xls
    395.5 KB · Affichages: 64

MJ13

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Bonjour Misange

Merci pour ton témoignage et ta macro :).

En effet, cela fait pas mal de temps que j'ai ce genre de problème avec les dates :confused:.

Mais ce que je viens de découvrir, c'est qu'on peut assez facilement ne pas se faire avoir en déclarant dès le début la variable en date. De plus le format personnalisé peut avoir une grande importance dans les problèmes de recherche.

Enfin pour rechercher dans des valeurs, il faut mieux mettre xlformulas et dans des formules, xlvalues. et toujours faire attention au format.


Sinon Bernard, il y a peu a donné un très bon code pour trouver le type d'une cellule c'est:

Code:
Sub TypeName_Cellule()
MsgBox TypeName(ActiveCell.Value)
End Sub
(activecell.value)

Donc maintenant, je sais, enfin, jusqu'au prochain problème de date :eek:.
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Tu ne sais pas forcément à l'avance que ta cellule G1 va contenir une date...
donc tu ne peux pas toujours déclarer à l'avance ta variable en date. La conversion se fait en écrivant
Find(CDate(txt))
Avec la macro ci-dessus je n'ai pas trouvé de format personnalisé qui coince (pour autant que la date soit bien une date excel évidemment)
mais l'important c'est que tu aies trouvé une méthode qui te convienne et que tu comprennes surtout. cce qui est bien dans excel c'est qu'il n'y a pas qu'un chemin pour arriver à Rome :)
 

david84

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Bonsoir,
En effet, cela fait pas mal de temps que j'ai ce genre de problème avec les dates .

Mais ce que je viens de découvrir, c'est qu'on peut assez facilement ne pas se faire avoir en déclarant dès le début la variable en date. De plus le format personnalisé peut avoir une grande importance dans les problèmes de recherche.

Enfin pour rechercher dans des valeurs, il faut mieux mettre xlformulas et dans des formules, xlvalues. et toujours faire attention au format.
Aurais-tu des exemples de recherche de dates formatées ou non qui posent problème parce que personnellement, en passant par Match je n'en ai pas a priori donc je ne vois pas trop où est la difficulté.
A+
 

MJ13

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Bonjour David


Aurais-tu des exemples de recherche de dates formatées ou non qui posent problème parce que personnellement, en passant par Match je n'en ai pas a priori donc je ne vois pas trop où est la difficulté.


Merci de t'inquiéter sur cette question épineuse :).

J'avais bien testé ta macro avec match, mais cela n'avait pas été concluant et pour éviter de perdre mon temps, j'ai pris le problème à l'envers. Sachant que j'arrive pas à avoir un code assez universel sur mes planning avec ces problèmes de recherche de date. Why :confused:.

Après quelques tests, j'ai compris quelques universalités dans le fichier du post #71 (voir surtout la première feuille en valeur et faire varier le format).

Maintenant, je peux aller sereinement faire mes recherches de dates :).


Voici par exemple où j'en était arrivé sur un planning où j'avais du formater mes dates avec un quote (donc en texte) dans la première macro suite à un problème de recheche de la date d'aujourd'hui. Je met aussi les nouveaux codes pour trouver la date qui serait en format date (c'est à dire numérique).

Code:
Sub Trouve_date_Aujourdhui()
'Cellule au format texte
Annee = 2013
'Stop
'On Error GoTo suite
Dim DateaTrouver3 As Variant
'dateatrouver1 = InputBox("date  à trouver? (JJ/MM)")
DateaTrouver1 = Day(Now) & "/" & Month(Now)
DateaTrouver = DateaTrouver1 & "/" & Annee
'MsgBox Format(dateatrouver, "MMMM YYYY")
Sheets(Format(DateaTrouver, "MMMM YYYY")).Select
DateaTrouver3 = Format(DateaTrouver, "DD" & "/" & "MM")
Cells.Find(What:=DateaTrouver3, After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
        clignote
End Sub

Sub Trouve_Date_Aujourdhui_Test()
Annee = 2013
Dim DateaTrouver3 As Date
'dateatrouver1 = InputBox("date  à trouver? (JJ/MM)")
DateaTrouver1 = Day(Now) & "/" & Month(Now)
DateaTrouver = DateaTrouver1 & "/" & Annee
'MsgBox Format(dateatrouver, "MMMM YYYY")
Sheets(Format(DateaTrouver, "MMMM YYYY")).Select
DateaTrouver3 = Format(DateaTrouver, "DD" & "/" & "MM")
Cells.Find(What:=DateaTrouver3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    clignote
End Sub

Sub Trouve_Date_Aujourdhui_Test2()
Dim DateaT As Date
DateaT = Date
Sheets(Format(DateaT, "MMMM YYYY")).Select
Cells.Find(What:=DateaT, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    clignote
End Sub

Sub Trouve_Date_Aujourdhui_Test3()
Annee = 2013
Dim DateaT As Date
DateaT = Day(Now) & "/" & Month(Now) & "/" & Annee
Sheets(Format(DateaT, "MMMM YYYY")).Select
Cells.Find(What:=DateaT, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    clignote
End Sub

Pour moi, c'est un des meilleurs codes que j'ai trouvé cette année :eek:.
 

david84

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Bonsoir,
J'avais bien testé ta macro avec match, mais cela n'avait pas été concluant et pour éviter de perdre mon temps, j'ai pris le problème à l'envers. Sachant que j'arrive pas à avoir un code assez universel sur mes planning avec ces problèmes de recherche de date. Why .
Le problème c'est que tu ne précises pas quels sont les problèmes rencontrés. Idem dans ton fichier : tu dis que les codes ne fonctionnent pas sur tous les formats mais tu ne précises pas quels sont les formats qui posent problème.

Je te propose quelque chose : ci-joint un fichier test de départ. J'y ai incorporé une macro brute de décoffrage avec une recherche par Match sans réellement la tester pour l'instant.

Regarde le fichier :
- une colonne nommée PlageDate où j'ai repris les dates de ton fichier
- 2 colonnes pour chacun où l'on peut répertorier les formats qui ne posent pas de problème et ceux qui en posent.

On teste chacun un code (celui que l'on veut, le mien est celui qui est dans le fichier) et chacun note ses résultats et l'on voit où il y a problème.

Si l'on veut ensuite, on peut refaire la même chose avec un autre code (j'en ai un autre où je n'utilise pas Match) et au bout du compte on verra bien les résultats et cela nous permettra de faire le point.

Si d'autres veulent se joindre à nous et amener leur code, welcome.

Est-ce que cela te vas ?

Si oui, il faut d'abord fixer les règles concernant la date à entrer dans l'inputBox :le format à utiliser est-il dd/mm/aaa quitte à passer dans un 2ème temps sur d'autres formats de test ou teste-on d'entrée des formats différents (et si oui lesquels) ?

On peut faire cela tranquillement (on n'est pas pressé et chacun a ses occupations).
A+
 

Pièces jointes

  • TrouveDateVBA_XLD.xls
    98.5 KB · Affichages: 52

MJ13

XLDnaute Barbatruc
Re : Rechercher une date précise dans une liste

Re David

Ton code en l'état fonctionne mais je veux trouver sur la feuille sans donner de plage de dates. C'est la, le problème pour moi :confused:.

Si tu peux éviter le "Set d = [PlageDates]", cela ira mieux pour moi :).
 

Discussions similaires

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972