BeforePrint et SelectedSheets

15beforeprint.zip (11.04 Ko)

Bonjour,

J'ai un soucis avec la fonction BeforePrint :

J'ai fait une macro qui passe en blanc le contenu de la cellule A1 sur toutes les feuilles du classeur avant impression.

Jusque là pas de problème ça fonctionne :

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Nb As Integer, Compteur

Nb = Sheets.Count
For Compteur = 1 To Nb Step 1
    Sheets(Compteur).Unprotect
    Sheets(Compteur).Range("A1").Font.ColorIndex = 2
    Sheets(Compteur).Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
Next Compteur

End Sub

Par contre, quand l'utilisateur sélectionne uniquement les feuilles 2 et 3 pour les imprimer, 1 seule feuille s'imprime.

Le soucis viens de la dé-protection/protection des feuilles qui vire la sélection de l'utilisateur.

Je cherche donc un moyen de stocker en début de macro les feuilles sélectionnées pour les rétablir en fin de macro juste avant l'impression (dans la plus part des cas ça sera par ex. les feuilles 10 à 20 sélectionnées sur 20 feuilles).

Je sais qu'il existe la propriété SelectedSheets mais je ne trouve pas le moyen de l'utiliser dans mon cas.

Ci joint fichier d'exemple.

Merci de me donner une piste

Bonjour Psycho

Peut être comme ceci:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Nb As Integer, Compteur As Long
Dim T As Variant, Sh As Worksheet

ReDim T(0)

For Each Sh In ThisWorkbook.Windows(1).SelectedSheets
    ReDim Preserve T(1 To UBound(T) + 1)
    T(UBound(T)) = Sh.Name
Next Sh

Nb = Sheets.Count
For Compteur = 1 To Nb Step 1
    Sheets(Compteur).Unprotect
    Sheets(Compteur).Range("A1").Font.ColorIndex = 2
    Sheets(Compteur).Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
Next Compteur

Sheets(T).Select

End Sub

Cordialement

Salut Efgé et merci beaucoup pour cette solution qui fonctionne parfaitement

Les tableaux sont quelque chose que je n'utilise pas en VBA faute de connaissances, ça à l'air bien puissant !

Si j'essaie de comprendre ta macro :

  • tu créé un tableau à 0 dimensions avec ReDim T(0)
  • tu l'incrémente avec les noms des onglets avec la boucle
  • et en fin de macro tu sélectionnes les feuilles contenues dans le tableau avec Sheets(T).Select

J'ai bon ?

Re

T'as bon

Cordialement

Rechercher des sujets similaires à "beforeprint selectedsheets"