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

Masquer les onglets correspondant aux dimanches

11 réponses
Avatar
Patrick BASTARD
Bonsoir à toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard

10 réponses

1 2
Avatar
michdenis
Bonjour Patrick,

Si ton séparateur "Date" dans ton panneau de configuration
est réellement le "point", tu n'as pas besoin de la fonction substitute

Ceci est basé sur les dates à la française : Dimanche étant la journée 7 de la semaine.
En Amérique, c'est la journée 1 ... à adapter...

'--------------------------
Sub test()

For Each SH In Worksheets
If Weekday(CDate(Application. _
WorksheetFunction.Substitute _
(SH.Name, ".", "/")), vbSunday) = 7 Then
SH.Visible = xlSheetHidden
End If
Next
End Sub
'--------------------------


Salutations!



"Patrick BASTARD" a écrit dans le message de news:
Bonsoir à toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard
Avatar
Thierryp
Bonsoir Patrick,

je suis ému....C'est la première fois que j'aide un contributeur :-)))))
Avec un truc de ce genre (si tes onglets sont tous nommés avec les mêmes
règles :

Sub toto()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
jour = Left(Sh.Name, 2)
mois = Right(Left(Sh.Name, 5), 2)
année = Right(Sh.Name, 4)
date_onglet = jour & "/" & mois & "/" & année
If Weekday(date_onglet) = 1 Then 'c'est là que je coince
Sh.Visible = False
End If
Next
End Sub

@+ thierryp

Bonsoir à toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard




Avatar
Patrick BASTARD
Bonsoir, *Denis*

Merci pour ton code qui fonctionne parfaitement, avec deux modifications :
1° J'ai dû rajouter un test pour les feuilles nommées différemment,
2° La valeur du test IfWeekday(...) doit, chez moi, être à 1 pour le
dimanche.

Sub test()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name <> "Premier" And Sh.Name <> "Modele" _
Then
If Weekday(CDate(Application. _
WorksheetFunction.Substitute _
(Sh.Name, ".", "/")), vbSunday) = 1 Then
Sh.Visible = xlSheetHidden
End If
End If
Next
End Sub


Une nouvelle fois, et comme d'habitude,
Mille merci.


--
Bien amicordialement,
P. Bastard



Bonjour Patrick,

Si ton séparateur "Date" dans ton panneau de configuration
est réellement le "point", tu n'as pas besoin de la fonction
substitute

Ceci est basé sur les dates à la française : Dimanche étant la
journée 7 de la semaine.
En Amérique, c'est la journée 1 ... à adapter...

'--------------------------
Sub test()

For Each SH In Worksheets
If Weekday(CDate(Application. _
WorksheetFunction.Substitute _
(SH.Name, ".", "/")), vbSunday) = 7 Then
SH.Visible = xlSheetHidden
End If
Next
End Sub
'--------------------------


Salutations!



"Patrick BASTARD" a écrit dans
le message de news: Bonsoir à
toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard


Avatar
michdenis
Bonjour Thierry,

Tu y étais presque ...

Ta ligne de code problème....!
If Weekday(CDate(date_onglet), vbSunday) = 1 Then

Une date quand elle est écrite sous forme d'une chaîne de caractère,
excel utilise toujours en vba le format américain des dates ( MM / JJ / AAAA)

Fais ce petit test :

Dim D as String
D = "10/02/06"
Range("A1") = D
Range("A1") = 2 octobre 2006

Dim C as Date
C = "10/02/06"
Range("A2") = C
Range("A2") = 10 février 2006

La raison est simple, lorsque tu présentes en VBA, une chaîne de caractère,
comme tu ne donnes pas d'indication précise sur la manière que vba doit
interpréter le format de la date, VBA utilise le format américain de date par défaut.
Si tu utilises la déclaration de variable Dim C As Date ou une fonction Date quelconque
comme : DateValue() , Cdate() , VBA utilise le format date défin dans le panneau
de configuration comme format de référence.

S'ajoute à ceci, la capacité d'excel à reconnaitre "de facto" un certain nombre de formats
de date....qui peut modifier légèrement les énoncés précédentes.


Salutations!





"Thierryp" a écrit dans le message de news:
Bonsoir Patrick,

je suis ému....C'est la première fois que j'aide un contributeur :-)))))
Avec un truc de ce genre (si tes onglets sont tous nommés avec les mêmes
règles :

Sub toto()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
jour = Left(Sh.Name, 2)
mois = Right(Left(Sh.Name, 5), 2)
année = Right(Sh.Name, 4)
date_onglet = jour & "/" & mois & "/" & année
If Weekday(date_onglet) = 1 Then 'c'est là que je coince
Sh.Visible = False
End If
Next
End Sub

@+ thierryp

Bonsoir à toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard




Avatar
Patrick BASTARD
Bonjour, *Thierryp*

Pas mal pour un début...
Bienvenue au club...
;-)

Je n'ai dû modifier que la définition de année : 2 derniers caractères au
lieu de 4, et cela fonctionne parfaitement, avec la même modification que
j'ai communiquée à Denis, concernant les noms d'onglets "exotiques", mais tu
avais déjà émis les réserves dans ta réponse.

Sub toto()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
jour = Left(Sh.Name, 2)
mois = Right(Left(Sh.Name, 5), 2)
année = Right(Sh.Name, 2)
date_onglet = jour & "/" & mois & "/" & année
If Weekday(date_onglet) = 1 Then 'c'est là que je coince
Sh.Visible = False
End If
Next
End Sub

Merci de ton aide.
Je souhaite que cette première contribution soit suivie de nombreuses
autres.
On partage, et on progresse. MaGic' non ?

--
Bien amicordialement,
P. Bastard

Bonsoir Patrick,

je suis ému....C'est la première fois que j'aide un contributeur
:-))))) Avec un truc de ce genre (si tes onglets sont tous nommés
avec les mêmes règles :

Sub toto()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
jour = Left(Sh.Name, 2)
mois = Right(Left(Sh.Name, 5), 2)
année = Right(Sh.Name, 4)
date_onglet = jour & "/" & mois & "/" & année
If Weekday(date_onglet) = 1 Then 'c'est là que je coince
Sh.Visible = False
End If
Next
End Sub

@+ thierryp

Bonsoir à toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard




Avatar
Patrick BASTARD
Bonsoir, *Denis*

Je te confirme que la manière que Thierry a employée pour reconstituer et
tester la date à partir du nom de l'onglet fonctionne chez moi.

VBA 6.3
Version 9969,
VBA : Retail 6.4.8869
Forms3: 11.05709


--
Bien amicordialement,
P. Bastard


Bonjour Thierry,

Tu y étais presque ...

Ta ligne de code problème....!
If Weekday(CDate(date_onglet), vbSunday) = 1 Then

Une date quand elle est écrite sous forme d'une chaîne de caractère,
excel utilise toujours en vba le format américain des dates ( MM / JJ
/ AAAA)

Fais ce petit test :

Dim D as String
D = "10/02/06"
Range("A1") = D
Range("A1") = 2 octobre 2006

Dim C as Date
C = "10/02/06"
Range("A2") = C
Range("A2") = 10 février 2006

La raison est simple, lorsque tu présentes en VBA, une chaîne de
caractère,
comme tu ne donnes pas d'indication précise sur la manière que vba
doit
interpréter le format de la date, VBA utilise le format américain de
date par défaut.
Si tu utilises la déclaration de variable Dim C As Date ou une
fonction Date quelconque
comme : DateValue() , Cdate() , VBA utilise le format date défin dans
le panneau
de configuration comme format de référence.

S'ajoute à ceci, la capacité d'excel à reconnaitre "de facto" un
certain nombre de formats
de date....qui peut modifier légèrement les énoncés précédentes.


Salutations!





"Thierryp" a écrit dans le message de news:
Bonsoir Patrick,

je suis ému....C'est la première fois que j'aide un contributeur
:-)))))
Avec un truc de ce genre (si tes onglets sont tous nommés avec les
mêmes
règles :

Sub toto()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
jour = Left(Sh.Name, 2)
mois = Right(Left(Sh.Name, 5), 2)
année = Right(Sh.Name, 4)
date_onglet = jour & "/" & mois & "/" & année
If Weekday(date_onglet) = 1 Then 'c'est là que je coince
Sh.Visible = False
End If
Next
End Sub

@+ thierryp

Bonsoir à toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard




Avatar
Thierryp
Bon d'accord, ce n'était pas parfait :-(((
Chez moi ça marchait tel que je l'ai écrit....mais j'apprend, j'apprend

@+ thierryp

Bonjour Thierry,

Tu y étais presque ...

Ta ligne de code problème....!
If Weekday(CDate(date_onglet), vbSunday) = 1 Then

Une date quand elle est écrite sous forme d'une chaîne de caractère,
excel utilise toujours en vba le format américain des dates ( MM / JJ / AAAA)

Fais ce petit test :

Dim D as String
D = "10/02/06"
Range("A1") = D
Range("A1") = 2 octobre 2006

Dim C as Date
C = "10/02/06"
Range("A2") = C
Range("A2") = 10 février 2006

La raison est simple, lorsque tu présentes en VBA, une chaîne de caractère,
comme tu ne donnes pas d'indication précise sur la manière que vba doit
interpréter le format de la date, VBA utilise le format américain de date par défaut.
Si tu utilises la déclaration de variable Dim C As Date ou une fonction Date quelconque
comme : DateValue() , Cdate() , VBA utilise le format date défin dans le panneau
de configuration comme format de référence.

S'ajoute à ceci, la capacité d'excel à reconnaitre "de facto" un certain nombre de formats
de date....qui peut modifier légèrement les énoncés précédentes.


Salutations!





"Thierryp" a écrit dans le message de news:
Bonsoir Patrick,

je suis ému....C'est la première fois que j'aide un contributeur :-)))))
Avec un truc de ce genre (si tes onglets sont tous nommés avec les mêmes
règles :

Sub toto()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
jour = Left(Sh.Name, 2)
mois = Right(Left(Sh.Name, 5), 2)
année = Right(Sh.Name, 4)
date_onglet = jour & "/" & mois & "/" & année
If Weekday(date_onglet) = 1 Then 'c'est là que je coince
Sh.Visible = False
End If
Next
End Sub

@+ thierryp

Bonsoir à toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard








Avatar
Thierryp
Re Patrick,

Pas vraiment nouveau sur le forum (je lis tous les jours, mais je ne
suis pas encore un Lucky Luke des réponses)...Un jour peut-être ??


@+ thierryp

Bonjour, *Thierryp*

Pas mal pour un début...
Bienvenue au club...
;-)

Je n'ai dû modifier que la définition de année : 2 derniers caractères au
lieu de 4, et cela fonctionne parfaitement, avec la même modification que
j'ai communiquée à Denis, concernant les noms d'onglets "exotiques", mais tu
avais déjà émis les réserves dans ta réponse.

Sub toto()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
jour = Left(Sh.Name, 2)
mois = Right(Left(Sh.Name, 5), 2)
année = Right(Sh.Name, 2)
date_onglet = jour & "/" & mois & "/" & année
If Weekday(date_onglet) = 1 Then 'c'est là que je coince
Sh.Visible = False
End If
Next
End Sub

Merci de ton aide.
Je souhaite que cette première contribution soit suivie de nombreuses
autres.
On partage, et on progresse. MaGic' non ?



Avatar
Thierryp
Donc, peut-être une solution de "bricolo",....mais efficace :-)))

@+ thierryp

Bonsoir, *Denis*

Je te confirme que la manière que Thierry a employée pour reconstituer et
tester la date à partir du nom de l'onglet fonctionne chez moi.

VBA 6.3
Version 9969,
VBA : Retail 6.4.8869
Forms3: 11.05709




Avatar
michdenis
Bonjour Thierry,

Je n'ai pas dit que cela ne fonctionnait pas,
j'apportais seulement des informations supplémentaires.


Salutations!


"Thierryp" a écrit dans le message de news: %
Bon d'accord, ce n'était pas parfait :-(((
Chez moi ça marchait tel que je l'ai écrit....mais j'apprend, j'apprend

@+ thierryp

Bonjour Thierry,

Tu y étais presque ...

Ta ligne de code problème....!
If Weekday(CDate(date_onglet), vbSunday) = 1 Then

Une date quand elle est écrite sous forme d'une chaîne de caractère,
excel utilise toujours en vba le format américain des dates ( MM / JJ / AAAA)

Fais ce petit test :

Dim D as String
D = "10/02/06"
Range("A1") = D
Range("A1") = 2 octobre 2006

Dim C as Date
C = "10/02/06"
Range("A2") = C
Range("A2") = 10 février 2006

La raison est simple, lorsque tu présentes en VBA, une chaîne de caractère,
comme tu ne donnes pas d'indication précise sur la manière que vba doit
interpréter le format de la date, VBA utilise le format américain de date par défaut.
Si tu utilises la déclaration de variable Dim C As Date ou une fonction Date quelconque
comme : DateValue() , Cdate() , VBA utilise le format date défin dans le panneau
de configuration comme format de référence.

S'ajoute à ceci, la capacité d'excel à reconnaitre "de facto" un certain nombre de formats
de date....qui peut modifier légèrement les énoncés précédentes.


Salutations!





"Thierryp" a écrit dans le message de news:
Bonsoir Patrick,

je suis ému....C'est la première fois que j'aide un contributeur :-)))))
Avec un truc de ce genre (si tes onglets sont tous nommés avec les mêmes
règles :

Sub toto()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
jour = Left(Sh.Name, 2)
mois = Right(Left(Sh.Name, 5), 2)
année = Right(Sh.Name, 4)
date_onglet = jour & "/" & mois & "/" & année
If Weekday(date_onglet) = 1 Then 'c'est là que je coince
Sh.Visible = False
End If
Next
End Sub

@+ thierryp

Bonsoir à toutes et tous.

Mon classeur contient, entre autres, des feuilles nommées (sans les
guillemets) "01.02.2006", "02.02.2006", ..."28.02.2006"
Quelle boucle permettrait de masquer les feuilles correspondant aux
dimanches ?
(valeur 1 renvoyée par joursem())

Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If Sh.Name = XXXXXXXXXXX 'c'est là que je coince
Sh.visible = false

D'avance, merci pour vos suggestions.

Bien amicordialement,
P. Bastard








1 2