Rechercher une date précise dans une liste

MJ13

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

Bonjour Bébère

Merci de te joindre à la joyeuse troupe et de faire des tests (on en a besoin :)).

Bon sinon, un code intéressant à tester avec mon fichier en Post 82:

Modifier ainsi le code la feuille1:

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
et le code du Userform:

Code:
Private Sub CommandButton1_Click()
ActiveCell = TextBox1
ActiveCell.Offset(1, 0) = TextBox1.Value
ActiveCell.Offset(2, 0) = TextBox1.Text
ActiveCell.Offset(3, 0) = CDate(TextBox1)
Unload Me
End Sub
Puis double-cliquez sur la feuille1 et entrer une fois 5/4 puis 4/5. Ensuite, observez :).
 

Misange

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

La macro que j'ai indiquée au post #72 fonctionne parfaitement pour rechercher une date dans plusieurs colonnes.
J'ai essayé tous les formats de dates auxquels je pouvais penser et je n'en n'ai trouvé aucun qui la plante.
Je ne comprends pas ce qui te bloque Michel
 

MJ13

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

Bonjour Misange

La macro que j'ai indiquée au post #72 fonctionne parfaitement pour rechercher une date dans plusieurs colonnes.
J'ai essayé tous les formats de dates auxquels je pouvais penser et je n'en n'ai trouvé aucun qui la plante.
Je ne comprends pas ce qui te bloque Michel
Attention, il y a la de ta part et de la part de David, une ambiguïté.

Je n'ai jamais dit que vos codes ne fonctionnaient pas. Mais, J'aime bien comprendre la logique d'Excel.

Alors, je fais souvent des plannings et je n'arrive jamais à avoir un code universel pour la recherche des dates sur une feuille en valeurs ( pour les formules, nous y viendrons après). Ensuite j'utilise toujours l'enregistreur de macro qui permet de gagner beaucoup de temps. Mais cette recherche de date n'est qu'une partie du développement et je galère toujours.

Donc, dans les fichier que j'ai mis en post #71, il y a un texte sur la feuille aide qui a toute son importance puis 3 feuilles à tester. Mais le plus important est la feuille1. Pour voir le code, il suffit de faire Alt+F11 ou click droit sur les boutons et choisir affecter une macro puis modifier.

Mon but n'est pas de trouvé le code improbable mais le code le plus simple :).

Après il y a l'histoire des formules. Je considère que c'est une erreur de mettre une formule en date sur un planning. C'est un peu comme une cellule fusionnée sur une base de données qui peut entraîner des galères.

Voila, Le sujet est clos pour moi.

Bon Week-End à tous :).
 

david84

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

Bonjour Michel et aux autres,
Alors, je fais souvent des plannings et je n'arrive jamais à avoir un code universel pour la recherche des dates sur une feuille en valeurs ( pour les formules, nous y viendrons après). Ensuite j'utilise toujours l'enregistreur de macro qui permet de gagner beaucoup de temps. Mais cette recherche de date n'est qu'une partie du développement et je galère toujours.
L'ambiguïté à mon avis vient de la manière dont le sujet est posé et de l'exemple fourni et non sur le fait de savoir si tel code est ou non fonctionnel.

Personnellement, ce n'est qu'à partir de ton message #78 que j'ai compris (enfin je pense) la problématique posée : tu veux pouvoir rechercher une date quelle que soit son format et sa position dans la feuille de calcul sans être obligé de définir une plage de recherche. Et dans ce cas effectivement on ne peut passer par Match qui est une solution efficace lorsque la recherche porte sur une seule colonne.

Mais je trouve que le fichier du message #71 n'est pas adapté à la problématique posée puisque la recherche ne porte que sur une seule colonne, d'où l'ambiguïté soulevée.

Il faudrait que l'exemple puisse comporter des dates placées sur différentes colonnes de la feuille de calcul (en valeur uniquement dans un 1er temps puis en mélangeant ensuite valeur et formule si on le veut).
Chacun pourrait alors tester de son côté sur les mêmes bases en faisant varier les formats testé (pratique ton raccourci clavier !).

Mais il faudrait également que ceux qui testent communiquent :
- les formats testés
- ceux qui ne posent pas problème
- ceux qui posent problème
d'où ma proposition de fichier récapitulatif du message #77 (qui n'est d'ailleurs pas adapté à la problématique puisque fait avant).

Ceci permettrait :
- de cerner les formats récalcitrants
- de rechercher éventuellement un code plus adapté
- de confronter nos tests en fonction de la version d'Excel utilisée car peut-être que les résultats divergeront en fonction de la version comme c'est le cas entre 2003 et 2007 concernant les dates reversées dans la feuille de calcul après traitement dans un Array.

Or, d'après le profil de chacun, nous avons des versions différentes : tu es sous 2007, Bébère est sous 2003, je suis sous 2010 v64 bits et Misange est sous 2010 v32 bits (à moins qu'elle n'utilise déjà la version 2013).

En résumé, je trouve le sujet intéressant mais il faudrait nous accorder sur le fichier exemple et le mode opératoire pour pouvoir être plus efficace.

Qu'en pense-tu ?
Qu'en pensez-vous ?
A+
 

MJ13

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

Bonjour David

Personnellement, ce n'est qu'à partir de ton message #78 que j'ai compris (enfin je pense) la problématique posée : tu veux pouvoir rechercher une date quelle que soit son format et sa position dans la feuille de calcul sans être obligé de définir une plage de recherche. Et dans ce cas effectivement on ne peut passer par Match qui est une solution efficace lorsque la recherche porte sur une seule colonne.

Mais je trouve que le fichier du message #71 n'est pas adapté à la problématique posée puisque la recherche ne porte que sur une seule colonne, d'où l'ambiguïté soulevée.
Et bien, tu as tout compris :).

Pour le fichier sur le Post #71, tu déplaces le 17/01 puis tu fais une recherche en rentrant 17/1 pour vérifier si cela fonctionne :eek:.

Merci, maintenant, je passe à autre chose.

Bon Week-End :).
 

Bebere

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

bonjour aux dames et au messieurs
résultat de test avec match, grand gagnant
2 boutons pour match(une colonne,plusieurs colonnes)
1 bouton pour find
tout dans le fichier
 

Fichiers joints

bhbh

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

Bonjour,

Comme je n'ai pas lu tout le fil, excusez-moi si je suis hors sujet....

Pour ma part, lorsque je recherche une date, ben, je recherche un nombre....

Style (en prenant en référence le fichier de Bebere :)):

Code:
Sub trouve_date()
Dim LaDate As Long
Dim Lig As Long
LaDate = CDate(InputBox("Entrez une date entre le 01/01/2012 et le 21/10/2016"))
Lig = Application.Match(LaDate, Columns(1), 0)
End Sub
Mais je suis peut-être hors sujet...:cool:

Bonne soirée, et bon W-E à tous
 

david84

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

Bonsoir,
merci Bebere pour ce fichier test comme je les aime et que l'on pourra si nécessaire faire évoluer.
Ci-joint ton fichier en retour agrémenté de 23 nouveaux formats :
3/1
4/1/11
05/01/11
6-janv.
7-janv.-11
8-janv.
janv.-11
janvier-11
11 janvier 2011
12/1/11 12:00 AM
13/1/11 0:00
j
j-11
1/16/2011
17-janv.-2011
19-janv-11
20-janv
janv-11
22/01/2011 00:00
23 janvier 2011
24/1/11 12:00 AM
25/1/11 0:00
janv-2011
Les formats sont :
d/m;@
d/m/yy;@
dd/mm/yy;@
[$-40C]d-mmm;@
[$-40C]d-mmm-yy;@
[$-40C]d-mmm;@
[$-40C]mmm-yy;@
[$-40C]mmmm-yy;@
[$-40C]d mmmm yyyy;@
[$-409]d/m/yy h:mm AM/PM;@
d/m/yy h:mm;@
[$-40C]mmmmm;@
[$-40C]mmmmm-yy;@
m/d/yyyy;@
[$-40C]d-mmm-yyyy;@
d-mmm-yy
d-mmm
mmm-yy
m/d/yyyy h:mm
[$-40C]d mmmm yyyy;@
[$-409]d/m/yy h:mm AM/PM;@
d/m/yy h:mm;@
mmm-yyyy
Attention ! Quelque fois, le code avec Find ramène une date mais pas la bonne (date inversée).
Je n'ai pas regardé les codes dans le détail ni testé les codes proposés par Michel pour l'instant.
A+
 

Fichiers joints

C@thy

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

Bonjour les p'tits loups,

j'ai remarqué qu'il faut toujours rajouter 1 au résultat :
res = Application.Match(CDbl(date0), d, 0) + 1

Bises

C@thy
 

C@thy

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

Je réitère ma question :
mais dis-moi, c'est quoi Short Date??
MJ13 ton code ne fonctionne pas avec lun 12/11/2012 j'obtiens du texte...

Bises a tutti et bonne journée

C@thy
 
Dernière édition:

C@thy

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

Voilà, je vous joins un petit bout de mon classeur,
j'aimerais bien savoir pourquoi les dates choisies dans la listbox sont récupérées en anglais et en texte,
et pourquoi malgré tout le find fonctionne...
c'est un vieux fichier, créé sans doute il y a plus de 20 ans, mais qui sert toujours

Merci à vous, bibises et bonne journée

C@thy
 

Fichiers joints

Bebere

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

bonjour C@thy,le forum
dans liste colonnes A et B ce ne sont pas des dates(cellules format standard)
find est paramétré sur LookAt:=xlPart
exemple,recherche mar 03/01/2012 ,find trouve une correspondance avec 03/01/2012(si existe)
 

C@thy

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

merci Bebere, pourquoi je récupère la date de ma listbox en anglais???

Bizz

C@thy
 

Bebere

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

C@thy la valeur trouvée par find,met un MsgBox ActiveCell.Value
après find et tu le sauras
 

david84

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

Bonjour,
tests effectués sur les 37 formats de nombres répertoriés dans le classeur test avec Find en reprenant l'un des codes proposés par Michel :
- en passant par
Code:
LookIn:=xlFormulas , LookAt:=xlWhole
le format général et les formats utilisant les dates +heures ne fonctionnent pas.

- en passant par
Code:
LookIn:=xlFormulas , LookAt:=xlPart
seul le format général ne fonctionne pas.
J'ai placé un petit code couleur dans le code pour mieux visualiser le résultat.
Code:
Sub TestDateFind()
    Dim x, d As Range, L As Long, C As Range, Li As Long
    Application.ScreenUpdating = False

    x = InputBox("entrer une date entre le 21/01/2012 et le 30/03/2013")
    If x = "" Then Exit Sub
    Range("rapport!A2:E100").Clear
    Set d = [PlageDates2]
    Range("rapport!E2") = CDate(x)

    For L = 2 To Range("test_format_date!C65536").End(xlUp).Row    'les formats
        d.NumberFormat = Range("test_format_date!C" & L).NumberFormat
        On Error Resume Next
        '** içi pour tester avec find
        
        'avec LookAt:=xlWhole
        With Worksheets("RechercheFeuil")
            Set C = .Cells.Find(What:=CDate(x), After:=.Range("A1"), LookIn:=xlFormulas _
            , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
        End With
        
        'avec LookAt:=xlPart
        'With Worksheets("RechercheFeuil")
        '    Set C = .Cells.Find(What:=CDate(x), After:=.Range("A1"), LookIn:=xlFormulas _
        '    , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
        'End With
        
        '**
        On Error GoTo 0
        If Not C Is Nothing Then
            Li = Range("rapport!A65536").End(xlUp).Row + 1
            Range("rapport!A" & Li) = Range("test_format_date!C" & L).NumberFormat
            Range("rapport!B" & Li) = d.Cells(C.Row, 1)
            Range("rapport!B" & Li).NumberFormat = Range("test_format_date!C" & L).NumberFormat
            Range("rapport!C" & Li) = d.Cells(C.Row, C.Column)
            Range("rapport!C" & Li).NumberFormat = "dd/mm/yyyy"
            If Range("rapport!C" & Li).Value <> Range("DateE").Value Then Range("rapport!C" & Li).Interior.ColorIndex = 4
            Range("rapport!D" & Li) = "L:" & C.Row & ",C:" & C.Column
        Else
            Li = Range("rapport!A65536").End(xlUp).Row + 1
            Range("rapport!A" & Li) = Range("test_format_date!C" & L).NumberFormat
            Range("rapport!B" & Li) = CDate(x)
            Range("rapport!B" & Li).NumberFormat = Range("test_format_date!C" & L).NumberFormat
            Range("rapport!C" & Li) = "pas trouvé"
            Range("rapport!C" & Li).Interior.ColorIndex = 4
        End If
    
    Next L
    Worksheets("rapport").Activate
    Application.ScreenUpdating = True
End Sub
J'ai épuré le classeur en ne gardant que les 2 tests sur les plages multicolonne.
Si vous avez d'autres codes qui fonctionnent suite aux tests, vous pouvez les rajouter.
A+

Edit :
Bonjour,

Comme je n'ai pas lu tout le fil, excusez-moi si je suis hors sujet....

Pour ma part, lorsque je recherche une date, ben, je recherche un nombre....

Style (en prenant en référence le fichier de Bebere ):
Bonjour Hubert. Désolé d'avoir zappé ton message. Je pense que nous sommes d'accord sur le principe.
 

Fichiers joints

Dernière édition:

MJ13

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

Bonjour à tous

Alors, la David, tu m'as scotché, ton fichier, aux petits oignons, il est super. Un must sur XLD :eek:.

Je n'aurai qu'un mot Merci :).
 
Dernière édition:

david84

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

Bonsoir,
Bonjour à tous

Alors, la David, tu m'as scotché, ton fichier, aux petits oignons, il est super. Un must sur XLD .

Je n'aurai qu'un mot Merci .
Content que cela te plaise mais c'est plutôt Bebere qu'il faut remercier car c'est lui qui a conçu le fichier à la base.
Je n'ai fait que rajouter des formats plus une ou deux choses et faire des tests.
A+
 

MJ13

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

Bonjour David

Content que cela te plaise mais c'est plutôt Bebere qu'il faut remercier car c'est lui qui a conçu le fichier à la base.
Merci aussi à Bébère :).

Et merci aussi à Hubert, pour sa participation :eek:.
 

Haut Bas