J'ai une feuille de calcul qui possède une gamme protégée de cellules. Ces cellules ont des noms en eux et j'aimerais avoir un événement avant double clic qui montre un formulaire et précharge les informations dans le formulaire en fonction du nom dans la cellule qui a double-clic.
J'utilise un double clic pour que l'user obtienne la cellule sélectionnée au premier clic, puis je peux utiliser ActiveCell.Value
pour get le nom et charger les informations appropriées.
Cependant, comme j'ai protégé la gamme, lorsque je clique deux fois sur une cellule, je reçois une invite Excel en disant:
La cellule ou le graphique que vous essayez de modifier est protégé et donc en lecture seule.
- VBA – Excel pour la comparaison de deux colonnes
- Excel VBA, Do warnings have a number
- Utilisation de VBA pour basculer entre les feuilles de travail actives uniquement
- La définition de dernière ligne est un qualificatif invalide lorsqu'il est fourni à ma destination
- Comment append une virgule après chaque 4 numbers dont la longueur est de 1000 dans excel?
Pour modifier une cellule ou un graphique protégé, retirez d'abord la protection à l'aide de la command Déprotéger la feuille (onglet Réviser, groupe Modifications). Vous pouvez vous requestr un mot de passe.
Les formulaires se triggersnt toujours comme prévu, mais j'aimerais que l'événement Excel n'intervienne pas. Existe-t-il un moyen de désactiver l'invite? Sinon, y a-t-il une autre manière de faire cela que je ne pense pas?
Pour votre cas particulier, cela se produit parce que vous avez l'option du classur activée pour «Autoriser l'édition directement dans les cellules» – qui peut être trouvé ici:
Et peut être configuré via un code, par exemple:
Application.EditDirectlyInCell = True
Donc, lorsque vous double-click les feux d'événement, mais l'action suivante consiste à entrer la cellule à modifier, mais parce que vous avez protégé cette cellule, vous obtenez l'alerte. La manière la plus simple d'empêcher l'alerte est d'annuler l'événement avant que l'étape «Editer» ne se produise – vous voulez simplement utiliser l'événement pour lancer le formulaire, n'est-ce pas? Le gestionnaire d'events est ainsi:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim varValue As Variant 'get the cell value varValue = ActiveCell.Value 'do something with it - you can launch your form here MsgBox CStr(varValue) ' NOTICE here that you can cancel the double click event ' meaning no attempt to edit the cell will be made per the users double click Cancel = True End Sub