Mise en surbrillance des cellule non protéger sans les voir à l'impression
Bonjour,
Je recherche à mettre en surbrillance toutes les cellules du classeur non protéger, sans les faire apparaitre à l'impression!
J'ai trouvé la mise en forme conditionnelle avec le code suivant
=cellule("protege";a1)
ça fonctionne très bien seulement je ne trouve pas de solution pour ne pas faire apparaitre cette mise en forme lors de l'impression.
Quelqu'un à une idée?
Merci d'avance
Personne n'a une idée?
Bonjour David,
Il faut croire qu'il y a des sujets qui ne passionnent pas (un peu normal)
Pour supprimer la mise en forme à l'impression, il faut mettre du code dans ThisWorkbook, dans l'évènement
Private Sub Workbook_BeforePrint(Cancel As Boolean)
End Sub
A+
En Effet Bruno, il y a des sujets qui ne passionne pas.
Merci pour ta réponse seulement j'ai coller ton code dans thisworkbook et sans succès!
As-tu une piste?
Merci
Re,
Attention ⚠️
Je ne faisais qu'indiquer ou mettre le code, en aucun cas il s'agit "du code" 🤔
Comme je le disais il y a des sujets qui ne passionnent pas. Je n'y vois aucun intérêt dans ce que vous souhaitez faire.
Peut-être qu'avec un fichier et une bonne explication...
+A
bonsoir,
avec l'aide de la cellulle B32 (valeur 1 = couleur de texte =grise)
et l"event Thisworkbook Before print.
Bonjour, merci pour vos réponses.
Je cherche a créer un documents que plusieurs personnes se servirons et pour cela, j'aimerai protéger toutes les feuilles du classeur notamment pour les cellules verrouiller.
j'ai appliquer une mise en forme conditionnelle pour facilité la lecture et le remplissage des données sur le classeur.
Je rechercher comment faire pour que les cellules non verrouillés qui apparaisse avec un fond rempli grâce à la mise en forme conditionnel, disparaisse lors de l'impression!
peut-on faire un code qui annule les mise en forme conditionnelle juste pour l'impression et qui les remette après?
Merci d'avance pour vos retour.
bonjour,
Et ma réaction de hier soir ?
(peut-être inverser pour les cellules verrouiller ?)
Bonjour,
Je suis désolé mais je ne comprend pas votre tableau.
Si je met une mise en forme conditionnelle dans votre feuille elle s'affiche a l'impression!?
Bonjour David,
Voici une possibilité sans passer par les MFC
Seul souci, quand réafficher les couleurs !?
A+
@David,
j'avais ajouté une formula conditionel
=ET($B$32=1;CELLULE("protect";A1)=0)
Donc si B32=1 et la cellule n'est pas "protégée", le couleur du texte devient gris.
Su vous appuyez sur le bouton, les cellules au milieu, qui ne sont pas protegées, disparaissent avec l'event "before print" (en conséquence de "PRINTOUT"), et reviennent visible au bout du macro en mettant la valeur "0" dans B32. (ceci est peut-être la réponse au question de @BrunoM45 "quand réafficher les couleurs !?")
Private Sub CommandButton1_Click()
Me.Range("A1:L26").PrintOut Preview:=True
Me.Range("B32").Value = 0
End Sub
Bonsoir...
Un exemple pour effacer les MFC avant l'impression puis reprises après.
Bonsoir,
Merci pour vos réponses.
J'ai travailler sur ce code en rajoutant d'autre fonction lister ci-dessous :
- remettre en mode plein écran
- supprimé la mise en forme conditionnelle
- ajouter des valeurs de cellule dans les en-têtes
- sélectionner l'aperçu avant impression
- activer une mise en forme conditionnelle
- activer mode plein écran
- sélectionner feuille active
- et masquer les pointiller de mise en pages qui se former
J'ai plusieurs questions concernant ce code :
- peut-on accélérer son processus, il rame un peu (environ 5 seconde)?
- peut-on avoir l'aperçu avant impression avec le même visuel que Excel propose sans VBA?
- dés que j'imprime ou que je quitte dans l'aperçu avant impression le code VBA est en débogage erreur 5 sur l'activation de la mise en forme conditionnelle
Merci d'avance pour vos réponses.
Sub imprimer()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'détermine feuille active et donne un nom
Dim sh As Worksheet
Set sh = ActiveSheet
sh.Select
'désactive mode plein écran
sh.Select
' With ActiveWindow
' .DisplayHeadings = True
' .DisplayWorkbookTabs = True
' End With
With Application
' .WindowState = xlNormal
' .DisplayFormulaBar = True
' .DisplayStatusBar = True
' .DisplayScrollBars = True
.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", true)" '***********
'
End With
Application.WindowState = xlMaximized
' désactive mise en forme conditionnelle
Dim MaPlage As Range
Set MaPlage = Range("$a$1:$bb$500")
MaPlage.FormatConditions.Delete
' nom chantier en téte
With ActiveSheet.PageSetup.LeftHeaderPicture
.Filename = "D:\UNI-T\logo\uni-t-logo-hd avatar facebook.jpg"
.Height = 170 '<-- redéfinit la largeur de l'image
.Width = 190 '<-- redéfinit la hauteur de l'image
End With
With ActiveSheet.PageSetup
.LeftHeader = "&G" & ActiveSheet.Range("B2")
.CenterHeader = "&f" & ActiveSheet.Range("B3")
.RightHeader = "&d" & Chr(10) & "Pages " & "&p" & " de " & "&n"
'With ActiveSheet.PageSetup.CenterHeader = ActiveSheet.Range("B3")
'End With
End With
'ouvre aperçu avant impression
sh.Select
ActiveWindow.SelectedSheets.Application.Dialogs(xlDialogPrintPreview).Show
'masque fenetre propriété
Application.CommandBars("Format Object").Visible = False
'On Error GoTo fin
' active mise en forme conditionnelle
sh.Select
Dim MaPlagenouvelle As Range
Set MaPlagenouvelle = Range("$a$1:$bb$500")
MaPlagenouvelle.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=SI((CELLULE(""protege"";A1))=1;1;0)"
MaPlagenouvelle.FormatConditions(1).Interior.Color = RGB(192, 192, 192)
'fin:
'active mode plein écran
sh.Select
With Application
.WindowState = xlMaximized
.DisplayFormulaBar = False ' Masquer barre de formule
.DisplayStatusBar = False ' Masque barre status
.DisplayScrollBars = False
.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", false)" '***********
End With
With ActiveWindow
.DisplayHeadings = False ' Masque quadrillage
.DisplayWorkbookTabs = False ' Masquer nom onglets
End With
'selectionne feuille active de base
sh.Select
' masque pointillé mise en page
sh.DisplayAutomaticPageBreaks = False ' Suppression
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
'Exit Sub
End Sub
Bonjour ORDONC,
Merci pour votre proposition de MEFC.
J'ai essayer d'adapter votre code pour mes condition et je ne trouve pas la solution.
J'aimerai que toutes les cellules de toutes les feuilles du classeur qui ne sont pas verrouillé apparaisse avec un remplissage "rouge" sauf à l'impression.
J'ai déjà une macro pour l'impression.
voici votre code que j'ai modifié sans succès :
Dim B As Boolean, C As Range
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If R.Address <> [H1].Address Then Exit Sub
MFC
If B = 0 Then
[BD].Interior.Color = vbWhite
[BD].PrintOut Preview:=1
MFC
End If
[A1].Select
End Sub
Sub MFC()
For Each C In [BD]
If C = "=cellule(protege,a1)" Then C.Interior.Color = vbBlack
' If C < 120 Then C.Interior.Color = vbRed
' If C > 150 Then C.Interior.Color = vbGreen
Next
End Sub
et voici mon code pour imprimer :
Option Explicit
Sub imprimer()
'désactive protection
Dim F As Worksheet
Set F = ActiveSheet
F.Protect Password:="", UserInterfaceOnly:=True
'active calcul manuel
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'détermine feuille active et donne un nom
Dim sh As Worksheet
Set sh = ActiveSheet
sh.Select
'désactive mode plein écran
sh.Select
With Application
.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", true)" '***********
End With
'met fenêtre en grande taille
sh.Select
Application.WindowState = xlMaximized
'affiche ligne
sh.Select
Rows("3").EntireRow.Hidden = False
'' désactive mise en forme conditionnelle
' sh.Select
' Dim MaPlage As Range
' Set MaPlage = Range("$a$1:$bb$500")
' MaPlage.FormatConditions.Delete
'' nom chantier en téte
' With sh.PageSetup.LeftHeaderPicture
' .Filename = "D:\UNI-T\logo\uni-t-logo-hd avatar facebook.jpg"
' .Height = 200 '<-- redéfinit la largeur de l'image
' .Width = 95 '<-- redéfinit la hauteur de l'image
' End With
'ouvre aperçu avant impression
sh.Select
ActiveWindow.SelectedSheets.Application.Dialogs(xlDialogPrintPreview).Show
'masque fenetre propriété
sh.Select
Application.CommandBars("Format Object").Visible = False
'' active mise en forme conditionnelle
' sh.Select
' Dim MaPlagenouvelle As Range
' Set MaPlagenouvelle = Range("$a$1:$bb$500")
' MaPlagenouvelle.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
' Formula1:="=SI((CELLULE(""protege"";A1))=1;1;0)"
' MaPlagenouvelle.FormatConditions(1).Interior.Color = RGB(192, 192, 192)
'active mode plein écran
sh.Select
With Application
.WindowState = xlMaximized
.DisplayFormulaBar = False ' Masquer barre de formule
.DisplayStatusBar = False ' Masque barre status
.DisplayScrollBars = False
.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", false)" '***********
End With
With ActiveWindow
.DisplayHeadings = False ' Masque quadrillage
.DisplayWorkbookTabs = False ' Masquer nom onglets
End With
'selectionne feuille active de base
sh.Select
' masque pointillé mise en page
sh.DisplayAutomaticPageBreaks = False
'masque ligne
sh.Select
Rows("3").EntireRow.Hidden = True
'active calcul automatique
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Bonjour, Du coup je suis sur une nouvelle piste pour ma MEFC.
Je rempli manuellement les cellules souhaités avec la couleur grise "RGB(192,192,192)"
avec ma macro impression, Je détecte dans la feuille active toutes les cellules contenant un fond de couleur grise et je les changes en blanc.
la macro impression se lance
et après je remet les cellules modifiés précédemment de la couleur grise.
Mon problème c'est que quand je n'arrive pas à déterminer les cellules en grise avant le changement.*
Quelqu'un peu m'aider SVP?
Merci
Option Explicit
Sub imprimer()
'desactive protection
Dim F As Worksheet
Set F = ActiveSheet
F.Protect Password:="", UserInterfaceOnly:=True
'active calcul manuel
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'determine feuille active et donne un nom
Dim sh As Worksheet
Set sh = ActiveSheet
sh.Select
' met les cellules selectionne en blanc
Dim tg As Range
Set tg = Range("a1:aaa10000")
If tg.Interior.Color = RGB(192, 192, 192) Then
tg.Interior.Color = RGB(255, 255, 255)
End If
'ouvre apercu avant impression
sh.Select
ActiveWindow.SelectedSheets.Application.Dialogs(xlDialogPrintPreview).Show
'selectionne feuille active de base
sh.Select
'remet les cellules selectionnes en gris
tg.Interior.Color = RGB(192, 192, 192)
'active calcul automatique
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Bonjour David,
Pour moi le code devrait être plus ceci
Sub Imprimer()
Dim Sh As Worksheet
Dim Tg As Range
' Désactive le rafraichissmeent et le calcul auto
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' Avec la feuille active
With ActiveSheet
' déprotéger la feuille
.Unprotect
' met les cellules selectionne en blanc
For Each Tg In Range("A1:H21")
If Tg.Interior.ColorIndex = 15 Then
Tg.Interior.ColorIndex = 2
End If
Next Tg
' ouvre apercu avant impression
ActiveWindow.SelectedSheets.Application.Dialogs(xlDialogPrintPreview).Show
' remet les cellules selectionnes en gris
For Each Tg In Range("A1:H21")
If Tg.Interior.ColorIndex = 2 Then
Tg.Interior.Colorindexx = 15
End If
Next Tg
' Protéger la feuille
.Protect Password:=""
' active calcul automatique
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End With
End Sub
A+
Edit : code corrigé avec "Colorindex"
Bonjour Bruno,
Merci pour ta réponse.
Je viens de l'essayer mais lors de la remise en couleur, ça change toutes les cellules blanche des cellules sectionné mais pas que celle qui été déjà en grise!
As-tu des pistes?
Merci
Re,
Normalement, dans un classeur, les cellules par défaut n'ont pas de couleur
Tg.Interior.Color = XlNone
Donc la logique serait de supprimer toutes la couleur des cellules,
de mettre en gris seulement celles qui doivent être remplies
Et du coup on passe du gris au blanc et inversement sans problème
A+