Impression conditionnelle (Microsoft Excel)
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]
.