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 SubTu 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 SubPAs 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