Zone d'impression contrôlée via VBA (lignes masquées/affichées variables)

Bonjour à tous,

Je trouve régulièrement mes réponses sur les forums Excel depuis des années, mais là je sèche donc je vous appelle à l'aide.

Situation :

  • Un Fichier complexe devant masquer/afficher des clauses selon les situations pour finalement imprimer un PDF avec le strict minimum (on passe ainsi de 10 pages à environ 4 à 5 pages). Je vais changer de poste et souhaite laisser ce fichier opérationnel pour mes collègues.

Le soucis est que je dois protéger la feuille à la modification accidentelle :

  • Si je masque (ou groupe) à la main des lignes au milieu d'une zone d'impression, Alors elles n’apparaîtront pas lors de l'impression.
  • Si je masque via VBA des lignes au milieu d'une zone d'impression, Alors elles apparaîtront lors de l'impression...

Mais pourquoi donc?!?!! J'ai même fait un enregistrement de macro pour essayer d’obtenir le code VBA exact qui fonctionnerait à l'impression mais il n'y a aucune différence avec le mien: J'ai bien utilisé "EntireRows" pour masquer les lignes tout comme l'enregistrement.

Plusieurs solutions sont à ma disposition sachant que le fichier devra être protégé par un mot de passe puis crypté par un autre :

  • Je peux demander à mes utilisateurs de grouper/dégrouper à la main mais dans ce cas le premier mot de passe sera lisible par tous dans le code VBA (car il n'y a pas d'autres solutions pour faire fonctionner un groupage sur une feuille protégée). Laissant le fichier modifiable par n'importe quel stagiaire de passage ou nouvel embauché...
  • Je peux écrire les numéros de pages à imprimer et laisser les utilisateurs masquer/afficher manuellement les lignes
  • Je peux masquer/afficher les lignes via VBA pour éviter les oublis ET sécuriser le fichier en le protégeant.

La meilleure solution reste la 3ème même si ce n'est pas la plus simple.

Je vous joins un Fichier épuré.

1ère feuille : Une copie de ce que j'ai réalisé

2ème feuille : Une copie de la sélection des pages, cependant je me suis rendu compte qu'Excel peut compter les pages et les numéroter mais ne permet pas de choisir celles à imprimer... Si c'est possible en VBA, cela résoudrait partiellement mon problème.

Merci à tous.

Je reste à l'écoute.

Bonne journée, Christophe

Edit : juste pour l'orthographe

Rebonsoir à tous,

Il y a du mieux.

J'ai eu l'idée de créer les plages des zones d'impression APRÈS avoir masqué les lignes.

Les zones retirent donc les feuilles qui doivent être masquées en entier.

Bon... Mais les lignes masquées sont toujours présentes au milieu des autres zone d'impression.

Le mystère reste entier. Des idées ?

Pour information si cela peut aider du monde, j'ai ajouté ce code où les zones à imprimer apparaissent de H4 à I5.

Exemple : Dans H4 il y a écrit L54 et dans I5 il y a écrit Z200, la zone d'impression sélectionnée s'étend de L54 à Z200.

La boucle qui suit n'est là que pour fusionner les zones séparées ce qui me donne une page par zone (comme des sauts de page).

'réinitialisation de la zone d'impression de la feuille active

With ActiveSheet 'se placer dans la feuille active

.Cells(1, 1).Select 'désélection pour se positionner en "A1" de la feuille active

.PageSetup.PrintArea = "" 'effacer zone d'impression de la feuille active

'début de la sélection composée

.Range(.Cells(4, "H").Value, .Cells(4, "I").Value).Select 'lire les coordonnées des cases H4 et I4 et en créer une sélection

For I = 5 To 11 'boucler des lignes 5 à 11

Application.Union(Selection, .Range(.Cells(I, "H").Value, .Cells(I, "I").Value)).Select 'lire les coordonnées des lignes suivantes en H et I et l'ajouter à la sélection précédente

Next

End With

'définir la zone d'impression constituée de toutes les plages sélectionnées

ActiveSheet.PageSetup.PrintArea = Selection.Address

À force de chercher c'est tombé en marche.

Bonne continuation à tous.

Rechercher des sujets similaires à "zone impression controlee via vba lignes masquees affichees variables"