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

Re Jean-Marie

MJ13: Où as-tu lu dans mon message que j'assimilais C@thy à un problème ??????

J'ai dit ça comme ça :eek:. Je trouvais que la phrase faisait joli :eek:. Cathy, c'est pas un problème pour nous, au contraire, elle nous aide à faire phosphorer nos neurones :eek:.

Par contre, tu as bien compris que le fil était riche en codes divers et variés, c'est ça le plus important :).

Mais pour les filtres, tu peux proposer quelque chose. je pensais même que c'était la suite logique.
 

david84

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

Bonjour,
Avec match sur le fichier ci joint.
en ligne 3 ça marche, pas en ligne 2
attention : je triche !!! (en ligne 3)
Mais le cas s'est posé pour un fichier déjà.
D'accord avec toi sur le principe : pour utiliser Match sur des heures, utiliser Round (je note au passage que Match en VBA n'a pas toujours le même comportement que EQUIV).
Concernant ton explication
' démonstation que match recherche sur une valeur exacte ( index 0 dans ce cas c'est nécessaire car sur d'autres valeurs la colonne reznvoyée ne sera pas bonnes)
' donc on arrondi la valeur à 5 décimales dans la fonction et idem dans la ligne 3)
pourquoi dis-tu
et idem dans la ligne 3
Tes heures ne sont pourtant pas arrondies...
Concernant Find, prendre le soin de placer
Code:
lookat:=xlWhole
sinon cela peut jouer des tours.
Un détail : la MsgBox est appelée 3 fois donc
Code:
Sub AvecFind()
    ' démontration Find = contient valeur affichée et ne recherche pas sur la valeur réelle
    Nat = InputBox("heure?")
    With Worksheets("Essai 1").Range("B2:aW3")
    Set C = .Find(Nat, LookIn:=xlValues, lookat:=xlWhole)
    If Not C Is Nothing Then
        firstAddress = C.Address
        'MsgBox C.Address
        Do
            MsgBox C.Address
            Set C = .FindNext(C)
        Loop While Not C Is Nothing And C.Address <> firstAddress
    End If
End With
End Sub
A+
 

david84

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

Re
les valeurs des heures dans la ligne 3 sont arrondies a 5 décimales( c'est pour cela que ca marche)
pour t'en convaincre tu mets les lignes 2 et 3 au format standard.
Oui effectivement.
Explication SVP pour , lookat:=xlWhole
Au 1er test : Nat=5:00=>résultats ramenés 5:00 et 15:00
Cela est dû au fait que lors d'une précédente recherche, lookat éatait sur xlPart.
C'est la raison pour laquelle il te faut préciser à Lookin et Lookat lorsque tu utilises Range.Find.

Sinon, plutôt que d'être obligé d'arrondir préalablement tes données dans la feuille, tu peux peut-être :
- déclarer ta plage A2:IV2 en tant qu'objet
- te servir du format de nombre utilisé dans la plage pour modifier ta plage dans un array
- et là tu dois pouvoir utiliser Match pour trouver Myvar puisque tu travailleras sur un array contenant les valeurs formatées de A2:IV2.
Pas le temps tout de suite mais si cela t'intéresse je peux regarder de mon côté.
A+
 

david84

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

Bonjour,
Le but de mon intervention était de démontrer les limites de find et de match.
Ton intervention permet en effet de démontrer que sur les heures, l'utilisation de Find est plus adaptée.

Sinon, concernant Match sur les heures, j'avais crû comprendre que tu l'avais utilisé dans un cas précédent et que la solution que tu avais trouvée était préalablement d'arrondir les valeurs de la plage de recherche pour pouvoir t'en sortir, d'où ma remarque, donc à tester de ton côté :
Code:
Sub test()
Dim Pl As Range, T(), i As Long, Nat As String, MyVar As Long
Nat = InputBox("heure?")
Set Pl = Worksheets("Essai 1").Range("A2:IV2")
ReDim T(1 To Pl.Cells.Count)
For i = LBound(T) To UBound(T)
    T(i) = Format(Pl(1, i), Pl.NumberFormat)
Next i
MyVar = Application.Match(Nat, T, 0)
MsgBox Nat & " se trouve en colonne " & MyVar & " et en ligne 2 "
End Sub
A+
 

MJ13

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

Bonjour à tous

Ah, cela fait plaisir de voir toute cette émulation autour d'un thème Excellent :eek:.

Voici mon dernier fichier pour trouver une date ou une heure sur une feuille.

Merci à tous pour votre participation :).
 

Pièces jointes

  • TrouveDate_MJ.xls
    35 KB · Affichages: 100

david84

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

Bonjour,
@JeanMarcel
Bien vu David c'est OK.
Tant mieux, mais je remarque tout de même que sur les heures Find est plus adapté.

@Michel : en passant par
Code:
LookIn:=xlFormulas, LookAt:=xlPart
cela semble effectivement donner de bons résultats sur les heures (sur les dates on le savait déjà mais pas sur les heures).
Pour ton info, la macro plante chez moi sur le format général (plage C5:C10), que j'entre 4/1 ou 04/01/2012.
A+
 
Dernière édition:

MJ13

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

Bonjour David, Jean-Marcel

Merci à vous deux pour les tests :).

David:
Pour ton info, la macro plante chez moi sur le format général (plage C5:C10), que j'entre 4/1 ou 04/01/2012.
C'est justement l'intérêt de déclarer la date recherchée en date. Ainsi, on est sur de chercher que dans les dates. Imaginons qu'on ait sur une feuille un nombre qui contiendrait la date au format numérique, il ne prendra que les cellules formatées en date.
 

C@thy

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

Bonjour à tous les amis de ce fil, que je relis avec un très grand plaisir.

Je me souviens de cette discussion très animée et très riche, et je salue vos performances respectives pour trouver les solutions qui vont bien à un problème fort complexe :
en conclusion
gestion des dates et heures en excel et VBA : pas facile :D

Je plussoie...

Bises

C@thy
 

job75

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

Bonjour C@thy, le fil,

En convertissant la valeur recherchée en texte, cette macro permet de trouver toute valeur texte, nombre, date, heure :

Code:
Sub Rechercher()
Dim x$, i As Variant
x = InputBox("Entrez la valeur texte, nombre, date, heure :", "Rechercher")
If x = "" Then Exit Sub
Range("B8", Range("B" & Rows.Count).End(xlUp)).Name = "T" 'nom défini
If IsNumeric(x) Then x = Replace(CDbl(x), ",", ".") Else _
  If IsDate(x) Then x = Replace(CDbl(CDate(x)), ",", ".")
i = Evaluate("MATCH(""" & x & """,""""&T,0)")
If IsNumeric(i) Then [T].Cells(i).Select 'valeur trouvée
End Sub
Pas très facile à bien comprendre, ni à expliquer...

Fichier joint.

A+
 

Pièces jointes

  • Rechercher(1).xls
    77.5 KB · Affichages: 100
  • Rechercher(1).xls
    77.5 KB · Affichages: 100
  • Rechercher(1).xls
    77.5 KB · Affichages: 106

job75

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

Re,

Ah bien vu Jean-Marcel :)

Avec 0:30 (ou 1:00) CDbl utilise le format scientifique => 2,08333333333333E-02

Il faut donc utiliser CDec pour avoir toujours des nombres décimaux :

Code:
Sub Rechercher()
Dim x$, i As Variant
x = InputBox("Entrez la valeur texte, nombre, date, heure :", "Rechercher")
If x = "" Then Exit Sub
Range("B8", Range("B" & Rows.Count).End(xlUp)).Name = "T" 'nom défini
If IsNumeric(x) Then x = Replace(CDec(x), ",", ".") Else _
  If IsDate(x) Then x = Replace(CDec(CDate(x)), ",", ".")
i = Evaluate("MATCH(""" & x & """,""""&T,0)")
If IsNumeric(i) Then [T].Cells(i).Select 'valeur trouvée
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Rechercher(2).xls
    79 KB · Affichages: 103

job75

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

Re,

Intéressant de noter que la macro précédente ne trouve pas une heure inférieure à 00:00:09.

En effet Excel traite alors la cellule avec la notation scientifique : 00:00:08 => 9,25926E-05.

Pas très grave, on n'a pas souvent à rechercher une heure inférieure à 9 secondes...

A+
 

job75

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

Re,

Pour mieux comprendre ce que je viens de dire, voyez le fichier joint avec cette macro :

Code:
Sub Test()
MsgBox "A1 => " & Evaluate("""""&A1")
MsgBox "A2 => " & Evaluate("""""&A2")
End Sub
A+
 

Pièces jointes

  • Test(1).xls
    33 KB · Affichages: 94
  • Test(1).xls
    33 KB · Affichages: 99
  • Test(1).xls
    33 KB · Affichages: 94
Dernière édition:

job75

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

Re,

Une solution très bourrin.

La valeur cherchée doit correspondre exactement à la valeur affichée :

Code:
Sub Rechercher()
Dim x$, c As Range
x = InputBox("Entrez la valeur texte, nombre, date, heure :", "Rechercher")
If x = "" Then Exit Sub
For Each c In Range("B8", Range("B" & Rows.Count).End(xlUp))
  If c.Text = x Then Exit For
Next
If Not c Is Nothing Then c.Select 'cellule trouvée
End Sub
Fichier (3).

Bonne nuit.
 

Pièces jointes

  • Rechercher(3).xls
    78.5 KB · Affichages: 91
  • Rechercher(3).xls
    78.5 KB · Affichages: 94
  • Rechercher(3).xls
    78.5 KB · Affichages: 94

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 925
Membres
101 841
dernier inscrit
ferid87