XL 2010 macro de suivi de modification bloque lors d'une insertion de ligne

Paolonam

XLDnaute Nouveau
Bonjour à tous,
La macro suivante est récupérée de l'un d'entre-vous (http://boisgontierjacques.free.fr/).
Elle bloque si j'insère une ligne dans mon onglet (Feuil1) à surveiller.
Que puis-faire d'après vous ?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Feuil1" Then
Application.EnableEvents = False
valsaisie = Target
Application.Undo
temp = Application.CountA(Sheets("data").Range("a:a")) + 1
Sheets("data").Cells(temp, 1) = Sh.Name
Sheets("data").Cells(temp, 2) = Target.Address
Sheets("data").Cells(temp, 3) = Target
Sheets("data").Cells(temp, 4) = valsaisie
Sheets("data").Cells(temp, 5) = Now
Sheets("data").Cells(temp, 6) = Environ("username")
Target = valsaisie
Application.EnableEvents = True
End If
End Sub

Un tout grand merci d'avance,
 

bof

XLDnaute Occasionnel
bonjour,
La première idée qui me vient à l'esprit est d'empêcher l'insertion (et la suppression) de ligne...
(en protégeant la feuille mais pas la plage modifiable...)
A+
 

Paolonam

XLDnaute Nouveau
D'abord, merci de m'aider.
Pour la suppression je peux (et je dois) la bloquer pour la bonne utilisation de mon fichier.
L'insertion est inévitable et nécessaire...et ç'est là que le problème survient.
Je me demandais si on peut:
Réserver la macro au clic d'une seule cellule. Pour l'instant, la macro démarre si "quelque chose " dans la feuil1 change.
Si on sélectionne une seule cellule, elle encode la modif. si on sélectionne plusieurs cellules, elle ne fait rien.
Qu'en pensez-vous ?
 

bof

XLDnaute Occasionnel
Oui tu peux limiter à une seule cellule de la manière suivante :
VB:
If Sh.Name = "Feuil1" And Target.Count = 1Then
'Le reste sans changement
Ce qui ne bloquera pas l'insertion.
 

Paolonam

XLDnaute Nouveau
Génial, ça marche !..
Pouvez-vous maintenant me dire le bout de code nécessaire pour empêcher la suppression de ligne ?
Déjà merci pour votre aide.
 

bof

XLDnaute Occasionnel
Bonsoir,

Ça me semble très compliqué. Sans voir le contexte je ne me hasarderai pas à des hypothèses hasardeuses...
Au plus simple toujours, puis que ta feuille s'appelle "data", on peut imaginer que c'est un genre de base de données de forme tabulaire.
Si c'est bien le cas le plus simple est de gérer cette feuille avec un UserForm de type CRUD (C)reate (R)ead (U)pdate (D)elete
Ainsi l'utilisateur n'a pas accès directement à ce type d'opération : C'est le UserForm qui gère tous les cas possibles. (avec une palette de commande beaucoup plus sophistiquée que les évènements de feuille.)

A+
 
Haut Bas