XL 2016 Masquage lignes VBA

Fabien62

XLDnaute Occasionnel
VB:
Private Sub Worksheet_Activate()

Application.ScreenUpdating = False

Cells.EntireRow.Hidden = False
For Each cel In Feuil7.Range("A55:A77")
If cel = 0 Then cel.EntireRow.Hidden = True
Next
Application.ScreenUpdating = True

End Sub

Je vous joins le fichier avec le code accessible

Merci beaucoup pour votre aide

Cordialement
 

vgendron

XLDnaute Barbatruc
Hello
essaie avec ce code dans un module standard
VB:
Sub mask()

Application.ScreenUpdating = False
ActiveSheet.Range("E10:E77").EntireRow.Hidden = True 'on masque tout par défaut
'les lignes dont la colonne E n'est pas vide sont réaffichées
ActiveSheet.Range("E10:E77").SpecialCells(xlCellTypeFormulas, xlNumbers).EntireRow.Hidden = False
Application.ScreenUpdating = True
End Sub

et ce code dans les différentes feuilles
VB:
Private Sub Worksheet_Activate()
mask
End Sub
 

job75

XLDnaute Barbatruc
Bonjour Fabien62, vgendron,

Je pense que vgendron n'a pas compris la logique du fichier déposé sur l'autre fil.

Placer cette macro dans ThisWorkbook :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim i As Variant, c As Range
With Sh
  If .Name Like "Taxe*" Then 'critère
    Application.ScreenUpdating = False
    .Rows.Hidden = False 'RAZ
    i = Application.Match(9 ^ 9, .[A:A])
    If IsError(i) Then Exit Sub 'sécurité
    Set c = .[B:B].Find("Total*", .Cells(i, 2), xlValues)
    If c Is Nothing Then MsgBox "Total non trouvé !", 48: Exit Sub
    .Rows(i + 1 & ":" & Application.Match("zzz", .[B:B])).Hidden = True
    c.EntireRow.Hidden = False
  End If
End With
End Sub
Les feuilles concernées sont supposées porter un nom commençant par Taxe.

Edit : bien sûr effacer les Worksheet_Activate de ces feuilles...

A+
 
Dernière édition:

Fabien62

XLDnaute Occasionnel
Bonjour,

Merci à vous 2 pour vos codes, ils fonctionnent tout deux parfaitement, j'ai choisis celui de job75 étant plus rapide à mettre en oeuvre.

Une toute dernière question, comment paramétrer mon impression pour que par exemple lorsque tout peux tenir sur 1 ou 2 pages cela ne se mettent pas sur 3 ?

Cordialement
 

job75

XLDnaute Barbatruc
Re,

Bah la macro de vgendron peut être mise dans ThisWorkbook comme la mienne.

Mais elle affiche toujours tous les totaux, a priori ce n'est pas ce que vous souhaitiez...

Pour la mise en page en vue de l'impression :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim i As Variant, c As Range
With Sh
  If .Name Like "Taxe*" Then 'critère
    Application.ScreenUpdating = False
    .Rows.Hidden = False 'RAZ
    i = Application.Match(9 ^ 9, .[A:A])
    If IsError(i) Then Exit Sub 'sécurité
    Set c = .[B:B].Find("Total*", .Cells(i, 2), xlValues)
    If c Is Nothing Then MsgBox "Total non trouvé !", 48: Exit Sub
    .Rows(i + 1 & ":" & Application.Match("zzz", .[B:B])).Hidden = True
    c.EntireRow.Hidden = False
    With .PageSetup 'mise en page pour l'impression
      .PrintTitleRows = "$7:$9"
      .PrintArea = ""
      .Orientation = xlPortrait 'xlLandscape
      .Zoom = False
      .FitToPagesWide = 1
      .FitToPagesTall = 2
    End With
  End If
End With
End Sub
A+
 

vgendron

XLDnaute Barbatruc
Hello Job and All

justement. dans le fichier initial, comme les totaux n'avaient pas été colorés en bleu (enfin.. je crois). je me suis dit qu'il les voulait toujours affichés...
et oui. le Thisworkbook plutot que 3 worksheet activate. plus simple en effet.. j'oublie assez souvent d'ailleurs..
 

Fabien62

XLDnaute Occasionnel
Bonsoir,

Merci encore pour votre aide, ce n'est pas toujours facile de se faire comprendre par écris :( j'en suis désolé.

En fait, je vous ai mis un exemple en fichier joint, il faut que l'impression reste comme elle est dans sa globalité mis à part pour les cas de figure ou il n'y aurais qu'une page ou deux comme dans l'onglet Sept-Déc, j'aimerais que la partie signature date soit présente sous le total de la feuille 2 et qu'il n'y ai donc que 2 feuilles à imprimer.

J'aimerais aussi que cela se fasse si il n'y a qu'une seule page, il faut que cela suive le nombre de ligne mais qu'il n'y ai bien que 20 lignes par pages c'est une obligation de l'état :(

Je ne sais pas si c'est possible en vba, au pire je trouverais une parade.

Merci encore
 

Pièces jointes

  • Copie Planning Charge 2017.xls
    640.5 KB · Affichages: 36

job75

XLDnaute Barbatruc
Bonjour Fabien62, vgendron, le forum,

Je comprends que vous voulez contrôler l'insertion de sauts de pages au-dessus des lignes 32 et 55 :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim i As Variant, c As Range
With Sh
  If .Name Like "Taxe*" Then 'critère
    Application.ScreenUpdating = False
    .Rows.Hidden = False 'RAZ
    i = Application.Match(9 ^ 9, .[A:A])
    If IsError(i) Then Exit Sub 'sécurité
    Set c = .[B:B].Find("Total", .Cells(i, 2), xlValues, xlWhole)
    If c Is Nothing Then MsgBox "Total non trouvé !", 48: Exit Sub
    .Rows(i + 1 & ":" & Application.Match("zzz", .[B:B])).Hidden = True
    c.EntireRow.Hidden = False
    '---sauts de pages---
    .ResetAllPageBreaks
    If Not .Rows(32).Hidden Then .HPageBreaks.Add Before:=.Rows(32)
    If Not .Rows(55).Hidden Then .HPageBreaks.Add Before:=.Rows(55)
  End If
End With
End Sub
Fichier joint.

Bonne journée.
 

Pièces jointes

  • Planning Charge 2017(1).xls
    665.5 KB · Affichages: 38
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Il me paraît plus judicieux et plus simple d'imprimer un maximum de 2 pages.

Pour cela il faut l'orientation "Portrait" et ne prévoir qu'un seul "Total à reporter".

Voyez ce fichier (2) avec un saut de page éventuel en ligne 40 :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim i As Variant
With Sh
  If .Name Like "Taxe*" Then 'critère
    Application.ScreenUpdating = False
    .Rows.Hidden = False 'RAZ
    i = Application.Match(9 ^ 9, .[A:A])
    If IsError(i) Then Exit Sub 'sécurité
    If i < 74 Then .Rows(i + 1 & ":74").Hidden = True 'Total en ligne 75
    '---saut de page---
    .ResetAllPageBreaks
    If Not .Rows(40).Hidden Then .HPageBreaks.Add Before:=.Rows(40)
  End If
End With
End Sub
Edit : sur mon imprimante HP le zoom d'impression est toujours de 69%.

Avec des marges étroites (gauche et droite 0,64 cm) il est de 78%.

A+
 

Pièces jointes

  • Planning Charge 2017(2).xls
    658 KB · Affichages: 33
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Pour toujours imprimer sur une seule page voyez ce fichier (3) :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim i As Variant
With Sh
  If .Name Like "Taxe*" Then 'critère
    Application.ScreenUpdating = False
    .Rows.Hidden = False 'RAZ
    i = Application.Match(9 ^ 9, .[A:A])
    If IsError(i) Then Exit Sub 'sécurité
    If i < 72 Then .Rows(i + 1 & ":72").Hidden = True 'Total en ligne 73
  End If
End With
End Sub
Avec le maximum de 63 dates affichées le zoom d'impression est de 58%.

A+
 

Pièces jointes

  • Planning Charge 2017(3).xls
    657 KB · Affichages: 33

Fabien62

XLDnaute Occasionnel
Bonjour à tous,

Une petite question, comment modifier la formule présente en ligne 57 colonne 1 onglets taxe séjour juin-août pour que seul soit pris en compte les lignes ayant pour statut "Convention"

=SI(DECALER('Saisie réservations'!B45;$F$5;0)>=DATE(An;$G$5;1);SI(DECALER('Saisie réservations'!B45;$F$5;0)<=DATE(An;$H$5;31);DECALER('Saisie réservations'!B45;$F$5;0);"");"")

Merci beaucoup

Cordialement
 

Discussions similaires

Réponses
2
Affichages
147

Statistiques des forums

Discussions
312 198
Messages
2 086 145
Membres
103 129
dernier inscrit
Atruc81500