Kirk a demandé s’il existe un moyen de contrôler conditionnellement ce qui est imprimé dans Excel. Par exemple, la cellule A1 contient une valeur et la valeur contrôle exactement ce qui est imprimé. Peut-être que si A1 contient 1, alors Sheet1 est imprimé; s’il contient 2, alors Sheet1 et Sheet2 sont imprimés.

La seule façon de le faire est d’utiliser une macro, et il existe plusieurs approches que vous pouvez utiliser. Considérez la macro très simple suivante, qui utilise simplement une structure Select Case pour contrôler l’impression.

Sub PrintStuff()

Dim vShts As Variant

vShts = Sheets(1).Range("A1")

If Not IsNumeric(vShts) Then         Exit Sub     Else         Select Case vShts             Case 1                 Sheets("Sheet1").PrintOut             Case 2                 Sheets("Sheet2").PrintOut             Case 3                 Sheets("Sheet1").PrintOut                 Sheets("Sheet2").PrintOut         End Select     End If End Sub

Exécutez cette macro avec la valeur 1, 2 ou 3 dans la cellule A1 de la première feuille et la macro imprime des éléments différents en fonction de la valeur. Si la valeur est 1, la feuille Sheet1 est imprimée; s’il vaut 2, la feuille Sheet2 est imprimée; et s’il est 3, alors Sheet1 et Sheet2 sont imprimés. Si vous souhaitez que différentes valeurs impriment des éléments différents, modifiez simplement la structure Sélectionner la cas pour refléter les valeurs possibles et ce qui doit être imprimé pour chaque valeur.

Une approche plus globale peut également être créée. Pensez à ajouter une «feuille de contrôle» à votre classeur. Cette feuille porterait le nom de chaque feuille de calcul du classeur répertorié dans la première colonne. Si vous mettez une valeur à droite d’un nom de feuille de calcul, dans la deuxième colonne, une macro imprimera la feuille de calcul correspondante.

La macro suivante peut être utilisée pour créer la «feuille de contrôle».

Sub CreateControlSheet()

Dim i as integer

On Error Resume Next   'Delete this sheet if it already exists     Sheets("Control Sheet").Delete     On Error GoTo 0

Sheets.Add   'Add the WhatToPrint Sheet     ActiveSheet.Name = "Control Sheet"



Range("A1").Select   'Label the columns     ActiveCell.FormulaR1C1 = "Sheet Name"



Range("B1").Select     ActiveCell.FormulaR1C1 = "Print?"



Cells.Select     Selection.Columns.AutoFit

For i = 1 To ActiveWorkbook.Sheets.Count         Cells(i + 1, 1).Value = Sheets(i).Name     Next End Sub

La macro supprime d’abord toute ancienne feuille de contrôle, si elle existe. Il ajoute ensuite une nouvelle feuille de calcul nommée Feuille de contrôle et place les étiquettes des en-têtes dans les colonnes A et B. Il répertorie ensuite toutes les feuilles de calcul du classeur dans la colonne A.

Une fois la feuille de contrôle créée, vous pouvez ensuite placer un «X» ou une autre valeur (telle que «Y» ou 1) dans la colonne B à côté de chaque feuille de calcul que vous souhaitez imprimer. La macro suivante examine ensuite la feuille de contrôle et imprime toute feuille de calcul qui a une marque – n’importe quelle marque – dans la cellule de la colonne B.

Sub PrintSelectedSheets()

Dim i as Integer     i = 2

Do Until Sheets("Control Sheet").Cells(i, 1).Value = ""

If Trim(Sheets("Control Sheet").Cells(i, 2).Value <> "") Then             Sheets(Sheets("Control Sheet").Cells(i, 1).Value).Select             ActiveWindow.SelectedSheets.PrintOut Copies:=1         End If         i = i + 1     Loop End Sub

Une autre approche consiste à créer une macro qui s’exécute juste avant l’impression.

(L’impression est l’un des événements qu’Excel vous permet d’intercepter.) La macro suivante, ajoutée à l’objet thisWorkbook, est exécutée chaque fois que vous essayez d’imprimer.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim vShts As Variant     Dim iResponse As Integer     Dim bPreview As Boolean

On Error GoTo ErrHandler

vShts = Sheets(1).Range("A1")

If Not IsNumeric(vShts) Then         GoTo InValidEntry     ElseIf vShts < 1 Or vShts > Sheets.Count Then         GoTo InValidEntry     Else         iResponse = MsgBox(prompt:="Do you want Print Preview?", _           Buttons:=vbYesNoCancel, Title:="Preview?")

Select Case iResponse             Case vbYes                 bPreview = True             Case vbNo                 bPreview = False             Case Else                Msgbox "Canceled at User request"

GoTo ExitHandler         End Select

Application.EnableEvents = False         Sheets(vShts).PrintOut Preview:=bPreview     End If

ExitHandler:

Application.EnableEvents = True     Cancel = True     Exit Sub

InValidEntry:

MsgBox "'" & Sheets(1).Name & "'!A1" _         & vbCrLf & "must have a number between " _         & "1 and " & Sheets.Count & vbCrLf     GoTo ExitHandler

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

La macro vérifie la valeur de la cellule A1 de la première feuille de calcul. Il utilise cette valeur pour déterminer les feuilles de calcul à imprimer. En d’autres termes, un 1 imprime la première feuille de calcul, un 2 imprime la seconde, un 3 imprime la troisième, et ainsi de suite.

Si la valeur dans A1 n’est pas une valeur ou si elle est inférieure à 1 ou supérieure au nombre de feuilles de calcul dans le classeur, l’utilisateur est informé que la valeur est incorrecte et la macro est quittée.

En supposant que la valeur A1 est comprise dans la plage, la macro vous demande si vous souhaitez utiliser l’aperçu avant impression. En fonction de la réponse de l’utilisateur, la macro imprime la feuille de calcul spécifiée ou affiche l’aperçu avant impression pour cette feuille de calcul.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (13108) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

link: / excel-Conditional_Printing [Impression conditionnelle].