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

VBA Selection de plage entre dates...bis pour petite correction éventuelle

4 réponses
Avatar
Domi
Bonjour à tous,

Bien que découlant de mon post précèdent "VBA Sélection de plage entre
dates", je préfère faire une nouvelle demande.
Alain Vallon m'a proposé hier ces deux codes pour sélectionner des plages
variables entre dates.

'Sélectionner la plage B11:Hxx ou la ligne xx est celle dont la date en
B=Aujourdhui - 5
'Pour la feuille active
Range("B11:H" & Evaluate("Match(" & (Date * 1) - 5 & ", B11:B1000, 0)")
+10).Select

'Pour la plage Bzz:Bxx ou zz est la ligne dont la date en B=Aujourdhui - 25
et xx est celle dont la date en B=Aujourdhui - 10
'Pour la feuille active (sur une seule ligne de code) :
Range("B" & Evaluate("Match(" & (Date * 1) - 25 & ", B:B, 0)") & ":H" &
Evaluate("Match(" & (Date * 1) - 10 & ", B:B, 0)")).Select

Je n'avais pas précisé que la colonne B ne contient pas tous les jours
calendaires mais uniquement les jours ouvrés
Après quelques tests je me suis aperçu que la macro plantait si la date
recherchée n'existait pas (si nous sommes jeudi : la date recherchée est un
dimanche : plantage...) Y aurait-il un moyen d'éviter cela en sélectionnant
non pas une date précise mais la date la plus proche ?

Merci
Domi

4 réponses

Avatar
Philippe.R
Bonjour Domi,
Peut être peux tu essayer en modifiant cette ligne :
Evaluate("Match(" & (Date * 1) - 10 & ", B:B, 0)")).Select
de cette manière :
Evaluate("Match(" & (Date * 1) - 10 & ", B:B, 1)")).Select
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002

"Domi" a écrit dans le message de news:%
Bonjour à tous,

Bien que découlant de mon post précèdent "VBA Sélection de plage entre
dates", je préfère faire une nouvelle demande.
Alain Vallon m'a proposé hier ces deux codes pour sélectionner des plages
variables entre dates.

'Sélectionner la plage B11:Hxx ou la ligne xx est celle dont la date en
B=Aujourdhui - 5
'Pour la feuille active
Range("B11:H" & Evaluate("Match(" & (Date * 1) - 5 & ", B11:B1000, 0)")
+10).Select

'Pour la plage Bzz:Bxx ou zz est la ligne dont la date en B=Aujourdhui - 25
et xx est celle dont la date en B=Aujourdhui - 10
'Pour la feuille active (sur une seule ligne de code) :
Range("B" & Evaluate("Match(" & (Date * 1) - 25 & ", B:B, 0)") & ":H" &
Evaluate("Match(" & (Date * 1) - 10 & ", B:B, 0)")).Select

Je n'avais pas précisé que la colonne B ne contient pas tous les jours
calendaires mais uniquement les jours ouvrés
Après quelques tests je me suis aperçu que la macro plantait si la date
recherchée n'existait pas (si nous sommes jeudi : la date recherchée est un
dimanche : plantage...) Y aurait-il un moyen d'éviter cela en sélectionnant
non pas une date précise mais la date la plus proche ?

Merci
Domi






Avatar
AV
Comme on est encore dans la période de garantie, dans le cadre du SAV :

La référence est la date du jour ou la plus proche au-dessous
Comme tu n'as pas précisé "...la date la plus proche...", j'ai fais un choix !
Pour la date exacte ou la plus proche au-dessus, fais signe...

'Sélectionner la plage B11:Hxx ou la ligne xx est celle dont la date en
B=Aujourdhui - 5


Range("B11:H" & Evaluate("match(max(if(B11:B1000<=" & (Date * 1) - 5 &
",B11:B1000)),B11:B1000,0)") + 10).Select

'Pour la plage Bzz:Bxx ou zz est la ligne dont la date en B=Aujourdhui - 25
et xx est celle dont la date en B=Aujourdhui - 10


z = Evaluate("match(max(if(B11:B1000<=" & (Date * 1) - 25 &
",B11:B1000)),B11:B1000,0)")
Range("B" & z & ":B" & z + 15).Select

AV

Avatar
Domi
Merci pour ce SAV efficace.

Domi

"AV" a écrit dans le message de news:

Comme on est encore dans la période de garantie, dans le cadre du SAV :

La référence est la date du jour ou la plus proche au-dessous
Comme tu n'as pas précisé "...la date la plus proche...", j'ai fais un
choix !

Pour la date exacte ou la plus proche au-dessus, fais signe...

'Sélectionner la plage B11:Hxx ou la ligne xx est celle dont la date en
B=Aujourdhui - 5


Range("B11:H" & Evaluate("match(max(if(B11:B1000<=" & (Date * 1) - 5 &
",B11:B1000)),B11:B1000,0)") + 10).Select

'Pour la plage Bzz:Bxx ou zz est la ligne dont la date en B=Aujourdhui -
25


et xx est celle dont la date en B=Aujourdhui - 10


z = Evaluate("match(max(if(B11:B1000<=" & (Date * 1) - 25 &
",B11:B1000)),B11:B1000,0)")
Range("B" & z & ":B" & z + 15).Select

AV





Avatar
AV
Merci pour ce SAV efficace.


Merci pour le retour
AV