Masquer un tableau (ou une liste de lignes)
Bonjour,
Cherchant à affiner une "check-list" pour le boulot j'essaye de faire au plus simple.
Le choix le plus simple reste de faire une feuille par organe, mais cela demande beaucoup de papiers qui finissent vite par s'égarer...
J'aimerais afficher/masquer des tableaux (ou des séries de lignes) en fonction des organes présents sur mon projet.
Au début de mon document, je viens sélectionner les organes présents via une liste déroulante OUI / NON
Puis ensuite je gère l'affichage. Fichier ci-joint.
Gérer via des tableaux me faciliterait peut-être la tâche car le nombre de données à l'intérieur d'un tableau risque d'évoluer dans le temps. Autrement, il faudra très certainement corriger la potentielle vba ?
Petit + : Est-il possible de faire en sorte, après affichage/masquage, que la mise en page ne coupe pas un tableau en deux lors de l'impression, mais qu'elle fasse en sorte que le tableau soit complet sur la page sinon il se trouvera sur la page suivante ?
En espérant trouver mon bonheur grâce à votre entraide,
Cordialement, Arnaud.
Salut Arnaud, Salut xorsankukai,
J'arrive un peu comme la grêle après la vendange, mais comme je m'étais également intéressé à ton problème - dont je n'ai pu finaliser la résolution qu'après ma soirée pétanque - je te livre malgré tout ma solution, puisqu'elle garde ta structure, si c'est important pour toi.
Autrement la résolution du problème est sensiblement la même pour nous deux : celle de xorsankukai étant hautement professionnelle, la mienne bricolée de bric et de broc ; mais les deux arrivent sensiblement au même résultat
Amicalement
Bonjour,
Merci Yvouille
@Arnaud69820 : on peut simplifier
If Target.Value Like "Non" Then ActiveSheet.Rows(.HeaderRowRange.Row & ":" & cel.Row).Hidden = True
If Target.Value Like "Oui" Then ActiveSheet.Rows(.HeaderRowRange.Row & ":" & cel.Row).Hidden = Falsepar
ActiveSheet.Rows(.HeaderRowRange.Row & ":" & cel.Row).Hidden = IIf(Target.Value Like "Non", True, False)
Cordialement,
Salut à vous deux,
Merci pour ces retours !! J'ai pu checker et comprendre les deux façons de faire, c'est génial !
Et ça va m'inspirer pour quelques améliorations d'autres fichiers dans le futur.
Petite question supplémentaire, peut-être plus facile avec la solution de Xorsankukai via des tableaux définis,
Il est possible de définir la mise en page (pour impression) et façon qu'un tableau ne soit jamais scindé et à cheval sur deux pages ? Ou alors ce genre de choses devient complexe ?
J'ai trouvé une ligne intéressante sur le support microsoft "Décochez la case Autoriser le fractionnement des lignes sur plusieurs pages." mais impossible de la trouver pour essayer de l'appliquer.
Merci
Salut,
Je te propose une solution, mais il faut éventuellement l'adapter à ta configuration.
A l'ouverture du fichier, aucun saut-de-page n'est en place. Si tu lances une impression, les sauts-de-page par défaut deviennent visibles. Sur l'image ci-dessous, tu vois que chez moi le premier saut-de-page par défaut est après la ligne 48.
Sur la base de cette information, j'ai tenté de placer une macro qui place un premier saut-de-page en fonction des tableaux visibles sur la première page. Ainsi, si chez toi aussi 48 lignes sont placées sur la première page lorsqu'aucune saut-de-page a été mis en place par macro, tu devrais également avoir le tableau B sur la deuxième page lors de l'impression, au cas où le tableau A est ouvert. Ceci car un saut-de-page est mis en place par macro.
Si tu as 48 lignes sur cette première page, tu peux effectuer d'autres essais avec d'autres combinaisons de tableaux ouverts ou non.
Sinon, soit tu arrives à modifier la macro en fonction du nombre de lignes placées sur la première page selon ta configuration, soit tu m'indiques ce nombre de lignes et je modifie ce code.
Si tu as plus que deux pages à imprimer, je vais devoir compléter mon code pour les pages suivantes. Il serait alors bien que tu me dises où se trouve le deuxième saut-de-page par défaut chez toi.
En ce qui concerne les "X" dans la colonne E, j'ai mis en place un macro qui inscrit un "X" si tu doubles cliques sur une cellule vide et qui efface le "X" s'il y en a un en place.
Amicalement.
Salut Arnaud,
As-tu testé ma proposition ?
Cordialement.
bonjour Yvouille,
une autre méthode pour ces saut-de-page et des tableaux structurés
Sub MesPages()
Dim i, LO, UN, Ligne, LO_Ligne
With Sheets("feuil1")
.ResetAllPageBreaks
Set UN = .Range("A1")
Do 'boucle les sauts
i = i + 1
b = (i <= .HPageBreaks.Count)
If b Then
Ligne = .HPageBreaks.Item(i).Location.Row
On Error Resume Next
Set LO = Nothing: Set LO = .Range("B" & Ligne).ListObject 'Y-a-t-il un tableau dans cellule B de cette ligne ?
On Error GoTo 0
If Not LO Is Nothing Then 'il y a un tableau
LO_Ligne = LO.Range.Row 'première ligne du tableau
If Intersect(UN, .Range("A" & LO_Ligne)) Is Nothing And Ligne <> LO_Ligne Then .HPageBreaks.Add LO.Range.Cells(1)
End If
Set UN = Union(UN, .Range("A" & .HPageBreaks.Item(i).Location.Row))
'debug.print UN.Address
End If
Loop While b
.PrintPreview
End With
End Sub