Supprimer une ligne contenant des cellules verrouillées

Hello à tous!

C'est encore moi avec mon fichier Devis (que voulez-vous j'adore le customiser ).

J'ai besoin de vous cette fois car dans mon tableau Devis je voudrais que l'utilisateur puisse sélectionner une ligne du tableau (aléatoirement, pas forcément la dernière) et la supprimer.

Seulement le problème est que ma feuille est protégée et que les cellules des dernières colonnes sont verrouillées (pour éviter que les utilisateurs suppriment des formules malencontreusement) donc en essayant de supprimer une ligne, Excel me renvoie fatalement le message d'erreur "impossible de supprimer une ligne contenant des cellules verrouillées).

Donc, en ayant réfléchi au problème, je me suis dit qu'il était possible de faire un petit bout de code VBA pour lui dire en gros :

Si l'utilisateur sélectionne une ligne appartenant au tableau Devis + essai de la supprimer

Alors on déprotège la feuille

Puis on supprime la ligne

Puis on reprotège la feuille

Fin du Si

Or j'ai déjà deux problèmes avant d'écrire ce bout de code :

1/ la plage de mon tableau Devis n'est pas encore définie et si je la nomme alors je ne sais pas si les lignes ajoutées par mon bouton "ajout de ligne" seront prises en compte dans cette plage nommée.

2/ peux-t'on vraiment réaliser ce Si ? Peux-t'on vraiment dire à Excel : "si utilisateur sélectionne une ligne et tente de la supprimer" ? Est-ce une action identifiable?

Si jamais cela n'est pas réalisable alors je pensais créer un bouton suppression de ligne (tout comme j'ai déjà un bouton "ajout de ligne") qui permettrait de choisir la ligne du tableau à supprimer (l'utilisateur pourrait choisir le numéro de la ligne et je l'aiderais en lui mettant une nouvelle colonne avec un numéro chrono).

Je vous joins mon fichier au cas ou :

Merci d'avance pour votre aide

Vip4rk

J'utilise quelque chose de similaire a ce que tu cherche

Essaye sa en adaptant a ton fichier

Sub EffaceLigneTableau()

'déprotege la feuille
ActiveSheet.Unprotect "tonMDP"

With Selection

    'test si la selection est une ligne et qu'elle n'est pas comprise dans les 5 prmeieres lignes du tableau
    If .Columns.Count > 50 And .Columns.Count > 1 And Selection.Row > 5 Then

    'si oui affiche la boite de dialogue de suppression de la ligne
            Dim Lign As Long         'N° de la ligne à supprimer
           Dim i As Long            'variable pour passer d'une colonne à une autre
           Dim Rep As Integer       'Tableau mémoire contenant le nombre de colonne reseignée
           Dim Plag As String       'Plage de la ligne à supprimer
           Dim Mess As String       'Message du MsgBox

           Lign = ActiveCell.Row 'récupération de la ligne sélectionnée

           'construction du message
           For i = 2 To 7 'définit le nombre de colone
           Mess = Mess & vbCrLf & Cells(4, i).Value & " : " & Cells(Lign, i).Value 'cells(4,i) définit la zone d'entête
           Next
           Mess = Mess & vbCrLf & vbCrLf & "Voulez-vous supprimer cette opération ?"
           Rep = MsgBox(Mess, vbYesNo + vbInformation + vbDefaultButton2, "Confirmation de suppression d'une opération")
           'supprime la ligne
           If Rep = vbYes Then
               Plag = Lign & ":" & Lign
               Rows(Plag).Delete
           End If

    'si pas la bonne plage de selection affiche message
    Else
        MsgBox "Veuillez sélectionner une ligne entiére" & vbLf & "Les lignes 1 à 5 ne sont pas autorisées", vbInformation, "Information"
    End If
End With

'protége la feuille
ActiveSheet.Protect "tonMDP", True, True, True

End Sub

Salut @tico06

Merci pour ton code.

J'ai essayé de l'adapter mais je pense que je manque encore de connaissances en VBA pour y arriver.

Mais du coup je me suis contenté d'un code permettant de supprimer la dernière ligne du tableau et c'est déjà pas mal

Pour info le code :

Sub SuppressionLigne()
'
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:="victor"
Application.EnableEvents = False
'
Dim Ligne As Long
'
Ligne = [LigneTotalDevis].Row - 1
'
    Rows(Ligne).Select
    Selection.EntireRow.Delete
'
Application.CutCopyMode = False
Application.ScreenUpdating = True
ActiveSheet.Protect Password:="victor", AllowDeletingRows:=True
Application.EnableEvents = True
'
End Sub

Vip4rk

Rechercher des sujets similaires à "supprimer ligne contenant verrouillees"