Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Vider contenu de cellules a partir d'une macro

  • Initiateur de la discussion Initiateur de la discussion LAMULE
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

LAMULE

Guest
Bonsoir à tous,

Je sollicite vos lumières sur mon problème.

Je souhaite utiliser une macro me permettant d'effacer la saisie de plusieurs cellules sur une même ligne en tapant simplement le numéro de cette dernière.

Je joint un fichier d'exemple :


Merci d'avance
 

Pièces jointes

Re : Vider contenu de cellules a partir d'une macro

Bonsoir LAMULE,

Une suggestion :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If (Target.Count > 1) Or (Target.Address <> "$D$1") Then Exit Sub

Lig = Target.Value
If (Lig < 5) Or (Lig > 24) Then Exit Sub
     
Rep = MsgBox("Etes-vous certain de vouloir supprimer la ligne " & Lig, vbYesNo, "Attention")
If Rep = vbYes Then
    Range("B" & Lig & ",D" & Lig & ":E" & Lig).Select
    Selection.ClearContents
End If

Range("D1").Select
End Sub

A placer dans la feuille 1 (ou celle qui contient la saisie du numéro de ligne.

Avec Range("D1").Select en dernière instruction le curseur se positionne sur D1, ce qui évite une nouvelle boîte de dialogue

Bonne continuation

A+ Jack2
 
Dernière édition:
Re : Vider contenu de cellules a partir d'une macro

Bonsoir,
Merci JACK2,
LE CODE FONCTIONNE....
Sauf que lorsque je protège mon classeur j'ai une erreur....
Je rappel que certaine cellules dans la ligne contiennent des formules (pour calculer l'age par exemple) et donc ces dernières sont verrouillées
 
Re : Vider contenu de cellules a partir d'une macro

Bonsoir LAMULE,

Cela ne peut pas fonctionner s'il y a un mot de passe. Nouveau code qui enlève le mot de passe (le remet si nécessaire) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

'Enlève le mot de passe
Worksheets("Feuil1").Unprotect Password:="Motasse" 'remplacer par ton mot de passe

If (Target.Count > 1) Or (Target.Address <> "$D$1") Then Exit Sub

Lig = Target.Value
If (Lig < 5) Or (Lig > 24) Then Exit Sub
     
Rep = MsgBox("Etes-vous certain de vouloir supprimer la ligne " & Lig, vbYesNo, "Attention")
If Rep = vbYes Then
    Range("B" & Lig & ",D" & Lig & ":E" & Lig).Select
    Selection.ClearContents
End If
Range("D1").Select

'remet le mot de passe si nécessaire
'Worksheets("Feuil1").Protect Password:="Motasse"
End Sub
Seules les valeurs sont supprimées, pas la formule en C car elle renvoie un "" si la cellule B = "", sinon on ne peut pas effacer le contenu d'une cellule et laisser la formule (ClearContents ne concerne pas la colonne C). Si ce n'était pas le cas, on pourrait éventuellement sauvegarder la formule dans une autre cellule Z1 ou sur une autre feuille, puis la recopier après effacement.

A+ Jack2
 
Dernière édition:
Re : Vider contenu de cellules a partir d'une macro

Bonjour,

Petite remarque au passage, perso je déprotégerais la feuille après l'instruction contenant le "exit sub" et rajouterais une désactivation des procédures événementielles afin d'éviter un "blouclage" intempestif.

bonne journée
@+
 
Re : Vider contenu de cellules a partir d'une macro

Bonjour tout le monde,

Tu as doublement raison, on ne déprotège pas si l'on repasse par la ligne qui protège à nouveau. Pour la procédure événementielle, je suis en phase de découverte. J'espère qu'avec ces corrections, cela conviendra à LAMULE.

Bonne journée à tous
A+ Jack2
 
Re : Vider contenu de cellules a partir d'une macro

Bonsoir à vous..

Je viens de tester la modif de JACK2. Cela fonctionne la protection est bien contournée. par contre mon fichier comporte plus de 400 colonnes et il m'arrive d'en déplacer certaines. quand je regarde le code, je comprend qu'il est nécessaire de lister les colonnes que l'on souhaite effacer.

Dans mon cas cela devient irréalisable; n'y aurais t il pas un code qui testerais l'état verrouillé/déverouillé de toutes les cellules de la ligne que je souhaite effacée et n'effacera que celle qui on l'état déverrouillée ?
 
Re : Vider contenu de cellules a partir d'une macro

Bonjour tout le monde, Bonjour LAMULE,

Actuellement, les suppressions se font d'après ton tableau, c'est à dire entre les lignes 5 et 24 et les colonnes B, D et E. Est--ce que maintenant tu souhaites que l'on teste sur les lignes 1 à 24, mais les Colonnes A à QJ (400, ou plus). Si c'est le cas, je vais essayer de trouver quelque chose qui teste si les cellules sont verrouillées ou déverrouillées (c'est pas gagné pour ce qui me concerne, mais il y a du monde dans le forum ).

A+ Jack2
 
Re : Vider contenu de cellules a partir d'une macro

Bonjour,

Je te précise JACK2 que les limites de mon tableau sont la colonne "QQ" n'y voit pas un jeu de mot !!! ;-) et la ligne 818.

Et le problème c'est que je suis susceptible de faire évoluer mon tableau en ajoutant ou déplaçant des colonnes...j'ai prévu de la marge, la colonne QQ est suffisamment loin pour ne pas avoir à redéfinir mes limite dans le code VBA. D’où l’intérêt de tester l’état verrouiller/déverrouiller des cellules de la ligne à effacée.
 
Re : Vider contenu de cellules a partir d'une macro

Bonjour à tous

LAMULE
Je te laisse ajouter la gestion de la protection/deprotection de ta feuille
et transcrire la macro ci-dessous en macro événementielle comme le le fit Jack2.
Code:
Sub EffacerUnlockedCells()
'Adapté d'un code de John Walkenbach: Sub SelectUnlockedCells()
    Dim WorkRange As Range, FoundCells As Range, Cell As Range
    Dim Ligne&
    Ligne = [D1].Value
    For Each Cell In Rows(Ligne).SpecialCells(xlCellTypeConstants)
        If Cell.Locked = False Then
            If FoundCells Is Nothing Then
                Set FoundCells = Cell
            Else
                Set FoundCells = Union(FoundCells, Cell)
            End If
        End If
    Next Cell
    If FoundCells Is Nothing Then
        MsgBox "All cells are locked."
    Else
        FoundCells.ClearContents
    End If
End Sub
 
Re : Vider contenu de cellules a partir d'une macro

Re

Qu'est ce que c'est une macro événementielle ??
Ceci par exemple
Private Sub Worksheet_Change(ByVal Target As Range)
(Donc la macro de Jack2 par exemple 😉)

Pour plus de détails sur ce que sont les procédures évènementielles, dans Excel faire: ALT+F11 puis F1


Tu peux néanmoins tester la macro de mon message précédent en la lançant par Outils/Macros.
 
Dernière édition:
Re : Vider contenu de cellules a partir d'une macro

Bonsoir à vous....

J'ai tenter une intégration de ton code STAPLE 1600 en combinant la macro événementielle de JACK2.....

Voici le résultat dnas la feuil1 "PLANNING"

Private Sub Worksheet_Change(ByVal Target As Range)
'Adapté d'un code de John Walkenbach: Sub SelectUnlockedCells()
Dim WorkRange As Range, FoundCells As Range, Cell As Range
Dim Ligne&
Ligne = [D1].Value
For Each Cell In Rows(Ligne).SpecialCells(xlCellTypeConstants)
If Cell.Locked = False Then
If FoundCells Is Nothing Then
Set FoundCells = Cell
Else
Set FoundCells = Union(FoundCells, Cell)
End If
End If
Next Cell
If FoundCells Is Nothing Then
MsgBox "All cells are locked."
Else
FoundCells.ClearContents
End If
End Sub



J'obtient une erreur à ce niveau (erreur 1004) :

For Each Cell In Rows(Ligne).SpecialCells(xlCellTypeConstants)


Pour contourner la protection de la feuille j'ai utiliser ce code (issu du sujet : "Protéger les cellule sans buguer le code")

Option Explicit
Private Sub Workbook_Open()
Sheets("Feuil1").Protect "toto", userinterfaceonly:=True
End Sub

Je précise avoir remplacer le PASSWORD "toto" par "" étant donné que ma feuille est protégé sans mot de passe
 
Dernière modification par un modérateur:
Re : Vider contenu de cellules a partir d'une macro

Re

Essaie avec cette modif
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Adapté d'un code de John Walkenbach: Sub SelectUnlockedCells()
Dim WorkRange As Range, FoundCells As Range, Cell As Range
Dim Ligne&
Ligne = [D1].Value
On Error Resume Next
For Each Cell In Rows(Ligne).SpecialCells(xlCellTypeConstants)
If Cell.Locked = False Then
If FoundCells Is Nothing Then
Set FoundCells = Cell
Else
Set FoundCells = Union(FoundCells, Cell)
End If
End If
Next Cell
If FoundCells Is Nothing Then
MsgBox "All cells are locked."
Else
FoundCells.ClearContents
End If
End Sub
 
Re : Vider contenu de cellules a partir d'une macro

Bonsoir,
je suis de retour.

Merci Staple1600 pour ton code. Je rencontre un problème avec. Ce dernier me renvoi la message box "all cells are locked" et les cellules ne se vident pas tant que les protections sont présente.

Saurais tu d'où le problème vient ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
XL 2021 Macro
Réponses
6
Affichages
315
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…