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
 

job75

XLDnaute Barbatruc
Bonjour Fabien62, le forum,

Ce n'est pas une "petite question".

1) Il faut toujours une seule et même formule en colonne A des feuilles "Taxe", en A10 :
Code:
=SI((DECALER('Saisie réservations'!B2;$F$5;0)>=DATE(An;$G$5;1))*(DECALER('Saisie réservations'!B2;$F$5;0)<=DATE(An;$H$5;31))*(DECALER('Saisie réservations'!L2;$F$5;0)="Convention");DECALER('Saisie réservations'!B2;$F$5;0);"")
2) Si vous les appliquez aux 3 fichiers précédents vous verrez qu'il y a alors des "trous" dans les dates.

C'est normal et pour les éviter il faut :

- introduire une colonne supplémentaire "Convention" en colonne AL de la feuille "Saisie réservations"

- dans la macro introduire un tri sur cette colonne :
Code:
    With Feuil1 'CodeName de la feuille Saisie réservations
      .[A1].CurrentRegion.Sort .[AL1], xlDescending, .[B1], , xlAscending, Header:=xlYes 'tri sur colonnes AL puis B
    End With
3) Voyez les résultats de tout cela dans les fichiers (1 bis) (2 bis) et (3 bis).

Le fichier (1 bis), comme le fichier (1), ne va pas bien quand il n'y a pas de dates en dessous de la ligne 32.

Voyez la feuille "Sept-Déc" avec le saut de page nuisible, on ne peut pas l'éviter.

C'est pour cela que je vous ai recommandé d'utiliser l'un des 2 autres fichiers.

Edit : j'ai diminué la largeur de la colonne G des fichiers (2 bis) et (3 bis), le zoom passe de 69 % à 75%.

A+
 

Pièces jointes

  • Planning Charge 2017(1 bis).xls
    670 KB · Affichages: 31
  • Planning Charge 2017(2 bis).xls
    1 017 KB · Affichages: 30
  • Planning Charge 2017(3 bis).xls
    1 015.5 KB · Affichages: 34
Dernière édition:

Fabien62

XLDnaute Occasionnel
Suite au MP, la version 3 est idéale mais ne comporte pas les modifications que j'ai faite entre temps

Merci pour votre aide, attention j'ai modifié la formule plutôt que d'intégrer la colonne AL dans l'onglet saisie

Bonne soirée

Cordialement
 

Pièces jointes

  • Copie Planning Charge 2017.xls
    628 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re,
Merci pour votre aide, attention j'ai modifié la formule plutôt que d'intégrer la colonne AL dans l'onglet saisie
Là vous êtes complètement à côté de la plaque cher ami.

Vous ne voyez pas que votre dernière formule et la mienne du post #16 font la même chose ?

Sauf que la vôtre est plus compliquée !

Et vous n'avez pas compris que le tri sur la colonne AL est indispensable même avec cette formule !!

De plus vous protégez le VBA par mot de passe, c'est une protection parfaitement illusoire !!!!

A+
 

Fabien62

XLDnaute Occasionnel
Ah au temps pour moi :)

Vraiment navré je bloque pour ma femme qui est une trifouille tout ahahah, j'ai compris vos explications, désolé j'essaie de progresser sur excel :)

Voici le fichier complètement déverrouiller

Cordialement
 

Pièces jointes

  • Planning Charge 2017.xls
    632.5 KB · Affichages: 32

job75

XLDnaute Barbatruc
Bonjour Fabien62, le forum,

Encore un petit détail.

Dans la formule en A10 remplacer <=DATE(An;$H$5;31) par <DATE(An;$H$5+1;1)

Ainsi la formule fonctionne quel que soit le dernier mois de la période étudiée.

Fichiers (2 ter) et (3 ter).

En outre peut-être faut-il souligner une évidence.

Pour chaque feuille "Taxe" le nombre de dates trouvées en "Saisie réservations" ne doit pas dépasser 63.

Sinon augmenter le nombre de lignes ou réduire la période étudiée.

Bonne journée.
 

Pièces jointes

  • Planning Charge 2017(2 ter).xls
    1 017 KB · Affichages: 39
  • Planning Charge 2017(3 ter).xls
    1 018.5 KB · Affichages: 46

job75

XLDnaute Barbatruc
Bonjour Fabien62, le forum,

Deux remarques sur les solutions précédentes.

1) La macro s'exécute en près d'une seconde chez moi, c'est dû au fait que toutes les feuilles se recalculent quand le tri s'exécute et quand les lignes sont affichées ou masquées.

Cela à cause des nombreuses fonctions volatiles DECALER.

Dans les fichiers joints le calcul est passé en manuel, cela fait gagner 50% sur le temps de calcul.

2) La feuille "Saisie réservations" ne doit pas être filtrée sinon le résultat peut être mauvais.

Bonne journée.
 

Pièces jointes

  • Planning Charge 2017(2-4°).xls
    669.5 KB · Affichages: 32
  • Planning Charge 2017(3-4°).xls
    691.5 KB · Affichages: 36
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Une solution (sans saut de page) avec des tableaux VBA :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim deb As Date, fin As Date, t1, t2, tablo, i&, n&
With Sh
  If .Name Like "Taxe*" Then 'critère
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual 'calcul manuel
    deb = DateSerial([An], .[G5], 1)
    fin = DateSerial([An], .[H5] + 1, 1)
    .Rows.Hidden = False 'RAZ
    .[A10:C72,H10:H72] = "" 'RAZ
    t1 = .[A10:C72]: t2 = .[H10:H72]
    tablo = Feuil1.[A1].CurrentRegion.Resize(, 27) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
      If tablo(i, 2) >= deb And tablo(i, 2) < fin And tablo(i, 12) = "Convention" Then
        n = n + 1
        If n < 64 Then 'sécurité
          t1(n, 1) = tablo(i, 2): t1(n, 2) = tablo(i, 3)
          t1(n, 3) = tablo(i, 27): t2(n, 1) = tablo(i, 10)
        End If
      End If
    Next
    .[A10:C72] = t1: .[H10:H72] = t2
    .[A10:H72].Sort .[A10], xlAscending, Header:=xlNo 'tri
    If n < 63 Then .Rows(n + 10 & ":72").Hidden = True 'Total en ligne 73
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    If n > 63 Then MsgBox "Le nombre de lignes du tableau est insuffisant..."
  End If
End With
End Sub
Fichier (4).

C'est à peine plus rapide mais ici la feuille "Saisie réservations" peut être filtrée sans inconvénient.

A+
 

Pièces jointes

  • Planning Charge 2017(4).xls
    600 KB · Affichages: 36
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Une solution avec une seule feuille pour les taxes et un UserForm :
Code:
Private Sub CommandButton1_Click() 'bouton Valider
Dim deb As Date, fin As Date, t1, t2, tablo, i&, n&
If Not IsDate(TextBox1) Then TextBox1 = "": TextBox1.SetFocus: Exit Sub
If Not IsDate(TextBox2) Then TextBox2 = "": TextBox2.SetFocus: Exit Sub
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual 'calcul manuel
deb = CDate(TextBox1)
fin = CDate(TextBox2)
[A3] = UCase("période du " & Format(deb, "d mmmm yyyy") & " au " & Format(fin, "d mmmm yyyy"))
[A3] = Replace([A3], " 1 ", " 1ER ")
Rows.Hidden = False 'RAZ
[A10:C72,H10:H72] = "" 'RAZ
t1 = [A10:C72]: t2 = [H10:H72]
tablo = Feuil1.[A1].CurrentRegion.Resize(, 27) 'matrice, plus rapide
For i = 2 To UBound(tablo)
  If tablo(i, 2) >= deb And tablo(i, 2) <= fin And tablo(i, 12) = "Convention" Then
    n = n + 1
    If n < 64 Then 'sécurité
        t1(n, 1) = tablo(i, 2): t1(n, 2) = tablo(i, 3)
        t1(n, 3) = tablo(i, 27): t2(n, 1) = tablo(i, 10)
    End If
  End If
Next
[A10:C72] = t1: [H10:H72] = t2
[A10:H72].Sort [A10], xlAscending, Header:=xlNo 'tri
If n < 63 Then Rows(n + 10 & ":72").Hidden = True 'Total en ligne 73
Application.Calculation = xlCalculationAutomatic
Unload Me
Application.ScreenUpdating = True
If n > 63 Then MsgBox "Le nombre de lignes du tableau est insuffisant, réduisez la période..."
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Planning Charge 2017 - USF(1).xls
    600 KB · Affichages: 35
Dernière édition:

Discussions similaires

Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83