Autres Effacer données de certaines cellules si la feuille passe de visible à masquée

Panda79360

XLDnaute Nouveau
Bonjour,

Je voudrais effacer les données de certaines cellules d'une feuille lorsque que la feuille passe de visible à masquée.

Pouvez vous m'orienter sur le code à appliquer svp ?
j'avais pensé à cela mais ca ne fonctionne pas :

If Sheets("Feuil2").Visible = False Then
Range("D2").MergeArea.ClearContents
Range("H2").MergeArea.ClearContents
End If

Mais ca ne fonctionne pas



Merci par avance
 
Solution
Une proposition de modification de ton code :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'
    If Target.Address <> "$D$30" Then Exit Sub

    Application.ScreenUpdating = False
    ActiveWorkbook.Unprotect

    Select Case Range("D30").Value

    Case ""

        Sheets("Feuil1").Visible = True
'        Sheets("Feuil1").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
'        Sheets("Feuil1").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
        EffacerUneFeuille ("Feuil1")

'        Sheets("Feuil2").Visible = True
'...

TooFatBoy

XLDnaute Barbatruc
C o u c o u . . .

MonAvatarXLD.jpg
 

Phil69970

XLDnaute Barbatruc
Bonjour @Panda79360 et TFB

@Panda79360
Une remarque :
Il serait correcte de répondre à TFB sur les posts précédents que tu as zappé

Pour ce qui concerne ta question elle me semble mal tournée je te propose 2 versions

Dans un module :
Tu ne sais pas si ta feuille est masquée
VB:
Sub test()
If Sheets("Feuil2").Visible = False Then    'Si la feuille est masquée
    Sheets("Feuil2").Visible = True         'Je rends visible la feuille
    Sheets("Feuil2").Range("D2").MergeArea.ClearContents 'J'efface
    Sheets("Feuil2").Range("H2").MergeArea.ClearContents 'J'efface
    Sheets("Feuil2").Visible = False        'Je masque la feuille
Else                                        'La feuille est visible
    Sheets("Feuil2").Range("D2").MergeArea.ClearContents 'J'efface
    Sheets("Feuil2").Range("H2").MergeArea.ClearContents 'J'efface
    Sheets("Feuil2").Visible = False        'Je masque la feuille
End If
End Sub

ou bien si tu sais que ta feuille est visible et que tu veux effacer tes cellules avant de la masquer

VB:
Sub Masquage()
Sheets("Feuil2").Range("D2").MergeArea.ClearContents 'J'efface
Sheets("Feuil2").Range("H2").MergeArea.ClearContents 'J'efface
Sheets("Feuil2").Visible = False        'Je masque la feuille
End Sub

Merci de ton retour
 

Panda79360

XLDnaute Nouveau
Bonjour,

Je viens de répondre à TFB, veuillez m'excuser je suis nouveau sur le forum et tellement prise par ce fichu fichier et étant presque niveau 0 en VBa je passe des heures et des heures sur internet pour trouver les formules que j'essaie d'adapter :(

Merci pour ta réponse @Phil69970 mais je suis nul j'arrive pas,

Sans doute que ma question est mal tournée,

Du coup j'ai essayé mais ca ne fonctionne pas, et entre temps j'ai changé un critère,

Je vais essayer de m'exprimer clairement :

Ma feuille passe de visible à maquée automatiquement selon la donnée rentrée dans un autre onglet,
J'avais rentré une formule qui fonctionnait en test sur 2 onglets mais ayant 30 onglets, ca me met que la procédure est trop grande, peut-être on peut la condenser mais je n'arrive pas à trouver comment :


Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect
Select Case Range("D30").Value
Case Is = ""
Sheets("Feuil1").Visible = True
Sheets("Feuil1").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
Sheets("Feuil1").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
Sheets("Feuil2").Visible = True
Sheets("Feuil2").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
Sheets("Feuil2").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
Sheets("Feuil2").Visible = False
Sheets("Feuil3").Visible = True
Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
Sheets("RAPPORT DETAILLE (3)").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
Sheets("RAPPORT DETAILLE (3)").Visible = False
Case Is = "1"
Sheets("Feuil1").Visible = True
Sheets("Feuil2").Visible = True
Sheets("Feuil2").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
Sheets("Feuil2").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
Sheets("Feuil2").Visible = False
Sheets("Feuil3").Visible = True
Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
Sheets("Feuil3").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
Sheets("Feuil3").Visible = False
Case Is = "2"
Sheets("Feuil1").Visible = True
Sheets("Feuil2").Visible = True
Sheets("Feuil3").Visible = False
Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
Sheets("Feuil3").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
Sheets("Feuil3").Visible = False
ActiveWorkbook.Protect
Application.ScreenUpdating = True
End Select
End Sub


Merci par avance
 

TooFatBoy

XLDnaute Barbatruc
Tu peux entourer tes lignes de code avec la balise [ code = VB ] et [ / code ] (sans les espaces)
Cela rendra ton code VBA beaucoup plus lisible sur le forum. ;)

Dans tes macros, n'hésite pas à utiliser l'indentation, ça te permettra de mieux voir tes erreurs.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'
    Application.ScreenUpdating = False
    ActiveWorkbook.Unprotect

    Select Case Range("D30").Value

    Case Is = ""
        Sheets("Feuil1").Visible = True
       Sheets("Feuil1").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
       Sheets("Feuil1").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
       Sheets("Feuil2").Visible = True
       Sheets("Feuil2").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
       Sheets("Feuil2").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
       Sheets("Feuil2").Visible = False
       Sheets("Feuil3").Visible = True
       Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
       Sheets("RAPPORT DETAILLE (3)").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
       Sheets("RAPPORT DETAILLE (3)").Visible = False

    Case Is = "1"
       Sheets("Feuil1").Visible = True
       Sheets("Feuil2").Visible = True
       Sheets("Feuil2").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
       Sheets("Feuil2").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
       Sheets("Feuil2").Visible = False
       Sheets("Feuil3").Visible = True
       Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
       Sheets("Feuil3").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
       Sheets("Feuil3").Visible = False

    Case Is = "2"
       Sheets("Feuil1").Visible = True
       Sheets("Feuil2").Visible = True
       Sheets("Feuil3").Visible = False
       Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
       Sheets("Feuil3").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
       Sheets("Feuil3").Visible = False
       ActiveWorkbook.Protect
       Application.ScreenUpdating = True

    End Select

End Sub
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Une proposition de modification de ton code :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'
    If Target.Address <> "$D$30" Then Exit Sub

    Application.ScreenUpdating = False
    ActiveWorkbook.Unprotect

    Select Case Range("D30").Value

    Case ""

        Sheets("Feuil1").Visible = True
'        Sheets("Feuil1").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
'        Sheets("Feuil1").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
        EffacerUneFeuille ("Feuil1")

'        Sheets("Feuil2").Visible = True
'        Sheets("Feuil2").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
'        Sheets("Feuil2").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
        EffacerUneFeuille ("Feuil2")
        Sheets("Feuil2").Visible = False

'        Sheets("Feuil3").Visible = True
'        Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
'        Sheets("Feuil3").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
        EffacerUneFeuille ("Feuil3")
        Sheets("Feuil3").Visible = False

    Case "1"

        Sheets("Feuil1").Visible = True

'        Sheets("Feuil2").Visible = True
'        Sheets("Feuil2").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
'        Sheets("Feuil2").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
        EffacerUneFeuille ("Feuil2")
        Sheets("Feuil2").Visible = False

'        Sheets("Feuil3").Visible = True
'        Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
'        Sheets("Feuil3").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
        EffacerUneFeuille ("Feuil3")
        Sheets("Feuil3").Visible = False

    Case "2"

        Sheets("Feuil1").Visible = True
        Sheets("Feuil2").Visible = True

'        Sheets("Feuil3").Visible = False
'        Sheets("Feuil3").Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32") = ""
'        Sheets("Feuil3").Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49") = ""
        EffacerUneFeuille ("Feuil3")
        Sheets("Feuil3").Visible = False

    End Select

    ActiveWorkbook.Protect

End Sub

Et la macro associée :
VB:
Sub EffacerUneFeuille(NomFeuille As String)
'
    Sheets(NomFeuille).Range("D2,H2,H4,D4,D6,F8,H8,C9,F11,H11,C12,F14,C15,C19,E19,G19,I19,C20,C24,E24,H24,C25,G27,C28,F30,H30,C32,E32").ClearContents
    Sheets(NomFeuille).Range("C34,E34,G34,C35,H37,H40,C38,C41,C44,H46,E48,G48,I48,G50,I50,G52,I52,G54,I54,C56,F56,C58,F58,C60,B49").ClearContents

End Sub

Je n'ai pas trouvé la logique d'affichage/masquage des feuilles, donc j'ai laissé tel quel.
Mais s'il y a une logique, alors on doit pouvoir simplifier la macro.
 
Dernière édition:

Discussions similaires

Réponses
5
Affichages
714
Compte Supprimé 979
C

Statistiques des forums

Discussions
315 130
Messages
2 116 569
Membres
112 787
dernier inscrit
said.souhassou