XL 2013 Vba - Suppression des noms dont le resultat est #REF

juicelink

XLDnaute Nouveau
Bonjour tout le monde :)

Dans un classeur Excel, j'importe via vba des feuilles provenant d'autres classeurs.
Les feuilles en question comportent des noms (je parle des noms faisant référence à des cellules, pas des noms des feuilles).
Du coup, quand j'importe ces feuilles dans mon nouveau classeur, ces références de noms pointent souvent vers un emplacement qui n'existe plus et je me retrouve avec tout un tas de noms dans le gestionnaire de noms dont la valeur est #REF
En soi, vous me direz que ce n'est pas très gênant sauf que j'importe beaucoup de feuille et ça me pollue franchement le gestionnaire de noms dans lequel il y a beaucoup de noms qui servent réellement, donc quand j'ai besoin de le consulter, c'est un peu galère de s'y retrouver

Du coup ma question est la suivante : avec quel code vba je peux supprimer du gestionnaire de noms tous les noms qui font référence à une valeur #REF
J'ai eu beau chercher, mais je ne trouve pas, notamment car je ne maîtrise pas bien le fait de tester quelque chose pour savoir s'il existe
j'ai essayé de faire une macro du genre "si le range(nom) donne une erreur, tu supprimes le nom", mais je n'y arrive pas...

un grand merci d'avance pour votre aide,

Julien
 

juicelink

XLDnaute Nouveau
Bonjour,

Tu as essayé avec une recherche du contenu via:
VB:
ActiveWorkbook.Names("xxx").refersto
Puis, si le résultat contient
Code:
=#REF!
alors
VB:
ActiveWorkbook.Names("xxx").delete

DD

Salut !
merci de ton aide :)
oui j'ai essayé avec .refersto, mais ça ne fonctionne pas car "refersto" ne renvoie pas à ce qui apparait dans "Valeur" du gestionnaire de nom, mais renvoie à ce qui apparait dans la colonne "Fait référence à".
or, dans mon cas, dans le gestionnaire de nom, j'ai l'adresse du fichier d'origine qui apparait

Faudrait trouver un moyen pour aller chercher ce qu'il y a dans la colonne "valeur" du gestionnaire de nom

Julien
 

juicelink

XLDnaute Nouveau
J'ai trouvé !
et grâce à toi, merci !
en fait, même si j'ai une adresse vers l'ancien fichier dans la colonne "fait référence à" dans le gestionnaire de noms, à la fin de cette adresse, j'ai bien le #ref! aussi
donc plutôt que d'aller tester les 5 caractères de gauche comme tu l'as suggéré, je teste les 5 caractères de droite et ça fonctionne

VB:
Sub NettoieRefNoms()
Dim a As Name

For Each a In ActiveWorkbook.Names
    If Right(a.RefersTo, 5) = "#REF!" Then a.Delete
Next

End Sub

merci encore !
 

Discussions similaires