Macro Excel: Imprimer tous onglets sauf 1 [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
26 août 2008
-
Messages postés
8
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
26 août 2008
-
Bonjour,

Je souhaite imprimer tous les onglets de mon classeur EXCEL sauf le dernier (il s'agit d'un modèle ".xlt" qui sera modifier). Le premier et le dernier sont des onglets cachés (premier = page de garde et dernier = page de paramètres pour les validation de données des autres onglets).
Les problèmes:
* Lors de la création d'un nouveau document, il m'est impossible de savoir le nombre d'onglets qui seront présents à la fin
* J'ai intégré des numéros de page dans le pied de page et je voudrais garder une impression globale pour garder la bonne numérotation des pages et non revenir à la page 1 à chaque onglet
* Le premier et le dernier onglet ne doivent pas être visibles pour la création d'un nouveau document
* je veux rendre le premier onglet visible (car page de garde) lors de l'impression mais je veux faire comme si le dernier onglet n'éxistait pas...
* Je suis obligé de rendre visibles tous les onglets pour utiliser la commande globale "Sheets.Select"!

Voila le code que j'ai tapé:

Sub Impression()
' Impression Macro
'
Sheets("Garde").Visible = True
Sheets("Paramètres").Visible = True
For S = 2 To Sheets.Count
Sheets(S).PageSetup.FitToPagesWide = 1
Next S
Sheets.Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Garde").Visible = False
Sheets("Paramètres").Visible = False
Application.ScreenUpdating = True

End Sub



Je galère depuis un moment à essayer de trouver mais en vain!

Merci d'avance pour votre aide!!!
B.

6 réponses

Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
226
Bonjour

tu n'es pas obligé de rendre les feuilles à ne pas imprimer visibles
tu n'es pas obligé de selectionner une feuille pour l'imprimer

si la 1ere et la derniere n'est pas à imprimer

dim i as integer
for i = 2 to sheets.count -1
    sheets(i).PrintOut
next i


1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 79358 internautes nous ont dit merci ce mois-ci

Messages postés
8
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
26 août 2008
7
Merci Wilfried,

Le problème est qu'en faisant de cette manière, la numérotation de mes pages n'est plus bonne. Il me fait une numérotation de page par onglet et non globale sur tous les onglets...Aurais-tu une autre idée?
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
226
re:

je ne sais meme pas si ca va fonctionner, essaye ceci simplement pour savoir si tes n° de page se suivent
tu fais seulement un preview afficher avant impression

tu selectionnes ta 1ere feuille à imprimer, tu appuies sur Shift, ensuite tu click sur la derniere feuille
ca ca marche
ensuite menu fichier, appercu avant impression

et dis moi si tes n° de page sont corrects.......

si c'est ok, je vais essayer quelque chose, mais pas ce soir, c'est trop long à mettre en place
Messages postés
8
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
26 août 2008
7
Salut Wilfried!

Ok avec shift ça marche bien. En fait des que tu selectionnes toutes les feuilles et que t'imprimes par la suite, ça marche, si tu imprimes les feuilles les unes après les autres, là ça ne marche plus... :(

Encore merci de ton aide
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
226
re:

bon je viens de faire un essai et ca à l'air de fonctionner

si tu veux, Sheets(Array("Feuil1","Feuil2","Feuil3")).printout
fonctionne tres bien, mais (il y en a toujour un) ton nombre de feuilles à imprimer n'est pas defini, tu vas de la 2eme à la derniere -1
je n'ai pas trouvé comment affecter une table à la place de Array, plein d'essais, plein d'echec

alors j'ai fait autrement, j'ai fait une macro qui crée l'odre Sheets(Array( et qu'il l'inserre directement dans le code de la macro vide, ensuite elle lance cette macro

Alors tous les details sont improtants : Creer un Module Standard et le nommer gw_imp (pas de majuscule)
ensuite faire un copier coller du code ci-dessous

Sub lance_imp()
    Dim ordre As String, ligne As Long
    ordre = "Sheets(Array("
    For i = 2 To Sheets.Count - 2
        If i > 1 Then ordre = ordre & ","
        ordre = ordre & Chr(34) & Sheets(i).Name & Chr(34)
    Next i
    ordre = ordre & ")).PrintOut"
    With ThisWorkbook.VBProject.VBComponents("gw_imp").CodeModule
        For ligne = 1 To .CountOfLines
             If .Lines(ligne, 1) = "Sub imprim()" Then .InsertLines ligne + 1, ordre: Exit For
        Next ligne
        Call imprim
        .DeleteLines ligne + 1, 1
    End With
End Sub

Sub imprim()
End Sub


ensuite lier ton bouton à la macro lance_imp
Messages postés
8
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
26 août 2008
7
Un grand merci!

Ca fonctionne apres quelques modifications de ton code pour l'adapter à mes besoins...
Tout d'abord, il me fallait rendre la premiere et la derniere feuille visibles pour ne pas faire planter la macro, car je les cache pour pas qu'elles me polluent le nombre d'onglets...
Ensuite, il me fallait la page de garde et l'avant derniere feuille, donc j'ai mis de 1 à sheets.count-1, donc nickel! ;)
Derniere chose, j'ai modifié pour inserer une mise en page à 1 sur les largeurs... et tout fonctionne parfaitement!!!

Tu m'as débarrassé d'une bonne galère, je finissais par croire que mon besoin était impossible...

ci joint le dernier code pour ceux qui seraient dans la même galère que moi ;)

Sub lance_imp()
Sheets("Garde").Visible = True
Sheets("Paramètres").Visible = True
For S = 2 To Sheets.Count
Sheets(S).PageSetup.FitToPagesWide = 1
Next S
Dim ordre As String, ligne As Long
ordre = "Sheets(Array("
For i = 1 To Sheets.Count - 1
If i > 1 Then ordre = ordre & ","
ordre = ordre & Chr(34) & Sheets(i).Name & Chr(34)
Next i
ordre = ordre & ")).PrintOut"
With ThisWorkbook.VBProject.VBComponents("gw_imp").CodeModule
For ligne = 1 To .CountOfLines
If .Lines(ligne, 1) = "Sub imprim()" Then .InsertLines ligne + 1, ordre: Exit For
Next ligne
Call imprim
.DeleteLines ligne + 1, 1
End With
Sheets("Garde").Visible = False
Sheets("Paramètres").Visible = False
Application.ScreenUpdating = True
End Sub

Sub imprim()
End Sub

Et voila,
++
MERCI !!!!