Supprimer des lignes dans une feuille protégée

goodweath

XLDnaute Nouveau
Bonjour,

Je voudrais pouvoir supprimer des lignes dans une feuille protégée où j'ai défini quelques utilisateurs avec des autorisations sur des plages différentes. Le pb, c'est que même après avoir coché "Supprimer les lignes" dans les options autorisées pour tous les utilisateurs de la fenêtre "Protéger la feuille", je ne peux pas supprimer de lignes car le classeur est protégé. Et cela quelque soit l'étendue des plages des utilisateurs autorisés, y compris toute la feuille.
En effet, les cellules sont en position "Verrouillée" dans "Format de la cellule", sinon tout le monde pourrait modifier le fichier, ce que je ne souhaite pas.
Par contre, si je coche "Insérer des lignes", là pas de pb, n'importe qui peut en insérer, ce qui est normal.

Donc je ne comprends que moyennement le fonctionnement de l'option "Supprimer les lignes", puisque justement il ne le permet pas!!! Sauf pour les lignes ne contenant que des cellules déverrouillées, ce qui ne m'intéresse pas...

Y-aurait-il une astuce ou un morceau de code qui permettrait de contourner ce pb assez gênant?

Merci d'avance!
GoodWeath
 

goodweath

XLDnaute Nouveau
Re : Supprimer des lignes dans une feuille protégée

Bon finalement j'ai réussi à écrire une macro qui me permet de supprimer une ou plusieurs lignes adjacentes. J'ai mis le code en dessous, des fois que ça serve à quelqu'un... Avec en prime la 2è partie du code qui permet de le faire sur des plages non adjacentes (quand on sélectionne des lignes en utilisant la touche Ctrl).

Par contre, c'est un peu lourd, car à chaque fois qu'on sélectionne une ligne, la macro demande si on souhaite la supprimer.
Je voudrais donc savoir s'il y aurait un autre moyen, par exemple lancer la macro uniquement après clic droit sur la ligne et "Suppression" dans la liste habituelle (ce qui ne marche pas directement aujourd'hui) ?

Merci.

Code:
Private Sub Worksheet_SelectionChange(ByVal target As Range)

    Dim Reponse As Integer
    Dim Plage As Range          'Plage de lignes adjacentes
    
    'Si 1 ou plusieurs lignes sont sélectionnées (lignes adjacentes car areas.count = 1)
    If target.Areas.Count = 1 Then
    
        If target.Address = Range(Rows(target.Row), _
            Rows(target.Row + target.Rows.Count - 1)).Address Then 

            Reponse = MsgBox("Voulez-vous supprimer la(les) ligne(s) " & target.Row & _
                  " à " & target.Row + target.Rows.Count - 1 & " ?", vbYesNo)
            
            If Reponse = vbYes Then 'Choix = supprimer

                'Déprotection de la feuille
                ActiveSheet.Unprotect Password:="jb"

                'Suppression des lignes sélectionnées
                Range(Rows(target.Row), _
                    Rows(target.Row + target.Rows.Count - 1)).Delete 

                'Reprotection de la feuille
                ActiveSheet.Protect Password:="jb", ...
                    
            ElseIf Reponse = vbNo Then 
                Exit Sub 'Quitte la macro
            End If
        
        End If
        
    'Si plusieurs lignes complètes non adjacentes sont sélectionnées : suppression des lignes ou pas ? (lignes non adjacentes car areas.count > 1)
    ElseIf target.Areas.Count > 1 Then

        For Each Plage In target.Areas

            'Si 1 ou plusieurs lignes sont sélectionnées
            If Plage.Address = Range(Rows(Plage.Row), _
                Rows(Plage.Row + Plage.Rows.Count - 1)).Address Then 

                Reponse = MsgBox("Voulez-vous supprimer la(les) ligne(s) " & Plage.Row & _
                     " à " & Plage.Row + Plage.Rows.Count - 1 & " ?", vbYesNo)
                
                If Reponse = vbYes Then 'Choix = supprimer

                    'Déprotection de la feuille
                    ActiveSheet.Unprotect Password:="jb"

                    'Suppression des lignes sélectionnées
                    Range(Rows(Plage.Row), Rows(Plage.Row + _
                         Plage.Rows.Count - 1)).Delete 

                    'Reprotection de la feuille
                    ActiveSheet.Protect Password:="jb", ...
                        
                ElseIf Reponse = vbNo Then 
                    Exit Sub 'Quitte la macro
                End If
            
            End If
            
        Next Plage
        
    End If
    
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 103
Membres
104 032
dernier inscrit
akram.job