Macro Excel: Imprimer tous onglets sauf 1
Résolu
BertyBoy
Messages postés
8
Statut
Membre
-
BertyBoy Messages postés 8 Statut Membre -
BertyBoy Messages postés 8 Statut Membre -
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.
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.
A voir également:
- Imprimer tous les onglets excel
- Liste déroulante excel - Guide
- Imprimer un tableau excel - Guide
- Word et excel gratuit - Guide
- Comment imprimer en a5 - Guide
- Restaurer les onglets chrome - Guide
6 réponses
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
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
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?
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?
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
ensuite lier ton bouton à la macro lance_imp
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
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 !!!!
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 !!!!