[Résolu]Ajouter une ligne à une table dans une feuille protégée

Victor21

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous :)

Je cherche, en double-cliquant sur la première cellule vide sous une table, à y ajouter une ligne et pouvoir sélectionner un des items de la liste déroulante, le plus simplement possible.
J'en suis là :
VB:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target = ActiveCell

If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect
If Target.ListObject Is Nothing And Not Target.Offset(-1, 0).ListObject Is Nothing Then
    Target.Offset(-1, 0).ListObject.ListRows.Add AlwaysInsert:=False
End If

Application.OnKey "ESC"
ActiveSheet.Protect userinterfaceonly:=True

End Sub
Mais, bien que cela fonctionne manuellement, ça coince, sur :
Application.OnKey "{ESC}"
Je suis donc obligé de dé-sélectionner la cellule et d'y retourner pour choisir un nom dans la liste :(

Une âme charitable pourrait-elle me dire pourquoi ?

D'avance, merci.
:)
 

Fichiers joints

Dernière édition:

Dull

XLDnaute Barbatruc
Re : Ajouter une ligne à une table dans une feuille protégée

Salut Patrick:), le Forum

peut être dis-je une bêtise mais un utilisant le double Click tu ne fait pas que sélectionner ta cellule mais tu y place aussi le curseur. Un Cancel = True bien placé devrait faire l'affaire :)

VB:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Target = ActiveCell

If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect
If Not Intersect(Target, Columns(1)) Is Nothing Then Cancel = True ' ICI

If Target.ListObject Is Nothing And Not Target.Offset(-1, 0).ListObject Is Nothing Then
    Target.Offset(-1, 0).ListObject.ListRows.Add AlwaysInsert:=False
End If

'Application.OnKey "{ESC}"
ActiveSheet.Protect userinterfaceonly:=True

End Sub
De plus Target = ActiveCell est inutile dans ce cas :rolleyes:

Bonne Journée
 

job75

XLDnaute Barbatruc
Re : Ajouter une ligne à une table dans une feuille protégée

Bonjour Patrick :) Dull :) le forum,

Au lieu de OnKey tu veux sans doute SendKeys non ?

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Me.Unprotect
If Target.ListObject Is Nothing And Not Target(0).ListObject Is Nothing _
  Then Target(0).ListObject.ListRows.Add
Me.Protect userinterfaceonly:=True
SendKeys "%{UP}" 'ouvre la liste
End Sub
L'ennui de l'envoi de touches c'est que ça déverrouille le pavé numérique sur Excel 2010.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Ajouter une ligne à une table dans une feuille protégée

Re,

Ceci est sûrement mieux :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Target.ListObject Is Nothing Or Target(0).ListObject Is Nothing Then Exit Sub
Cancel = True
Me.Unprotect
Target(0).ListObject.ListRows.Add
Me.Protect userinterfaceonly:=True
SendKeys "%{UP}" 'ouvre la liste
End Sub
L'effet du double-clic est normal sur les autres cellules.

A+
 

Victor21

XLDnaute Barbatruc
Supporter XLD
Re : Ajouter une ligne à une table dans une feuille protégée

Bonjour à tous, bonjour Dull, job75.

Merci à vous deux pour vos conseils.
La dernière proposition de job75 répond parfaitement à mon attente :)
Ce que j'ai cru comprendre :
- l'expression target(0) est due à l'option base 0 par défaut,
- Cancel = True empêche ici SendKeys "%{UP}" de déverrouiller le pavé numérique.

Merci encore pour cette solution.
:)
 

job75

XLDnaute Barbatruc
Re : Ajouter une ligne à une table dans une feuille protégée

Re Patrick,

Non, tu es dans l'erreur dans les 2 cas.

Target(0) c'est la même chose que Target.Offset(-1)

Target(1) c'est la même chose que Target

Target(2) c'est la même chose que Target.Offset(1)

De plus on peut utiliser 2 dimensions => Target(0, 1) Target(1, 1) Target(2, 1)

Quant à la variable Cancel elle ne sert qu'à annuler l'effet Normal du double-clic.

Rien à voir avec le SendKeys.

A+
 

Dull

XLDnaute Barbatruc
Re : Ajouter une ligne à une table dans une feuille protégée

Re le Fil :)

Gérard:), Merci pour cette astuce, succincte mais hautement instructive :)
Target(0) = Target.Offset( - 1)
GE²...NIAL(RARD)!!!

moi j'écrivais
Target.Offset( -1, 0)
j'y gagne 9 caractères...:rolleyes: pas mal en ces temps durs ou il faut économiser sur tout.

Mis dans la besace AstucesDesCopains... et cela ne m'a pas couté un rond:p mais je te doit un CitronVert;)

encore Merci et Bonne Journée;)
 
Dernière édition:

Victor21

XLDnaute Barbatruc
Supporter XLD
Re : Ajouter une ligne à une table dans une feuille protégée

Bonsoir, job75:)

Non, tu es dans l'erreur dans les 2 cas.
Target(0) c'est la même chose que Target.Offset(-1)
Target(1) c'est la même chose que Target
Target(2) c'est la même chose que Target.Offset(1)
De plus on peut utiliser 2 dimensions => Target(0, 1) Target(1, 1) Target(2, 1)

Quant à la variable Cancel elle ne sert qu'à annuler l'effet Normal du double-clic.
Rien à voir avec le SendKeys.
A+
Hé bé! y'a encore du boulot.

Merci mille fois d'avoir pris le temps de corriger mes incompréhensions : ce n'est que parceque certains prennent le temps de partager (même ce qu'ils trouvent élémentaire) que d'autre peuvent progresser.
:)


Edit : Je joins à toutes fins utiles le fichier qui répond à mes souhaits, les ressources que j'ai trouvées sur le web étant plutôt maigres.
 

Fichiers joints

Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas