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

Victor21

XLDnaute Barbatruc
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.
:)
 

Pièces jointes

  • test double clic.xlsm
    16.3 KB · Affichages: 61
  • test double clic.xlsm
    16.3 KB · Affichages: 60
  • test double clic.xlsm
    16.3 KB · Affichages: 62
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
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
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.
 

Pièces jointes

  • test double clic.xlsm
    20.8 KB · Affichages: 53
  • test double clic.xlsm
    20.8 KB · Affichages: 59
  • test double clic.xlsm
    20.8 KB · Affichages: 51
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 843
Messages
2 092 755
Membres
105 523
dernier inscrit
mouki62530