Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : Recherche date la plus proche d'aujourdhui...

9 réponses
Avatar
Domi
Bonsoir,
Dans la colonne M11:Mxx de mon tableau, je voudrais selectionner la première
cellule contenant la date du jour + 3 jours (ou ladate la plus proche
immédiatement supérieure si la date recherchée n'existe pas)
Le but étant ensuite de tracer un trait sous cette date...

J'ai fais cette macro qui ne fonctionne que si la date existe...
Quelqu'un pourrait-il me la modifier de façon a sélectionner la date
immédiatement supérieure en cas d'absence...
Merci
Domi

Sub aa()
Application.Goto Range("M11", Range("M65000").End(xlUp)).Find(CDate(Date
+3)), True
Range(ActiveCell, ActiveCell.Offset(0, -12)).Select
.............................Tracage du trait....
End Sub

9 réponses

Avatar
isabelle
bonjour Doumi,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+10,13)")
Range(Range(x), Range(x).Offset(0, -12)).Select

isabelle


Bonsoir,
Dans la colonne M11:Mxx de mon tableau, je voudrais selectionner la première
cellule contenant la date du jour + 3 jours (ou ladate la plus proche
immédiatement supérieure si la date recherchée n'existe pas)
Le but étant ensuite de tracer un trait sous cette date...

J'ai fais cette macro qui ne fonctionne que si la date existe...
Quelqu'un pourrait-il me la modifier de façon a sélectionner la date
immédiatement supérieure en cas d'absence...
Merci
Domi

Sub aa()
Application.Goto Range("M11", Range("M65000").End(xlUp)).Find(CDate(Date
+3)), True
Range(ActiveCell, ActiveCell.Offset(0, -12)).Select
.............................Tracage du trait....
End Sub


Avatar
Domi
C'est presque cela... 99% ;o)
En cas d'absence de la date précise cela sélectionne la date inférieure...
Pour la supérieure je rectifie comment ?
Merci
Domi

"isabelle" a écrit dans le message de
news:
bonjour Doumi,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+10,13)")
Range(Range(x), Range(x).Offset(0, -12)).Select

isabelle


Bonsoir,
Dans la colonne M11:Mxx de mon tableau, je voudrais selectionner la
première


cellule contenant la date du jour + 3 jours (ou ladate la plus proche
immédiatement supérieure si la date recherchée n'existe pas)
Le but étant ensuite de tracer un trait sous cette date...

J'ai fais cette macro qui ne fonctionne que si la date existe...
Quelqu'un pourrait-il me la modifier de façon a sélectionner la date
immédiatement supérieure en cas d'absence...
Merci
Domi

Sub aa()
Application.Goto Range("M11", Range("M65000").End(xlUp)).Find(CDate(Date
+3)), True
Range(ActiveCell, ActiveCell.Offset(0, -12)).Select
.............................Tracage du trait....
End Sub




Avatar
isabelle
bonjour Doumi,

si la plage est trié en ordre croissant, modifie comme ça,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+11,13)")

isabelle


C'est presque cela... 99% ;o)
En cas d'absence de la date précise cela sélectionne la date inférieure...
Pour la supérieure je rectifie comment ?
Merci
Domi

"isabelle" a écrit dans le message de
news:
bonjour Doumi,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+10,13)")
Range(Range(x), Range(x).Offset(0, -12)).Select

isabelle


Bonsoir,
Dans la colonne M11:Mxx de mon tableau, je voudrais selectionner la
première


cellule contenant la date du jour + 3 jours (ou ladate la plus proche
immédiatement supérieure si la date recherchée n'existe pas)
Le but étant ensuite de tracer un trait sous cette date...

J'ai fais cette macro qui ne fonctionne que si la date existe...
Quelqu'un pourrait-il me la modifier de façon a sélectionner la date
immédiatement supérieure en cas d'absence...
Merci
Domi

Sub aa()
Application.Goto Range("M11", Range("M65000").End(xlUp)).Find(CDate(Date
+3)), True
Range(ActiveCell, ActiveCell.Offset(0, -12)).Select
.............................Tracage du trait....
End Sub






Avatar
Domi
C'est le cas,
Merci beaucoup
Domi
"isabelle" a écrit dans le message de
news:
bonjour Doumi,

si la plage est trié en ordre croissant, modifie comme ça,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+11,13)")

isabelle


C'est presque cela... 99% ;o)
En cas d'absence de la date précise cela sélectionne la date
inférieure...


Pour la supérieure je rectifie comment ?
Merci
Domi

"isabelle" a écrit dans le message de
news:
bonjour Doumi,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+10,13)")
Range(Range(x), Range(x).Offset(0, -12)).Select

isabelle


Bonsoir,
Dans la colonne M11:Mxx de mon tableau, je voudrais selectionner la
première


cellule contenant la date du jour + 3 jours (ou ladate la plus
proche




immédiatement supérieure si la date recherchée n'existe pas)
Le but étant ensuite de tracer un trait sous cette date...

J'ai fais cette macro qui ne fonctionne que si la date existe...
Quelqu'un pourrait-il me la modifier de façon a sélectionner la date
immédiatement supérieure en cas d'absence...
Merci
Domi

Sub aa()
Application.Goto Range("M11",
Range("M65000").End(xlUp)).Find(CDate(Date




+3)), True
Range(ActiveCell, ActiveCell.Offset(0, -12)).Select
.............................Tracage du trait....
End Sub








Avatar
Domi
J'ai parlé un petit peu vite...maintenant ça marche un peu trop pour la
valeur sup
ça selectionne bien la valeur immédiatement supérieure à J +3 ;o))
mais si J+3 existe ça selectionne aussi la valeur immédiatement supérieure !
A+
Domi

"isabelle" a écrit dans le message de
news:
bonjour Doumi,

si la plage est trié en ordre croissant, modifie comme ça,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+11,13)")

isabelle


C'est presque cela... 99% ;o)
En cas d'absence de la date précise cela sélectionne la date
inférieure...


Pour la supérieure je rectifie comment ?
Merci
Domi

"isabelle" a écrit dans le message de
news:
bonjour Doumi,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+10,13)")
Range(Range(x), Range(x).Offset(0, -12)).Select

isabelle


Bonsoir,
Dans la colonne M11:Mxx de mon tableau, je voudrais selectionner la
première


cellule contenant la date du jour + 3 jours (ou ladate la plus
proche




immédiatement supérieure si la date recherchée n'existe pas)
Le but étant ensuite de tracer un trait sous cette date...

J'ai fais cette macro qui ne fonctionne que si la date existe...
Quelqu'un pourrait-il me la modifier de façon a sélectionner la date
immédiatement supérieure en cas d'absence...
Merci
Domi

Sub aa()
Application.Goto Range("M11",
Range("M65000").End(xlUp)).Find(CDate(Date




+3)), True
Range(ActiveCell, ActiveCell.Offset(0, -12)).Select
.............................Tracage du trait....
End Sub








Avatar
isabelle
ho oui tu as raison il faudrait vérifier si l'info exact est trouver,

If Not IsError(Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535,0)+10,13)"))
Then
x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535, 0)+10,13)")
Range(Range(x), Range(x).Offset(0, -12)).Select
' .............................Tracage du trait....
Else
x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+11,13)")
Range(Range(x), Range(x).Offset(0, -12)).Select
' .............................Tracage du trait....
End If

isabelle


J'ai parlé un petit peu vite...maintenant ça marche un peu trop pour la
valeur sup
ça selectionne bien la valeur immédiatement supérieure à J +3 ;o))
mais si J+3 existe ça selectionne aussi la valeur immédiatement supérieure !
A+
Domi

"isabelle" a écrit dans le message de
news:
bonjour Doumi,

si la plage est trié en ordre croissant, modifie comme ça,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+11,13)")

isabelle


C'est presque cela... 99% ;o)
En cas d'absence de la date précise cela sélectionne la date
inférieure...


Pour la supérieure je rectifie comment ?
Merci
Domi

"isabelle" a écrit dans le message de
news:
bonjour Doumi,

x = Evaluate("ADDRESS(MATCH(TODAY()+3,M11:M65535)+10,13)")
Range(Range(x), Range(x).Offset(0, -12)).Select

isabelle


Bonsoir,
Dans la colonne M11:Mxx de mon tableau, je voudrais selectionner la
première


cellule contenant la date du jour + 3 jours (ou ladate la plus
proche




immédiatement supérieure si la date recherchée n'existe pas)
Le but étant ensuite de tracer un trait sous cette date...

J'ai fais cette macro qui ne fonctionne que si la date existe...
Quelqu'un pourrait-il me la modifier de façon a sélectionner la date
immédiatement supérieure en cas d'absence...
Merci
Domi

Sub aa()
Application.Goto Range("M11",
Range("M65000").End(xlUp)).Find(CDate(Date




+3)), True
Range(ActiveCell, ActiveCell.Offset(0, -12)).Select
.............................Tracage du trait....
End Sub










Avatar
Daniel.M
Salut Domi,

Aussi quelquechose comme ça:

Dim r As Variant, UneVal As Double
UneVal = Date * 1 + 3#
With Range("M11", Range("M65000").End(xlUp))
r = Application.Match(UneVal, .Cells)
If IsError(r) Then
MsgBox "Pas de valeur égale ou + grande que Date+3"
Else
If r < .Rows.Count Or .Cells(r) = UneVal Then
If .Cells(r) <> UneVal Then r = r + 1 ' incr si nécessaire
.Cells(r, -11).Resize(1, 13).Select ' de A jusqu'à M
MsgBox "La valeur est située à la cellule " _
& .Cells(r).Address & "."
Else
MsgBox "Pas de valeur égale ou + grande que " _
& Format(UneVal, "yyyy mm dd")
End If
End If
End With

Bien sûr, il faut adapter (ou même supprimer) les messages.

Salutations,

Daniel M.

"Domi" wrote in message
news:
Bonsoir,
Dans la colonne M11:Mxx de mon tableau, je voudrais selectionner la première
cellule contenant la date du jour + 3 jours (ou ladate la plus proche
immédiatement supérieure si la date recherchée n'existe pas)
Le but étant ensuite de tracer un trait sous cette date...

J'ai fais cette macro qui ne fonctionne que si la date existe...
Quelqu'un pourrait-il me la modifier de façon a sélectionner la date
immédiatement supérieure en cas d'absence...
Merci
Domi

Sub aa()
Application.Goto Range("M11", Range("M65000").End(xlUp)).Find(CDate(Date
+3)), True
Range(ActiveCell, ActiveCell.Offset(0, -12)).Select
.............................Tracage du trait....
End Sub




Avatar
Daniel.M
Hello,

Mieux structuré, le code donne ceci (et il retourne la première date
lorsqu'elles sont toutes plus grandes qu'Aujourd'hui +3 )
On considère que les données sont triées ascendantes.

Dim ResRech As Variant, UneDate As Double, Trouvee As Boolean
UneDate = Date * 1 + 3#
With Range("M11", Range("M65000").End(xlUp))

ResRech = Application.Match(UneDate, .Cells)
If IsError(ResRech) Then ' Toutes les Dates sont + grandes
ResRech = 1 ' on prend la première
Trouvee = True
ElseIf ResRech < .Rows.Count Or .Cells(ResRech) = UneDate Then
Trouvee = True
If .Cells(ResRech) <> UneDate Then
ResRech = ResRech + 1 'incr si pas égal
End If
Else
Trouvee = False ' Toutes les Dates sont + petites
End If

If Trouvee Then
.Cells(ResRech, -11).Resize(1, 13).Select
MsgBox "La valeur est située à la cellule " _
& .Cells(ResRech).Address & "."
Else
MsgBox "Pas de valeur égale ou + grande que " _
& Format(UneDate, "yyyy mm dd")
End If
End With

Daniel M.
Avatar
Domi
Merci Isabelle et Daniel
Cela marche parfaitement avec vos 2 solutions ;o))
Domi

"Daniel.M" a écrit dans le message de
news:
Hello,

Mieux structuré, le code donne ceci (et il retourne la première date
lorsqu'elles sont toutes plus grandes qu'Aujourd'hui +3 )
On considère que les données sont triées ascendantes.

Dim ResRech As Variant, UneDate As Double, Trouvee As Boolean
UneDate = Date * 1 + 3#
With Range("M11", Range("M65000").End(xlUp))

ResRech = Application.Match(UneDate, .Cells)
If IsError(ResRech) Then ' Toutes les Dates sont + grandes
ResRech = 1 ' on prend la première
Trouvee = True
ElseIf ResRech < .Rows.Count Or .Cells(ResRech) = UneDate Then
Trouvee = True
If .Cells(ResRech) <> UneDate Then
ResRech = ResRech + 1 'incr si pas égal
End If
Else
Trouvee = False ' Toutes les Dates sont + petites
End If

If Trouvee Then
.Cells(ResRech, -11).Resize(1, 13).Select
MsgBox "La valeur est située à la cellule " _
& .Cells(ResRech).Address & "."
Else
MsgBox "Pas de valeur égale ou + grande que " _
& Format(UneDate, "yyyy mm dd")
End If
End With

Daniel M.