OVH Cloud OVH Cloud

Rows et Hidden... problème...

8 réponses
Avatar
Sanaell
Bonjour, suite au conseil de Ange Ounis (merci encore)
Voici ma macro (la sienne modifiée)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < 35 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Voici ce que j'aimerais
Sachant que dans les 31 onglets j'ai les 31 lignes de chaques jours (de la
ligne 4 à 34), je voudrais que les jours 29 à 31 soit cachés s'il ne
correspondent pas au mois
...

Février = 28 jours en 2006
donc les lignes 32 - 33 - 34 seront cachées dans chaques feuille du document
(y compris les feuilles cachées)

Merci d'avance.

8 réponses

Avatar
Daniel
Bonjour.
Non testé :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < DernierJour +1 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Cordialement.
Daniel

"Sanaell" a écrit dans le message de
news:
Bonjour, suite au conseil de Ange Ounis (merci encore)
Voici ma macro (la sienne modifiée)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < 35 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Voici ce que j'aimerais
Sachant que dans les 31 onglets j'ai les 31 lignes de chaques jours (de la
ligne 4 à 34), je voudrais que les jours 29 à 31 soit cachés s'il ne
correspondent pas au mois
...

Février = 28 jours en 2006
donc les lignes 32 - 33 - 34 seront cachées dans chaques feuille du
document
(y compris les feuilles cachées)

Merci d'avance.


Avatar
Sanaell
Ca me pose toujours le même problème
Boucle infinie....

voila ma macro entiere

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
For Each rw In sht.Rows
If rw.Row > 3 Or rw.Row < DernierJour + 3 Then
rw.Hidden = False
End If
If DernierJour + 3 < 34 Then
For i = DernierJour + 3 To 34
rw.Hidden = True
Next i
End If
Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Quand je change la valeur du mois dans la feuille ca donne ca en Débogage
If rw.Row > 3 Or rw.Row < DernierJour + 3 Then
rw.Hidden = False
-> End If


Bonjour.
Non testé :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < DernierJour +1 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Cordialement.
Daniel

"Sanaell" a écrit dans le message de
news:
Bonjour, suite au conseil de Ange Ounis (merci encore)
Voici ma macro (la sienne modifiée)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < 35 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Voici ce que j'aimerais
Sachant que dans les 31 onglets j'ai les 31 lignes de chaques jours (de la
ligne 4 à 34), je voudrais que les jours 29 à 31 soit cachés s'il ne
correspondent pas au mois
...

Février = 28 jours en 2006
donc les lignes 32 - 33 - 34 seront cachées dans chaques feuille du
document
(y compris les feuilles cachées)

Merci d'avance.







Avatar
lSteph
Bonjour,

Au cas où, tu n'es pas obligé de cacher les lignes
pour faire cela (il suffit de mettre rien si ce n'est plus le bon mois
et idem pour les formules en ligne s'il n'y a pas de date en b)
exemple premier jour date du mois en b4 la formule en b5 recopiée vers bas
jusqu'à b33

=SI(B3<>"";SI(MOIS(B3+1)=MOIS(B3);B3+1;"");"")


Cordialement

lSteph


"Sanaell" a écrit dans le message de
news:
Bonjour, suite au conseil de Ange Ounis (merci encore)
Voici ma macro (la sienne modifiée)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < 35 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Voici ce que j'aimerais
Sachant que dans les 31 onglets j'ai les 31 lignes de chaques jours (de la
ligne 4 à 34), je voudrais que les jours 29 à 31 soit cachés s'il ne
correspondent pas au mois
...

Février = 28 jours en 2006
donc les lignes 32 - 33 - 34 seront cachées dans chaques feuille du
document
(y compris les feuilles cachées)

Merci d'avance.


Avatar
lSteph
Pardon tu partais de la date en b4 donc en b5:

=SI(B4<>"";SI(MOIS(B4+1)=MOIS(B4);B4+1;"");"")

jusqu'à b34


"lSteph" a écrit dans le message de news:
uP%
Bonjour,

Au cas où, tu n'es pas obligé de cacher les lignes
pour faire cela (il suffit de mettre rien si ce n'est plus le bon mois
et idem pour les formules en ligne s'il n'y a pas de date en b)
exemple premier jour date du mois en b4 la formule en b5 recopiée vers bas
jusqu'à b33

=SI(B3<>"";SI(MOIS(B3+1)=MOIS(B3);B3+1;"");"")


Cordialement

lSteph


"Sanaell" a écrit dans le message de
news:
Bonjour, suite au conseil de Ange Ounis (merci encore)
Voici ma macro (la sienne modifiée)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < 35 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Voici ce que j'aimerais
Sachant que dans les 31 onglets j'ai les 31 lignes de chaques jours (de
la
ligne 4 à 34), je voudrais que les jours 29 à 31 soit cachés s'il ne
correspondent pas au mois
...

Février = 28 jours en 2006
donc les lignes 32 - 33 - 34 seront cachées dans chaques feuille du
document
(y compris les feuilles cachées)

Merci d'avance.






Avatar
Sanaell
Bonjour,
Le problème c'est que je dois Cacher les lignes car
je n'ai pas que 1 résultat sur 1 cellule mais 14 colonnes avec 14 formules
différentes dont ce genre là
=SI('1'!J34=7;"Di";SI('1'!J34=6;"Sa";SI('1'!J34=5;"Ve";SI('1'!J34=4;"Je";SI('1'!J34=3;"Me";SI('1'!J34=2;"Ma";SI('1'!J34=1;"Lu")))))))

=ET(SI(JOUR(AUJOURDHUI())³4;1);SI(MOIS(AUJOURDHUI())=L34;1))

etc... (ce qui fait 4*366 formules à modifier) car les formules sont toutes
différences en fonction du jour .... oui je sais.

voilà ma macro mais now elle marche le seul problème c 'est que je voudrais
que ce soit que si la cellule E3 qui change qu elle se lance, sinon elle ne
fait rien
autre ptit truc elle bug, elle m affiche soit 31 jours, soit 28 jours....
mais pas 30 ou 29 ///
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet, rw
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B35").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
'For Each rw In sht.Rows
' If rw.Row > 34 Then
' Exit For
' End If
' If rw.Row > 3 Or rw.Row < DernierJour + 3 Then
' rw.Hidden = False
' End If
' If rw.Row > 31 And DernierJour + 3 < 34 Then
' For i = DernierJour + 3 To 34
' rw.Hidden = True
' Next i
' End If
'Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub



"lSteph" wrote:

Pardon tu partais de la date en b4 donc en b5:

=SI(B4<>"";SI(MOIS(B4+1)=MOIS(B4);B4+1;"");"")

jusqu'à b34


"lSteph" a écrit dans le message de news:
uP%
Bonjour,

Au cas où, tu n'es pas obligé de cacher les lignes
pour faire cela (il suffit de mettre rien si ce n'est plus le bon mois
et idem pour les formules en ligne s'il n'y a pas de date en b)
exemple premier jour date du mois en b4 la formule en b5 recopiée vers bas
jusqu'à b33

=SI(B3<>"";SI(MOIS(B3+1)=MOIS(B3);B3+1;"");"")


Cordialement

lSteph


"Sanaell" a écrit dans le message de
news:
Bonjour, suite au conseil de Ange Ounis (merci encore)
Voici ma macro (la sienne modifiée)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < 35 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Voici ce que j'aimerais
Sachant que dans les 31 onglets j'ai les 31 lignes de chaques jours (de
la
ligne 4 à 34), je voudrais que les jours 29 à 31 soit cachés s'il ne
correspondent pas au mois
...

Février = 28 jours en 2006
donc les lignes 32 - 33 - 34 seront cachées dans chaques feuille du
document
(y compris les feuilles cachées)

Merci d'avance.











Avatar
Philippe
Je reprends en cours et je n'ai pas tout lu en détail, mais pour tes formules
à rallonge, il faut absolument que tu crées des Function avec du code vb pour
remplacer tes imbrications de boucles, tu pourras utiliser un Select Case qui
est bien plus facile à améliorer et à gérer.
Voilà voilà.
Bon courage.
Avatar
lSteph
Bonjour,

Plus simplement alors, la formule en B et
tu testes seulement les cellules B32,33,34 pour masquer ou non
et une condition au change sur target en b4


Cordialement.

lSteph

"Sanaell" a écrit dans le message de
news:
Bonjour,
Le problème c'est que je dois Cacher les lignes car
je n'ai pas que 1 résultat sur 1 cellule mais 14 colonnes avec 14 formules
différentes dont ce genre là
=SI('1'!J34=7;"Di";SI('1'!J34=6;"Sa";SI('1'!J34=5;"Ve";SI('1'!J34=4;"Je";SI('1'!J34=3;"Me";SI('1'!J34=2;"Ma";SI('1'!J34=1;"Lu")))))))

=ET(SI(JOUR(AUJOURDHUI())³4;1);SI(MOIS(AUJOURDHUI())=L34;1))

etc... (ce qui fait 4*366 formules à modifier) car les formules sont
toutes
différences en fonction du jour .... oui je sais.

voilà ma macro mais now elle marche le seul problème c 'est que je
voudrais
que ce soit que si la cellule E3 qui change qu elle se lance, sinon elle
ne
fait rien
autre ptit truc elle bug, elle m affiche soit 31 jours, soit 28 jours....
mais pas 30 ou 29 ///
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet, rw
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B35").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
'For Each rw In sht.Rows
' If rw.Row > 34 Then
' Exit For
' End If
' If rw.Row > 3 Or rw.Row < DernierJour + 3 Then
' rw.Hidden = False
' End If
' If rw.Row > 31 And DernierJour + 3 < 34 Then
' For i = DernierJour + 3 To 34
' rw.Hidden = True
' Next i
' End If
'Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub



"lSteph" wrote:

Pardon tu partais de la date en b4 donc en b5:

=SI(B4<>"";SI(MOIS(B4+1)=MOIS(B4);B4+1;"");"")

jusqu'à b34


"lSteph" a écrit dans le message de news:
uP%
Bonjour,

Au cas où, tu n'es pas obligé de cacher les lignes
pour faire cela (il suffit de mettre rien si ce n'est plus le bon mois
et idem pour les formules en ligne s'il n'y a pas de date en b)
exemple premier jour date du mois en b4 la formule en b5 recopiée vers
bas
jusqu'à b33

=SI(B3<>"";SI(MOIS(B3+1)=MOIS(B3);B3+1;"");"")


Cordialement

lSteph


"Sanaell" a écrit dans le message
de
news:
Bonjour, suite au conseil de Ange Ounis (merci encore)
Voici ma macro (la sienne modifiée)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < 35 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Voici ce que j'aimerais
Sachant que dans les 31 onglets j'ai les 31 lignes de chaques jours
(de
la
ligne 4 à 34), je voudrais que les jours 29 à 31 soit cachés s'il ne
correspondent pas au mois
...

Février = 28 jours en 2006
donc les lignes 32 - 33 - 34 seront cachées dans chaques feuille du
document
(y compris les feuilles cachées)

Merci d'avance.













Avatar
lSteph
re,
par ailleurs
je n'ai pas que 1 résultat sur 1 cellule mais 14 colonnes avec 14 formules
Amha mais c'est très à priori

une simplification à deux ou trois formules serait probablement souhaitable
suivant l'organisation des données (sauf elle même à revoir)
surtout si :
différentes dont ce genre là
=SI('1'!J34=7;"Di";SI('1'!J34=6;"Sa";SI('1'!J34=5;"Ve";SI('1'!J34=4;"Je";SI('1'!J34=3;"Me";SI('1'!J34=2;"Ma";SI('1'!J34=1;"Lu")))))))
suggestion:


=choisir('1'!J34;"Lu";"Ma";"Me";"Je";"Ve";"Sa";"Di")

lSteph


"Sanaell" a écrit dans le message de
news:
Bonjour,
Le problème c'est que je dois Cacher les lignes car
je n'ai pas que 1 résultat sur 1 cellule mais 14 colonnes avec 14 formules
différentes dont ce genre là
=SI('1'!J34=7;"Di";SI('1'!J34=6;"Sa";SI('1'!J34=5;"Ve";SI('1'!J34=4;"Je";SI('1'!J34=3;"Me";SI('1'!J34=2;"Ma";SI('1'!J34=1;"Lu")))))))

=ET(SI(JOUR(AUJOURDHUI())³4;1);SI(MOIS(AUJOURDHUI())=L34;1))

etc... (ce qui fait 4*366 formules à modifier) car les formules sont
toutes
différences en fonction du jour .... oui je sais.

voilà ma macro mais now elle marche le seul problème c 'est que je
voudrais
que ce soit que si la cellule E3 qui change qu elle se lance, sinon elle
ne
fait rien
autre ptit truc elle bug, elle m affiche soit 31 jours, soit 28 jours....
mais pas 30 ou 29 ///
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet, rw
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B35").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
'For Each rw In sht.Rows
' If rw.Row > 34 Then
' Exit For
' End If
' If rw.Row > 3 Or rw.Row < DernierJour + 3 Then
' rw.Hidden = False
' End If
' If rw.Row > 31 And DernierJour + 3 < 34 Then
' For i = DernierJour + 3 To 34
' rw.Hidden = True
' Next i
' End If
'Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub



"lSteph" wrote:

Pardon tu partais de la date en b4 donc en b5:

=SI(B4<>"";SI(MOIS(B4+1)=MOIS(B4);B4+1;"");"")

jusqu'à b34


"lSteph" a écrit dans le message de news:
uP%
Bonjour,

Au cas où, tu n'es pas obligé de cacher les lignes
pour faire cela (il suffit de mettre rien si ce n'est plus le bon mois
et idem pour les formules en ligne s'il n'y a pas de date en b)
exemple premier jour date du mois en b4 la formule en b5 recopiée vers
bas
jusqu'à b33

=SI(B3<>"";SI(MOIS(B3+1)=MOIS(B3);B3+1;"");"")


Cordialement

lSteph


"Sanaell" a écrit dans le message
de
news:
Bonjour, suite au conseil de Ange Ounis (merci encore)
Voici ma macro (la sienne modifiée)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DernierJour, sht As Worksheet
DernierJour = Day(DateSerial(Year(Date),
Sheets("Configuration").Range("B8").Value + 1, 0))
Application.ScreenUpdating = False
For Each sht In Sheets
sht.Visible = True
' For Each rw In sht.Rows
' If rw.Row > 3 Or rw.Row < 35 Then
' rw.Hidden = False
' End If
' Next rw
Next sht
If DernierJour <> 31 Then
For i = DernierJour + 1 To 31
Sheets(Format(i, "00")).Visible = False
Next i
End If
End Sub

Voici ce que j'aimerais
Sachant que dans les 31 onglets j'ai les 31 lignes de chaques jours
(de
la
ligne 4 à 34), je voudrais que les jours 29 à 31 soit cachés s'il ne
correspondent pas au mois
...

Février = 28 jours en 2006
donc les lignes 32 - 33 - 34 seront cachées dans chaques feuille du
document
(y compris les feuilles cachées)

Merci d'avance.