XL 2019 Pointer une ligne selon une condition Excel 2019

JMP56

XLDnaute Nouveau
Bonjour,
J'ai un tableau Excel 2019 dont la feuille 'Compte courant' contient des lignes évolutives d'opérations bancaires puisqu'il s'agit d'un gestionnaire de compte personnel. La colonne A contient depuis la ligne 5 jusqu'à la dernière ligne (évolutive), la date d'une opération.
Je cherche, en appuyant sur un bouton, à venir pointer sur la ligne dont la date est un an avant la date d'aujourd'hui.
Quelqu'un saurait il me donner le code vba qui permette de réaliser cette action?
Merci.
 

Staple1600

XLDnaute Barbatruc
Bonjour @JMP56, le fil

Sans fichier exemple, un test à l'aveugle
1) des dates dans la colonne A
dont une = 24/09/22

la macro ci-dessous pointera dessus
Code:
Sub test()
Dim v_AN As Variant
v_AN = DateAdd("yyyy", -1, Date)
Lig = Application.Match(CLng(v_AN), ActiveSheet.Columns(1), 0)
Application.Goto Cells(Lig, 1), True
End Sub
MoinsUn.png
 

Staple1600

XLDnaute Barbatruc
Re

Ca fonctionnera "parfaitement"
• si la date - 1an existe
• si il n'y a pas de doublons

Donc on peut modifier ainsi
Code:
Sub test_bis()
Dim v_AN As Variant, Lig
v_AN = DateAdd("yyyy", -1, Date)
Lig = Application.Match(CLng(v_AN), ActiveSheet.Columns(1), 0)
If Not IsError(Lig) Then
Application.Goto Cells(Lig, 1), True
End If
End Sub
Sub test_ter()
Dim v_AN As Variant, Lig
v_AN = DateAdd("yyyy", -1, Date)
Lig = Application.Match(CLng(v_AN), ActiveSheet.Columns(1), 0)
If IsError(Lig) Then
MsgBox "Aucune date trouvée!", vbCritical
Exit Sub
Else
Application.Goto Cells(Lig, 1), True
End If
End Sub
la dernière macro affichant un message si il n'existe pas date = Aujourdhui - 1 an
 
Dernière édition:

JMP56

XLDnaute Nouveau
Merci beaucoup. Je teste ça mais il me semble que pour éviter une erreur si il n'existe rien par exemple le 23/09 (c'est ce que semble demander votre code: Application.Goto Cells(Lig, 1), True) c'est que la macro recherche la première date avant la date d'il y a un an demandée (24/09 ce jour).
ex: si la première date avant le 24 est le 21/09, eh bien on pointe le 21/09.
 

Staple1600

XLDnaute Barbatruc
Re

Pour le jour d'avant
VB:
Sub test_quatro()
Dim v_AN As Variant, Lig
v_AN = DateAdd("yyyy", -1, Date)
Lig = Application.Match(CLng(v_AN), ActiveSheet.Columns(1), 0)
If IsError(Lig) Then
Liga = Application.Match(CLng(v_AN - 1), ActiveSheet.Columns(1), 0)
Application.Goto Cells(Liga, 1), True
Else
Application.Goto Cells(Lig, 1), True
End If
End Sub
Mais si le jour d'avant n'existe pas lui non plus
;)
 

job75

XLDnaute Barbatruc
Bonjour JMP56, JM, le forum,
Si la date n'existe pas, comment pourrait on prendre celle juste avant (exemple le 23/09)?
S'il y en a plusieurs, comment prendre la première de la liste?
VB:
Sub a()
Dim dat&, i
dat = CLng(DateAdd("m", -12, Date))
For dat = dat To Application.Min(Columns(1)) Step -1
    i = Application.Match(dat, Columns(1), 0)
    If IsNumeric(i) Then Cells(i, 1).Select: Exit For
Next
End Sub
A+
 

Staple1600

XLDnaute Barbatruc
Re, Bonjour @job75

Comme c'était dans mon VBE, je poste
VB:
Sub test_cinq()
Dim v_AN As Variant, Lig
v_AN = Evaluate("MAXIFS(A:A,A:A,""<=""&EDATE(TODAY(),-12))")
Lig = Application.Match(CLng(v_AN), ActiveSheet.Columns(1), 0)
If Not IsError(Lig) Then
Application.Goto Cells(Lig, 1), True
End If
End Sub
trouvera la date antérieure la plus proche à AUJOURDHUI - 12 mois
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 267
Membres
103 168
dernier inscrit
isidore33