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
Voilà. En fin la parcourir, non ! Worksheet.Range("LeNom") provoque une erreur si la plage nommée n'existe pas. Pas besoin de parcourir sa collection Names.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Mais les noms ne semblent pas qualifiés par le nom de la feuille dans le Gestionnaire de noms même si leur "étendue" est la feuille.
Ce que je dis, c'est que je pense que si tu appelles tous tes Noms par exemple "MaPlage", quand tu utilises Sheets("Feuil1").Range("MaPlage") ça utilise alors la plage nommée MaPlage de la feuille "Feuil1".


Alors j'ai des gros doutes. Le préfixage par le CodeName fonctionne tel que je l'ai implémenté, alors...
Moi aussi j'ai un doute... il faut tester.
 

Dudu2

XLDnaute Barbatruc
Alors j'ai un gros problème en retrieve.
Si j'arrive à créer un nom X d'étendue feuille en parallèle d'un nom X d'étendue classeur, Evaluate() qui n'accepte d'être qualifié QUE par Worksheet n'est plus capable de me retourner la valeur du nom d'étendue classeur.


Set GetNameValue = Worksheet.Evaluate(Name) -> B1:B10
 

Dudu2

XLDnaute Barbatruc
Ok Set GetNameValue = Worksheet.Application.Evaluate(Name)

Ceci dit, quand il y a le même nom au niveau feuille et au niveau classeur, même le ThisWorkbook.Names(Name).Value retourne la valeur du nom d'étendue feuille.

Alors j'ai l'impression que dans ce cas, la valeur du nom d'étendue classeur n'est pas atteignable.
Ce qui semble logique.
 

Dudu2

XLDnaute Barbatruc
Oui étonnant, mais peut-être pas tant que ça car le même nom référence la même feuille.
Il est logique qu'il donne la préférence à la feuille.
Mais oui, à éviter pour ne pas se poser des questions métaphysiques.
 

Dudu2

XLDnaute Barbatruc
Ceci dit j'ai vraiment un gros souci avec cette instruction: Worksheet.Application.Evaluate(Name).

Soit la situation suivante:


Worksheet.Name = "Feuil1"
Worksheet.Parent.Names("TestName").Value ->=Feuil1!$A$1:$A$10
Worksheet.Application.Evaluate("TestName").Address -> $B$1:$B$10 (de la Feuil2 !!!)

Je ne peux pas compter sur Evaluate(). Il faut que j'utilise la Value.
Value = Worksheet.Parent.Names("TestName").Value
Range(Mid(Value, 2)).Address -> $A$1:$A$10 (de la Feuil1)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pour prendre la méthode Evaluate de l'objet Application il n'y a pas à préciser Worksheet devant. Mais de toute façon j'évite d'utiliser les méthodes de l'objet Application que possède aussi l'objet Worksheet.
 

Dudu2

XLDnaute Barbatruc
Oui mais si Application.Evaluate() n'est pas qualifié, je ne sais pas du tout où il va le prendre.
C'est pour ça que je suis retourné sur la Value dont au moins je suis sûr du contenu.
Je vérifie mon code et je le republierai avec l'option de étendue.
 

Dudu2

XLDnaute Barbatruc
Quant au Delete c'est encore pire !
Quand des names sont identique mais pas sur la même étendue, malgré le fait que j'adresse explicitement un Name au Delete (par son nom ou par son indice, vérifiés par la Value) et il m'en delete un autre.

En fait il delete le 1er nom qu'il trouve dans la liste ! Même si on lui désigne le 2ème.
Et même si le nom interne est préfixé par le nom de la feuille, il s'en fout !
 
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…