Rechercher une cellule au format date "avr.22"

Bonsoir,

L'utilisateur dispose d'une liste déroulante :

cette liste déroulante est composée des 12 mois de l'année avec le YYYY dynamique en fonction de la date d'ouverture du classeur : janv.-22

Une fois la date sélectionnée, il faut que la macro trouve, dans l'en-tête du tableau, cette date (puis sélectionne la cellule du dessous. Ça OK).

Tout fonctionne quand les cellules sont au format texte, mais dès qu'il s'agit de date... Quelle galère !!!

Je joints un classeur, avec dessus, les deux exemples (celui qui fonctionne et celui qui ne fonctionne pas). Tout y est expliqué.

Voici le code qui ne fonctionne pas :

Sub test_date()

'déclaration des variables :
Dim Valeur_Cherchee As Date

'on cherche date dans la cellule V3
Valeur_Cherchee = Range("V3").Value

'dans la ligne "en-tête du tableau" on cherche (=plage de recherche)
Set PlageDeRecherche = Range("U10:AH10")

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set RechercheDate = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

'traitement de l'erreur possible : Si on ne trouve rien :
    If RechercheDate Is Nothing Then
        'ici, traitement pour le cas où la date n'est pas trouvée
        AdresseTrouvee = "La date " & Valeur_Cherchee & " n'est pas présente dans la sélection de recherche " & PlageDeRecherche.Address
    Else
        'ici, traitement pour le cas où la date est trouvée
        AdresseTrouvee = RechercheDate.Offset(1, 0).Select
    End If
    MsgBox AdresseTrouvee
End Sub

A toi qui me sortira de la mouise, sache que je te remercie infiniment. Je retourne m'arracher les cheveux.

Al.

Bonjour,

J'ai utilisé un subterfuge pour régler votre problème, en transposant vos dates du tableau des mois au dessus de la ligne de titre, puis j'ai rendu invisibles ces dates. Nb : Tableau382 renommé en t_Codes. Les mois pourraient s'appeler maintenant Janvier, Février, etc...

J'ai ajouté un événement sur changement du mois en V3.

Sub Test_Date2()

Dim Valeur_Cherchee As Date
Dim I As Integer
Dim PlageDeRecherche As Range
Dim AdresseTrouvee As String

    Valeur_Cherchee = CDate(Range("V3"))
    Set PlageDeRecherche = Range("t_Codes[#Headers]")
    AdresseTrouvee = "La date " & Valeur_Cherchee & " n'est pas présente dans la sélection de recherche " & PlageDeRecherche.Address

    For I = 1 To PlageDeRecherche.Count
        If Valeur_Cherchee = CDate(PlageDeRecherche(I).Offset(-1, 0)) Then
           AdresseTrouvee = PlageDeRecherche(I).Offset(1, 0).Address
        End If
    Next I

    Set PlageDeRecherche = Nothing

    MsgBox AdresseTrouvee

End Sub

Hello Eric,

Au top, ta solution fonctionne !!!

Sans prétention j'avais aussi pensé à passer par un ligne annexe mais avec des lettres elles même associées au tableau de la liste déroulante mais ça sentait l'usine à gaz tous ça !

Pourtant ton code est simple (je veux dire court ^^) et efficace.

J'ai aussi vu l'ajout de l’événement en V3.

Bon maintenant il faut que je m'approprie ton code pour pouvoir l'adapter... et j'avoue que le tiens est plus complexe que ce que je suis en mesure de produire.

L'objectif réel est :

- une fois par mois l'opérateur extrait de sage les quantités vendues sur une feuille "saisie"

- les données sont rapatriées puis triées depuis une colonne RechercheV sur la feuille (simplifiée) que j'ai partagé sur ce post

- ces données doivent être copiées collées (collage spécial : valeur) dans la colonne du mois... D'où ma demande : chercher la date issue de la liste déroulante. sélectionner la cellule du dessous pour ensuite paste la colonne rechercheV qui aura été copiée au préalable.

l'objectif est que l'opérateur est le moins de manipulation à faire car grosse source d'erreur surtout sur des données sensibles.

Je m'adapte et reviens vers toi pour te donner suite puis clôturer ce post si je n'ai plus de pb.

Encore merci.

Au plaisir de te lire.

Al.

bonsoir,

Sub Recherche_Date()
     Set c = Range("W10:AH10")     'la plage de recherche
     monmois = Evaluate("=TEXT(" & CDbl(Range("V3").Value) & ",""[$-fr-FR]mmm-yy"")")     'traduction d'un jour en mois+année en francais)
     r = Application.Match(monmois, c, 0)
     If IsNumeric(r) Then
          MsgBox "Votre date " & monmois & " se trouve dans la cellule " & c.Cells(1, r).Address
     Else
          MsgBox "mal chance"
     End If
End Sub

Salut BsALv,

Je te remercie de prendre du temps pour moi.

Ton code me plait dans son efficience mais je ne suis pas capable (après quelque tests) de le remanier.

Oublions la msgbox. (elle me servait seulement à voir si la macro répondait positivement ou négativement. (=test visuel)

Peux-tu finir ce code en : sélectionne la cellule contenant la date trouvée + ".Offset(1, 0).Select"

ce serait juste parfait.

Je pourrais ainsi continuer l'ensemble de mon code final.

Dans l'attente de te lire.

Amicalement.

la cellule concernée est c.Cells(1, r) et donc avec cet offset(1), ce sera c.cells(2,r).select

Un GRAND merci à vous la communauté.

Merci à toi ERIC

Merci à toi BsAlv.

Je clôture avec succès cette recherche !

Au plaisir.

Rechercher des sujets similaires à "rechercher format date avr"