Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[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

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... 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 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

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…