[Excel] intercepter suppression ligne [Résolu]

cs_pompoire 8 Messages postés lundi 14 mai 2007Date d'inscription 12 janvier 2010 Dernière intervention - 7 déc. 2007 à 15:48 - Dernière réponse : bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention
- 19 déc. 2007 à 18:41
Bonjour,

J'ai un fichier excel généré par une application externe. pour des raisons de sécurité, certaines colonnes sont vérouillées. L'utilisateur est suscepotible de supprimer des lignes mais dans ce cas, une message apparait indiquant que du fait de la protection de la feuille, l'opération ne peut pas être effectuée. Je précise que j'ai donné les droits de suppression.
Ma question est: Est il possible d'intercepter ce message d'erreur via un code VBA et ainsi de pouvoir désactiver ce message d'erreur, déprotéger la feuille, valider la suppresion de la ligne (même si cela doit être fait par code) puis reprotéger la feuille. Ainsi l'opération sera transparente pour l'utilisateur.

Merci de votre aide et bon week end
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_pompoire 8 Messages postés lundi 14 mai 2007Date d'inscription 12 janvier 2010 Dernière intervention - 19 déc. 2007 à 16:57
3
Merci
Bonsoir,

apès recherche, voici la solution trouvée:

Private Sub WorkSheet_SelectionChange(ByVal Target As Range)
    If Target.Columns.Count > 1 Then
        Application.ActiveSheet.Unprotect
    Else
        Application.ActiveSheet.Protect AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFormattingColumns:=True
    End If

End Sub

en fait a chaque sélection de cellule, je regarde le nombre de colonnes sélectionées. si plus de deux alors cela signifie que la ligne entière a été sélectionnée (On peut optimiser en définissant par avance le nombre de colonnes max possible). ainsi j'active ou non la protection de la feuille.

A+

Merci cs_pompoire 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_pompoire
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 18 déc. 2007 à 06:09
0
Merci
Bonjour,

Sub DelRow ()
   Application.DisplayAlerts = False 'tout les messages sont desactivés
   On Error Resume Next
   ActiveWorkbook.Unprotect

ici tu deletes ce que tu veux

   On Error Resume Next
   ActiveSheet.Protect DrawingObjects:=True, contents:=True, Scenarios:=True
   Application.DisplayAlerts = true
End Sub

A+

Philippe
Commenter la réponse de bigfish_le vrai
cs_pompoire 8 Messages postés lundi 14 mai 2007Date d'inscription 12 janvier 2010 Dernière intervention - 18 déc. 2007 à 08:51
0
Merci
Bonjour et merci,

mon souci concerne le cas d''un utilisateur qui supprime des lignes par le biais du clavier ou via le mennu contextuel. je confirme que cette procédure serait ce qu'il faut faire mais la question est alors de savoir à quel moment j'appelle la procédure delrow puisqu'il n'y a pas a ma connaissance de fonction du type OnDelete.

je connais la fonction OnChange mais dans ce cas comment savoir qu'un utilisateur a supprimé une ligne ?
Commenter la réponse de cs_pompoire
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 18 déc. 2007 à 18:16
0
Merci
il y 3 facons de delete une ligne dans excel :
- par le menu edit
- par la touche delete du clavier
- par un click droit sur la ligne

tu pourrais obliger l'utilisateur a n' utiliser que le click droit et utiliser l'evenement RightClick pour ne permetre de delete que ponctuelement par :

    If ActiveSheet.Protection.AllowDeletingRows = False Then
        ActiveSheet.Protect AllowDeletingRows:=True
    End If

j'en sais pas plus. A fouiller. Tient moi au courant

A+
Commenter la réponse de bigfish_le vrai
cs_pompoire 8 Messages postés lundi 14 mai 2007Date d'inscription 12 janvier 2010 Dernière intervention - 19 déc. 2007 à 17:01
0
Merci
Aprés vérification, le nombre de colonnes excel est de 256 donc il faut remplacer la ligne
If Target.Columns.Count > 1 Then
par
If Target.Columns.Count = 256 Then

Bonne soirée
Commenter la réponse de cs_pompoire
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 19 déc. 2007 à 18:41
0
Merci
Bonsoir,


BRAVO !!!

et merci de m'avoir tenu informé.
je le met de coté cela pourait me servire

A+

PS pour moi c'est plutot bonjour vu que je suis aux US
Commenter la réponse de bigfish_le vrai

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.