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:

MJ13

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

Bonjour à tous (j'avais pas vu patrick tout à l'heure, normal, on a répondu en même temps :eek:)

Et sans nommée la zone avec un code de ce type, qu'est-ce que cela donne :confused:.


Code:
Sub test()
DAteAT = Range("D2").Text
'Range("C:C").Find(DAteAT, LookIn:=xlValues).Select
ActiveSheet.Cells.Find(DAteAT, LookIn:=xlValues).Select
End Sub

PS:Jean-Marcel: les matchs, c'est pour bientôt :eek:.
 

david84

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

Bonsoir,
D'après les tests effectués dans la discussion que j'avais lancée ici, j'en avais tiré la conclusion que la recherche de date avec Find n'était pas la meilleure solution.

J'avais cependant fini par solutionner la chose en passant les plages avant traitement au format de date "système", puis en les repassant à leur format initial après traitement.

Par ce biais, toutes les dates quelles que soient leur format peuvent être traitées (fais les tests de ton côté) :
Code:
Sub FindDate()
Dim Pl As Range, c, Prem, MonFormat, MonFormat2
Set Pl = [PlageDates2]
MonFormat = [PlageDates2].NumberFormat 'récupérer le format de nombre de la plage de traitement
MonFormat2 = [DateATrouver].NumberFormat 'récupérer le format de nombre de la plage de recherche
[PlageDates2].NumberFormat = "m/d/yyyy"
[DateATrouver].NumberFormat = "m/d/yyyy"
    With [PlageDates2]
            Set c = .Find([DateATrouver], LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then Prem = c.Address
    End With
[PlageDates2].NumberFormat = MonFormat 'rétablissement du format de nombre initial de la plage de traitement
[DateATrouver].NumberFormat = MonFormat2 'rétablissement du format de nombre initial de la plage de recherche
c.Select
End Sub
Je t'invite par ailleurs à étudier les différentes solutions proposées dans le lien indiqué.
A+
 

Pièces jointes

  • Recherche date v2TEST.xls
    491 KB · Affichages: 56
  • Recherche date v2TEST.xls
    491 KB · Affichages: 62
  • Recherche date v2TEST.xls
    491 KB · Affichages: 65
Dernière édition:

C@thy

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

Merci MJ13,

cela fonctionne!

en fait, je crois que tout le secret est là :
datdeb = Range("D2").Text
et non pas .value

Un grand merci à toi pour tous tes efforts!

Bises

C@thy
 

C@thy

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

Code:
Encore un dernier effort et j'y suis,

mes dates sont sous la dorme 1/1/12

lorsque je fais la recherche avec 2012 cela ne fonctionne pas,

par contre ces 3 macros fonctionnent :

Code:
Sub TESTRechercheLaDate()
Dim ladate As Date
Dim DateTexte As String, jour As String, mois As String
ladate = [O2]
jour = Day(ladate)
If jour < 10 Then jour = "0" & Day(ladate)
mois = Month(ladate)
If mois < 10 Then mois = "0" & Month(ladate)
DateTexte = jour & "/" & mois & "/" & Year(ladate)
ActiveSheet.Range("A7:A" & Range("A65535").End(xlUp).Row).Find(DateTexte, LookIn:=xlValues).Select
MsgBox "trouvé ligne " & ActiveCell.Row
End Sub

Sub testt01()
Dim datedeb As String
Dim toto As String, t
datedeb = Range("O1").Text
t = Split(datedeb, "/")
toto = t(0) & "/" & t(1) & "/" & t(2)
ActiveSheet.Range("A7:A" & Range("A65535").End(xlUp).Row).Find(datedeb, LookIn:=xlValues).Select
MsgBox "trouvé ligne " & ActiveCell.Row
End Sub

Sub testt()
Dim datedeb As String
datedeb = Range("O1").Text
datedeb = Left(datedeb, 6) & "20" & Right(datedeb, 2)
ActiveSheet.Range("A7:A" & Range("A65535").End(xlUp).Row).Find(datedeb, LookIn:=xlValues).Select
MsgBox "trouvé ligne " & ActiveCell.Row
End Sub
mais je suis sûre qu'il y a moyen de faire moins compliqué...
si vous avez une soluce, un grand MERCI, sinon je peux faire avec mon code pas bô...:rolleyes:

Bises

C@thy
 

david84

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

Bonsoir,
As-tu testé le fichier que je t'avais laissé au message 34 ?
Je te signale simplement que la macro testée fonctionne avec les différents formats de date que j'ai utilisés pour faire les tests (mais l'as-tu testé de ton côté ?).
A+
 

C@thy

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

OK, j'ai trouvé, je joins mon exemple

merci à vous tous, la dernière macro fonctionne aussi :

Code:
Sub test3()
Dim datedeb As String
datedeb = Format(Range("O2").Text, "dd/mm/yyyy")
ActiveSheet.Range("A7:A" & Range("A65535").End(xlUp).Row).Find(datedeb, LookIn:=xlValues).Select
MsgBox "trouvé ligne " & ActiveCell.Row
End Sub
Bises

C@thy
 

Pièces jointes

  • Recherche date v2TEST(1).xls
    446.5 KB · Affichages: 69
Dernière édition:

Bebere

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

bonjour le fil
je suis du même avis que David
essaye ce code(içi pour feuil1)

Code:
Sub FindDate()
    Dim MaDate As Date
    Dim Cel As Range, Plage As Range

    Set Plage = ActiveSheet.Range("A1:A" & Range("A65535").End(xlUp).Row)
    Plage.NumberFormat = "dd/mm/yyyy"'même format que O2:O3

    MaDate = ActiveSheet.Range("O3")
    On Error Resume Next
    Set Cel = Plage.Find(What:=MaDate, After:=Range("A1"), LookIn:=xlFormulas _
            , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    On Error GoTo 0

    If Not Cel Is Nothing Then
        ActiveSheet.Range("D4") = "date trouvée ligne " & Cel.Row
    Else
        MsgBox "Date pas trouvée"
    End If
    Plage.NumberFormat = "ddd dd/mm/yyyy"'remet le format initial
    Set Plage = Nothing

End Sub
 

david84

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

Bonjour,
@Bebere : content de voir que tu partages mon avis et que la solution que tu préconises soit similaire dans l'idée à celle que j'avais proposée à c@thy dans mon message #34 resté sans réponse.
Je me sens un peu moins seul du coup:eek:.
A+
 

MJ13

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

Bonjour à tous

J'ai l'impression que ces histoires de dates, on n'est pas prêt d'en avoir fini :(. David et Bébère, il faut considérer que ce qui fonctione dans un cas peut ne pas fonctionner dans un autre cas :confused:.

Le mieux est de tester des solutions, mais la solution universelle n'a pas encore été trouvée (voir avec cet exemple) :eek:.
 

Pièces jointes

  • TrouveDateValeurFormule.xlsm
    22.9 KB · Affichages: 59

MJ13

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

Re

Vous avez aussi la possibilté de passer par la value2.

exemple:
Code:
Sub TrouveDate_Cell_B1()
ForDeb = Range("A1").NumberFormat
Range("A1:A3").NumberFormat = "0"
'Stop
DATeAT = Cells(1, 2).Value2
On Error GoTo suite
nadr = ActiveSheet.Range("A1:A3").Find(DATeAT, LookIn:=xlValues).Offset(0, 0).Address
GoTo fin
suite:
nadr = ActiveSheet.Range("A1:A3").Find(DATeAT, LookIn:=xlFormulas).Offset(0, 0).Address
fin:
Application.Goto Reference:=Range(nadr)
Range("A1:A3").NumberFormat = ForDeb
End Sub
 

C@thy

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

J'ai l'impression que ces histoires de dates, on n'est pas prêt d'en avoir fini :(

C'est bien ce que je me disais, le problème est bien plus complexe (d'Oedipe Lol) qu'il n'y paraît,
je trouvais bizarre que sur certains fichiers les soluces qui fonctionnaient sur d'autres ne marchaient pas,
maintenant grâce à vous tous, je comprends mieux.

Effectivement, David84, j'ai testé ta soluce, qui fonctionne bien, mais je ne comprenais pas trop pourquoi on devait faire tout ça, déformater puis reformater, maintenant ça y est, j'ai compris... (ouf! il était temps! re Lol)

Merci à vous tous pour toutes vos idées quyi font grandement avancer le schmilblick

Bises

C@thy
 

david84

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

Re
@Michel :
David et Bébère, il faut considérer que ce qui fonctione dans un cas peut ne pas fonctionner dans un autre cas
. En prenant le fichier test de mon message 34, quels seraient les formats que tu aurais testés (sur la plage de dates comme sur la date à trouver) qui ne donneraient pas le résultat attendu ?
@c@thy :
Effectivement, David84, j'ai testé ta soluce, qui fonctionne bien, mais je ne comprenais pas trop pourquoi on devait faire tout ça, déformater puis reformater, maintenant ça y est, j'ai compris... (ouf! il était temps! re Lol)
Si tu as compris le but, c'est le principal mais comme je n'avais pas de retour je me demandais si je n'étais pas tout d'un coup devenu transparent...ouf, il n'en est rien !
A+
 

MJ13

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

Re

En prenant le fichier test de mon message 34, quels seraient les formats que tu aurais testés (sur la plage de dates comme sur la date à trouver) qui ne donneraient pas le résultat attendu ?

David: J'ai pas le temps de tester tous les codes fournis, sinon je passerai ma vie devant XLD :eek:.

Mais ce qui m'intéresse, c'est de comprendre la logique d'Excel :).
 

david84

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

Re
David: J'ai pas le temps de tester tous les codes fournis, sinon je passerai ma vie devant XLD .
Ok:). Parce que j'avais fait un certain nombre de tests tous concluants mais comme je n'avais pas tout testé, je me disais que tu avais peut-être trouvé des cas de formats de dates qui ne ramenaient pas le résultat escompté.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 967
Membres
103 070
dernier inscrit
jujulop