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 David,

A+

5test-mefc.xlsm (24.50 Ko)

Oui bien sur.

Merci

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+

Rechercher des sujets similaires à "mise surbrillance proteger voir impression"