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

XL 2016 VBA - Une manière rapide de trouver les cellules verrouillées ?

Dudu2

XLDnaute Barbatruc
Bonjour,
Je n'y crois pas trop, mais à part parcourir les cellules une à une (ce qui n'est envisageable que sur un Range limité) y a-t-il un moyen de trouver le Range des cellules verrouillées d'une feuille ?
Merci.
 

Dranreb

XLDnaute Barbatruc
Comme celle de l'objet Workbook sauf qu'il faut qualifier de l'objet Worksheet au lieu du Workbook.
Et attention dans ce cas la propriété Name des objets Name trouvés portent le préfixe de feuille contairement à la clé des élément de la collection de l'objet Worksheet..
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
@Dudu2
Désolé, je n'ai pas compris comment ça marche pour obtenir un Range des cellules verrouillées au final
Voici de quoi faire le test sur une feuille vierge
1) Sur un classeur vierge, lance la macro ci-dessous
Code:
Sub Preparation()
Sheets.Add
Cells.Locked = False
    Range( _
        "B6,B5:B6,D3:D4,F4:F7,C11:C12,D8:D9,G13:G19,B15:C17,D22:E24,A28:C33,E28:E29,E32:F34,E12,G23:H26" _
        ).Locked = True
End Sub
Puis lance la macro, CellulesVerrouillées
 

Dudu2

XLDnaute Barbatruc
Ok, dans ce cas, pour trouver un Name particulier de la Collection Worksheet, il faut que je fasse une boucle sur les Worksheet.Names. Je ne peux pas le trouver directement.
 

Dranreb

XLDnaute Barbatruc
En effet le gestionnaire de noms ne montre pas que le vrai nom tel qu'il est porté dans la propriété Name du second objet Name est en réalité Feuil2!FeuilleSpécific Il faut savoir que c'est la colonne Étendue qui le dit. Il montre le nom tel qu'il est compris par la méthode Range ou Evaluate de l'objet Worksheet plutôt que celle de l'objet Application.
 

Dudu2

XLDnaute Barbatruc
@Dranreb,
Ok je vois ce que tu veux dire. Mais je trouve que ces subtilités de scope / étendue sur feuille / classeur sont difficiles à intégrer dans une lecture rapide du code à moins d'être un expert de la chose.
Et une petite différence de syntaxe et tout change. Peut-être est-il plus prudent au niveau du code d'en rester à la notion de nom.
 

Phil69970

XLDnaute Barbatruc
@Staple1600 ,
Cette MFC est effectivement très subtile et efficace !
En réalité je suis en VBA pour essayer de trouver ce que ta MFC trouve rapidement visuellement.
Staple tu es sur ?

De plus à la volée tu peux la créer en vba et toujours à la volée tu peux la supprimer quand tu n'en as plus besoin.
Perso j'ai trouvé cela sympa et qui pourrait convenir à ta demande ....
 

Staple1600

XLDnaute Barbatruc
Re

@Dudu2
En partant du code précédent, on peut tenter ceci
(fonctionne sur un exemple simple avec une feuille ne contenant pas de formules)
Code:
Sub Range_Cell_VER()
Dim rng As Range, p As Range, vVals As Variant
Set p = ActiveSheet.UsedRange
vVals = p.Value
  With Application
    .FindFormat.Clear
    .ReplaceFormat.Clear
    .FindFormat.Locked = True
    .ReplaceFormat.Interior.Color = RGB(255, 0, 0)
    Cells.Replace "*", "#N/A", , , , , True, True
    Set rng = Cells.SpecialCells(2, 16)
    .FindFormat.Clear
    .ReplaceFormat.Clear
  End With
  MsgBox rng.Address
  p = vVals
End Sub

Les valeurs initiales de la feuille sont réinjectées en fin de macro
 

Discussions similaires

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