XL 2016 Erreur 2042 dans une recherche de date

apt

XLDnaute Impliqué
Bonjour à tous,

Je dois rechercher une date DateCrit dans la colonne A, mais voila, ce me génère une erreur 2042 sur cette ligne :

VB:
' Recherche la date dans la colonne A
dateRow = Application.Match(DateCrit, ws2.Range("A2:A" & ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row), 0)

Comment résoudre ce problème ?

Merci d'avance.
 

Pièces jointes

  • Recherche_Date.xlsm
    16.4 KB · Affichages: 6
Dernière édition:
Solution
Je ne vois toujours pas l'intéret d'un code aussi long pour si peu
et pourquoi déclarer une variable "DateCrit" juste pour recopier Target

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Or IsEmpty(Target) Then Exit Sub
    If Not Intersect(Target, Range("C2")) Is Nothing Then
        if not isdate(target) then
            msgbox "il ne s'agit pas d'une date valide"
            exit sub
        end if
        With ActiveSheet.Range("A:A")
             Set trouve = .Find(Target, LookIn:=xlValues)
            If Not trouve Is Nothing Then
                MsgBox "date trouvée à la ligne: " & trouve.Row
           else
              msgbox "Date introuvable"
            End If
        End With
    End If
End...

patricktoulon

XLDnaute Barbatruc
bonjour
j'arrive après la bataille

mais je pense qu'il était nécessaire de le rappeler

la fonction match de l'application est STRICTE et en plus avec l'argument "0" qui veut dire "exacte"

alors les dates(quelle histoire ;) )
il faut garder à l'esprit que les dates dans excel dument renseignées dans les cellules
NE SONT QUE DES NOMBRES!!!
ce que vous voyez dans la cellule n'est qu'un formatage de la donnée

DONC!!
parti de la c'est le numéro de série de la date que vous devez chercher et non la chaine xx/xx/xxxx

donc je fait un petit essaie comme ça vite fait du code initial en lui ajoutant les parties de code qu'il n'y a pas dans le post 1 adapté a un fichier fait pour l'occasion
VB:
Sub test()
    Dim Ws2 As Worksheet, Daterow, DateCrit As Date
    Set Ws2 = Feuil1

    DateCrit = CDate("05/03/2023")

    Set plage = Ws2.Range("A2:A" & Ws2.Cells(Ws2.Rows.Count, "A").End(xlUp).Row)

    Daterow = Application.Match(CLng(DateCrit), plage, 0)

    MsgBox Daterow + 1

    Cells(Daterow + 1, 1).Interior.Color = vbYellow

    'important
    'le "+1" C EST  PAR CE QUE TA PLAGE COMMENCE EN [A2]
End Sub
démonstration
demo.gif


;)
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 238
Membres
103 162
dernier inscrit
fcfg