XL 2016 trouver numéro de ligne correspondant à une date donnée [RESOLU]]

moutchec

XLDnaute Occasionnel
bonjour le forum, bonjour à tous,
je rame pour mettre dans une variable le numéro de ligne d'une date.
en fait j'ai des dates en colonne B et j'aimerais indiquer une date (dans une cellule par exemple) et demander au code de trouver la mémé date en colonne B et stocker le numéro de ligne dans une variable.
qlq a une idée svp?
merci d'avance.
Moutchec
 

Robert

XLDnaute Barbatruc
Bonsoir Moutchec, bonsoir le forum,

En pièce jointe un petit fichier exemple (pas eu la flemme comme toi !...) avec la macro événementielle Change qui agit au changement dans A1 (à adapter) .

Le code :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim DCM As Date 'déclare la variable DCM (Date de la Cellule Modifiée)
Dim DB As Date 'déclare la variable DB (Date de la Boucle)
Dim LI As Integer 'déclare la variable LI (LIgne)

'si le changement a lieu ailleurs qu'en A1, sort de la procédure
'à adapter mettre l'adresse de la cellule où tu vas écrire la date
If Target.Address(0, 0) <> "A1" Then Exit Sub
If Target = "" Then Exit Sub 'si la celluel est effacée, sort de la procédure
If Not IsDate(Target.Value) Then 'condition : si la cellule n'est pas une date ou pas une date valide
    MsgBox "Date non valide !" 'message
    Target.Select 'revient à la cellule modifiée
    Exit Sub 'sort de la procédure
End If 'fin de la condition
DL = Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la denière ligne éditée DL de la colonne B
DCM = DateSerial(Year(Target.Value), Month(Target.Value), Day(Target.Value)) 'définit la date DCM de la cellule modifiée
For I = 1 To DL 'boucle sur toutes les lignes I de la colonne B (de 1 à DL)
    'définit la date de DB de la cellule de la boucle
    DB = DateSerial(Year(Cells(I, "B").Value), Month(Cells(I, "B").Value), Day(Cells(I, "B").Value))
    'si les deux date corresponde, définit la ligne LI et sort de la boucle
    If DCM = DB Then LI = I: Exit For
Next I 'prochaine ligne de la boucle
If LI = 0 Then Exit Sub 'si LI est égale à 0, sort de la procédure
Cells(LI, "B").Select 'délectionne la cellule ligne LI colonne B (cette ligne peut être supprimée)
MsgBox "La date se trouve dans la ligne " & LI 'message (cette ligne peut être supprimée)
End Sub

Le fichier :
 

Fichiers joints

eriiiic

XLDnaute Barbatruc
Bonjour à tous,

Si les dates sont saisies et non calculées, pour une recherche sans boucle, changer la fin de la macro de Robert depuis le For avec :
VB:
    Set c = [B:B].Find(Target.Value, , xlFormulas, xlWhole)
    If c Is Nothing Then
        MsgBox "Date absente"
    Else
        MsgBox "La date se trouve dans la ligne " & c.Row    'message (cette ligne peut être supprimée)
    End If
Si elles sont calculées il faut utiliser WorksheetFunction.Match
eric
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

Mon interprétation de la question (en me basant sur le descriptif du message#1)
"Des dates en colonne B, une date critèré dans une cellule et mettre un numéro de ligne dans une variable"
;)
PS: La macro TestC est juste là pour commodité de lecture.
VB:
Sub TestA()
Dim Madate
Madate = DateSerial(Year([D2]), Month([D2]), Day([D2]))
Columns("B:B").AutoFilter 1, Madate
End Sub
Sub TestB()
Dim NumLigne&
MsgBox ActiveSheet.AutoFilter.Range.Offset(1, 0).SpecialCells(12)(1).Row
NumLigne = ActiveSheet.AutoFilter.Range.Offset(1, 0).SpecialCells(12)(1).Row
MsgBox NumLigne
End Sub
Sub TestC()
Dim p As Range, NumLigne&
Set p = ActiveSheet.AutoFilter.Range.Offset(1, 0)
NumLigne = p.SpecialCells(12)(1).Row
MsgBox NumLigne
End Sub
 

moutchec

XLDnaute Occasionnel
bonjour à tous et merci pour vos réponses, vraiment désolé c'est vrai que c'est plus simple avec un fichier exemple. en parcourant les différentes contributions, je suis arrivé à mes fins. mes sincères remerciements.
Moutchec.
 

Discussions similaires


Haut Bas