Vider, Supprimer les cellules (non vérouillées) de plusieurs feuilles

Bonjour à tous,

Je galère énormément sur un code VBA qui me permettrai de remettre à zéro les cellules non verrouillées dans plusieurs onglets (de 1 à 9, certaines sont invisibles).

Grâce au forum, j'ai pu, sans grande connaissance, m'en sortir mais je bloquer car ma macro soit est longue...., ne vide pas mes listes déroulantes et je n'arrive pas à gérer les cellules fusionnées...

Si quelqu'un peut m'aider svp.

mon code:

[Ligne][Ligne]


Sub Vider()

Application.ScreenUpdating = False

'Msgbox Ok + Annuler

yourmsgbox = MsgBox("Êtes-vous sûr de vouloir effacer ce classeur entièrement ?", vbOKCancel, "Confirmation")

If yourmsgbox = vbCancel Then

Exit Sub

End If

'Msgbox Ok + Annuler

yourmsgbox = MsgBox("Cette action est définitive, confirmez-vous?", vbOKCancel, "Confirmation")

If yourmsgbox = vbCancel Then

Exit Sub

End If

Dim C As Range

For sh = 1 To 9

'boucle pour tester les cellules vérouillées ou non

For Each C In Sheets(sh).Range("A1:z200") '<-- à adapter

'si la cellule n'est pas vérouillée on efface

If C.Locked = False Then C.ClearContents

Next

Next

Application.Goto (ActiveWorkbook.Sheets("Sommaire").Range("B9"))

End Sub

Bonjour,

Et avec ceci ?

Sub Vider()

    Dim Fe As Worksheet
    Dim C As Range

    If MsgBox("Êtes-vous sûr de vouloir effacer ce classeur entièrement ?", vbYesNo, "Confirmation") = vbNo Then Exit Sub

    If MsgBox("Cette action est définitive, confirmez-vous?", vbYesNo, "Confirmation") = vbNo Then Exit Sub

    For Each Fe In Worksheets

        Fe.Unprotect "MDP"

        On Error Resume Next
        For Each C In Fe.Cells.SpecialCells(2)
            If C.Locked = False Then C.ClearContents
        Next C

        Fe.Protect "MDP"

    Next Fe

    Application.Goto (ActiveWorkbook.Sheets("Sommaire").Range("B9"))

End Sub

Merci ça fonctionne !

Tu peux m'expliquer stp ?

Comment fais-tu pour supprimer uniquement les feuilles de 1 à 9?

Pour les fusionnées, c'est bien specialCells?

D'avance merci

- Pour les feuilles de 1 à 9, comment je peux faire?

Est-ce que je peux faire:

Dim Ws As Worksheet

For S = 1 to 9

For Each Ws In Worksheets

If Ws(s) Then

...

End If

Next Ws

Oups,

Pardon, je ne t'ai répondu qu'à moitié

Voici le code pour ne prendre pour cible que les feuilles ayant un index de 1 à 9 et vider aussi les cellules fusdionnées :

Sub Vider()

    Dim Fe As Worksheet
    Dim C As Range

    If MsgBox("Êtes-vous sûr de vouloir effacer ce classeur entièrement ?", vbYesNo, "Confirmation") = vbNo Then Exit Sub

    If MsgBox("Cette action est définitive, confirmez-vous?", vbYesNo, "Confirmation") = vbNo Then Exit Sub

    'parcours toutesz les feuilles...
    For Each Fe In Worksheets

        'seulement pour les feuilles ayant un index entre 1 et 9
        If Fe.Index > 0 And Fe.Index < 10 Then

            'ôte la protection (adapter mot de passe)
            Fe.Unprotect "MDP"

            On Error Resume Next '<--- évite l'erreur de la feuille totalement vide de valeurs constantes
            'parcours seulement les cellules qui on une valeur constante
            For Each C In Fe.Cells.SpecialCells(2)

                'seulement si déverrouillée
                If C.Locked = False Then

                    'si fusionnée, fait référence à toute la plage, sinon juste la cellule
                    If C.MergeCells Then C.MergeArea.ClearContents Else C.ClearContents

                End If

            Next C

            're-protège
            Fe.Protect "MDP"

        End If

    Next Fe

    Application.Goto (ActiveWorkbook.Sheets("Sommaire").Range("B9"))

End Sub

PAs de problème, merci pour le code et l'explication j'y vois beaucoup plus clair !!!

Oups,

Pardon, je ne t'ai répondu qu'à moitié

Voici le code pour ne prendre pour cible que les feuilles ayant un index de 1 à 9 et vider aussi les cellules fusdionnées :

Sub Vider()

    Dim Fe As Worksheet
    Dim C As Range

    If MsgBox("Êtes-vous sûr de vouloir effacer ce classeur entièrement ?", vbYesNo, "Confirmation") = vbNo Then Exit Sub

    If MsgBox("Cette action est définitive, confirmez-vous?", vbYesNo, "Confirmation") = vbNo Then Exit Sub

    'parcours toutesz les feuilles...
    For Each Fe In Worksheets

        'seulement pour les feuilles ayant un index entre 1 et 9
        If Fe.Index > 0 And Fe.Index < 10 Then

            'ôte la protection (adapter mot de passe)
            Fe.Unprotect "MDP"

            On Error Resume Next '<--- évite l'erreur de la feuille totalement vide de valeurs constantes
            'parcours seulement les cellules qui on une valeur constante
            For Each C In Fe.Cells.SpecialCells(2)

                'seulement si déverrouillée
                If C.Locked = False Then

                    'si fusionnée, fait référence à toute la plage, sinon juste la cellule
                    If C.MergeCells Then C.MergeArea.ClearContents Else C.ClearContents

                End If

            Next C

            're-protège
            Fe.Protect "MDP"

        End If

    Next Fe

    Application.Goto (ActiveWorkbook.Sheets("Sommaire").Range("B9"))

End Sub
Rechercher des sujets similaires à "vider supprimer verouillees feuilles"