Macro Excel: Imprimer tous onglets sauf 1

Résolu
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.
Configuration: Windows 2000
Excel 2000
Internet Explorer 6.0

6 réponses

  1. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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
  2. BertyBoy Messages postés 8 Statut Membre 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?
    0
  3. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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
    0
  4. BertyBoy Messages postés 8 Statut Membre 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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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
    0
  7. BertyBoy Messages postés 8 Statut Membre 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 !!!!
    0