Note: The other languages of the website are Google-translated. Back to English

Comment verrouiller les cellules spécifiées sans protéger la feuille de calcul entière dans Excel?

Normalement, vous devez protéger la feuille de calcul entière pour verrouiller les cellules contre la modification. Existe-t-il une méthode pour verrouiller les cellules sans protéger la feuille de calcul entière? Cet article vous recommande une méthode VBA.

Verrouiller les cellules spécifiées sans protéger la feuille de calcul entière avec VBA


Verrouiller les cellules spécifiées sans protéger la feuille de calcul entière avec VBA


Supposons que vous deviez verrouiller les cellules A3 et A5 dans la feuille de calcul actuelle, le code VBA suivant vous aidera à y parvenir sans protéger la feuille de calcul entière.

1. Cliquez avec le bouton droit de la souris sur l'onglet de la feuille et sélectionnez Voir le code dans le menu contextuel.

2. Ensuite, copiez et collez le code VBA ci-dessous dans la fenêtre Code. Voir la capture d'écran:

Code VBA: verrouillez les cellules spécifiées sans protéger la feuille de calcul entière

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 1 Then
        If Target.Row = 3 Or Target.Row = 5 Then
            Beep
            Cells(Target.Row, Target.Column).Offset(0, 1).Select
        End If
    End If
End Sub

Notes: Dans le code, Colonne 1, Ligne = 3 et des tours Ligne = 5 indiquer que les cellules A3 et A5 de la feuille de calcul actuelle seront verrouillées après l'exécution du code. Vous pouvez les changer selon vos besoins.

3. appuie sur le autre + Q touches simultanément pour fermer le Microsoft Visual Basic pour applications fenêtre.

Les cellules A3 et A5 sont désormais verrouillées dans la feuille de calcul actuelle. Si vous essayez de sélectionner la cellule A3 ou A5 dans la feuille de calcul actuelle, le curseur sera déplacé automatiquement vers la cellule adjacente droite.


Articles connexes:


Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2019 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (20)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Je voulais cacher la formule dans la cellule O1. Veuillez informer la formule pour la même chose.
Ce commentaire a été minimisé par le modérateur sur le site
Cher Ajay,
Pour cacher la formule des cellules, veuillez suivre le lien hypertexte ci-dessous pour obtenir la solution.
https://www.extendoffice.com/documents/excel/1424-excel-hide-formulas.html
Ce commentaire a été minimisé par le modérateur sur le site
Cher Ajay,
Si vous souhaitez masquer la formule dans la cellule O1 sans protéger la feuille de calcul, veuillez essayer le script VBA ci-dessous.
Private Sub Worksheet_SelectionChange (Cible ByVal en tant que plage)
Static TheFormula As String
Si Target.Address = "$O$1" alors
Avec cible
LaFormule = .Formule
.Valeur = .Valeur
Terminer par
autre
Avec plage ("O1")
Sinon .HasFormula Alors
.Formule = LaFormule
Si fin
Terminer par
Si fin
End Sub

Après avoir utilisé le code, il semble que la formule de la cellule O1 soit remplacée par le résultat de la formule. En fait, il masque la formule en affichant le résultat de la formule dans la barre de formule. Et la formule s'affichera si le code est cassé.
Ce commentaire a été minimisé par le modérateur sur le site
comment pourrais-je verrouiller une plage de lignes, disons 4-46 et les colonnes 8 et 10
Ce commentaire a été minimisé par le modérateur sur le site
Cher AJ,
Si vous souhaitez verrouiller une plage de lignes et de colonnes spécifiées, essayez le script VBA ci-dessous.

Private Sub Worksheet_SelectionChange (Cible ByVal en tant que plage)
Dim xRg As Range
Dim xRgEx As Range
Dim xRgExEach As Range
On Error Resume Next
Application.ScreenUpdating = Faux
Set xRg = Range("H:J,4:46") 'Modifier la plage de lignes et la plage de colonnes que vous verrouillerez sans protéger la feuille de calcul
Définir xRgEx = Application.Intersect(xRg, Target)
Si xRgEx n'est rien, quittez Sub
Cellules (1, 1).Sélectionnez 'Spécifiez une cellule vers laquelle vous passerez après avoir sélectionné les cellules verrouillées
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Il s'agit d'une excellente solution de contournement, en particulier dans les classeurs partagés où l'activation/la désactivation de la protection n'est pas prise en charge. Merci beaucoup.
Ce commentaire a été minimisé par le modérateur sur le site
Chère Cristal,

Vous m'avez fourni une solution (la moitié) que j'ai lutté ces dernières semaines, mais j'aurais besoin de quelques conseils supplémentaires.

Comment cela pourrait-il être appliqué à une plage de table uniquement, pas à une feuille de calcul entière? Merci d'avance.
Ce commentaire a été minimisé par le modérateur sur le site
Good Day,
En tant que code VBA fourni ci-dessous, veuillez modifier la plage spécifiée "H: J, 4:46" par la plage de tableau que vous souhaitez uniquement verrouiller dans la feuille de calcul.
Et les cellules (1,1) doivent être la cellule en dehors de la plage du tableau. Lorsque vous cliquez sur n'importe quelle cellule de la plage du tableau, le curseur sera automatiquement déplacé vers cette cellule.

Private Sub Worksheet_SelectionChange (Cible ByVal en tant que plage)
Dim xRg As Range
Dim xRgEx As Range
Dim xRgExEach As Range
On Error Resume Next
Application.ScreenUpdating = Faux
Set xRg = Range("H:J,4:46") 'Modifier la plage de lignes et la plage de colonnes que vous verrouillerez sans protéger la feuille de calcul
Définir xRgEx = Application.Intersect(xRg, Target)
Si xRgEx n'est rien, quittez Sub
Cellules (1, 1).Sélectionnez 'Spécifiez une cellule vers laquelle vous passerez après avoir sélectionné les cellules verrouillées
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Chère Cristal,

Existe-t-il de toute façon que cette macro puisse être exécutée automatiquement à l'ouverture du fichier ou en cliquant sur n'importe quelle cellule. Je ne veux pas que les gens aient à exécuter la macro manuellement pour que les plages requises soient protégées.

De plus, je devrai protéger 12 plages non adjacentes. Par exemple : I11:I20 et K11:K20 et M11:20 etc... Comment faire ?

Enfin, et celui-ci est peut-être trop demander, mais est-il possible d'appliquer la protection aux exemples de plages que j'ai fournis ci-dessus, MAIS ensuite d'étendre la protection sur des lignes supplémentaires à mesure que de nouvelles sont ajoutées ? En d'autres termes, la protection serait appliquée à I11:I20 et K11:K20 et M11:20, mais un utilisateur pourrait ajouter une nouvelle ligne (ligne 21), avec de nouvelles données, mais une fois la nouvelle ligne ajoutée, alors la protection s'appliquerait à I11:I21 et K11:K21 et M11:21. Est-ce que je demande la lune ? :-)

Merci pour tout ce que vous avez déjà fourni ! Je ne saurais trop vous remercier, vous et d'autres personnes comme vous, d'avoir partagé vos connaissances. Étonnante!
Ce commentaire a été minimisé par le modérateur sur le site
Cher carlos,
Le code VBA suivant peut vous aider à résoudre le problème. Veuillez remplir vos plages dans la quatrième ligne du code et appuyez sur les touches Alt + Q pour revenir à la feuille de calcul. Ensuite, veuillez passer à une autre feuille de calcul, puis revenir à la feuille actuelle pour activer le code. Merci pour votre commentaire.

Dim xRg As Range
Private Sub Worksheet_Activate ()
Si xRg n'est rien alors
Définir xRg = Union(Plage("I10:I20"), Plage("K10:K20"), Plage("M10:M20"), Plage("O10:O20"))
Si fin
End Sub
Private Sub Worksheet_Change (Cible ByVal en tant que plage)
Dim i comme entier
Dim xRgNew As Range
Dim xRgLCell As Range
On Error Resume Next
Application.EnableEvents = False
Pour I = 1 To xRg.Areas.Count
Définir xRgLCell = xRg.Areas.Item(I)
Définir xRgLCell = xRgLCell(xRgLCell.Count).Offset(1, 0)
Si Target.Address = xRgLCell.Address Alors
Si xRgNew n'est rien alors
Définir xRgNew = Cible
autre
Définir xRgNouveau = Union(xRgNouveau, Cible)
Si fin
Si fin
Suivant
Ensemble xRg = Union(xRg, xRgNouveau)
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange (Cible ByVal en tant que plage)
En cas d'erreur GoTo Exitsub
Si (Not Intersect(xRg, Target) n'est rien) et (Target.Count = 1) alors
Cible.Décalage(0, 1).Sélectionner
Si fin
Exitsub :
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Chère Cristal,

Merci beaucoup pour ça! Cela fonctionne parfaitement.

J'ai utilisé le code dans le commentaire de Carlos pour exécuter la macro automatiquement lorsque vous ouvrez le fichier. Je me demandais s'il y avait un moyen d'avoir un bouton "Annuler" ou quelque chose comme ça, qui vous permet d'annuler ce code et donc de déverrouiller les plages qui ont été verrouillées.

Je veux que ceux-ci soient verrouillés la plupart du temps, mais je voudrais les déverrouiller si je dois modifier l'une des données. La seule raison pour laquelle je ne protège pas toute la feuille est que, si je le fais, cela désactive la possibilité de développer des tableaux. Cela à son tour, développez un graphique en courbes.

Merci beaucoup pour l'aide!
Ce commentaire a été minimisé par le modérateur sur le site
Salut Erin,
Vous pouvez casser manuellement le code en cliquant sur le bouton Casser dans la fenêtre Microsoft Visual Basic pour Applications pour déverrouiller ces plages. Et exécutez le code pour l'activer à nouveau. Merci pour votre commentaire.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,
Comment faire pour verrouiller la cellule B8 à B10000 ?
D'avance merci de votre réponse.
Christophe
Ce commentaire a été minimisé par le modérateur sur le site
Existe-t-il une fonction à définir, par exemple la cellule 2 de la ligne 13 à 900 ? Ou dois-je taper manuellement chaque nom de cellule dans le code ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,

J'ai utilisé le code fourni à Carlos et il a fait exactement ce que je voulais. Existe-t-il un moyen de décaler certaines plages dans la LIGNE à droite de la plage protégée (comme le fait déjà le code "Carlos"), mais d'avoir d'autres plages décalées dans la COLONNE vers la cellule directement en dessous de la plage protégée ? J'ai essayé d'entrer deux fois le code "Carlos" et de changer le décalage, mais j'ai reçu diverses erreurs.

Merci
Ce commentaire a été minimisé par le modérateur sur le site
Salut Charlie,
Désolé, je ne peux pas encore vous aider. Merci pour votre commentaire.
Ce commentaire a été minimisé par le modérateur sur le site
Hi,

J'ai essayé d'utiliser le code pour les plages que vous avez précédemment publiées, mais cela ne fonctionne pas - pouvez-vous me dire si je dois combiner le code pour les plages ci-dessus ou ci-dessous ?


Merci
Ce commentaire a été minimisé par le modérateur sur le site
J'ai essayé de ne pas pouvoir masquer la formule sans la protéger.
Ce commentaire a été minimisé par le modérateur sur le site
Existe-t-il un moyen pour que ce code VBA s'exécute automatiquement chaque fois que quelqu'un ouvre le fichier ?
Ce commentaire a été minimisé par le modérateur sur le site
Salut Aaron, Après avoir ajouté le code, veuillez enregistrer le classeur en tant que classeur Excel compatible avec les macros (cliquez sur Déposez le > Enregistrer sous > spécifiez un dossier pour le fichier > choisissez Cahier de travail Excel avec macro-activé du Enregistrer sous liste déroulante type > Enregistrer). Après cela, chaque fois que vous ouvrez le fichier, le code fonctionne automatiquement.
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés