Recherche de "nom" utilisés dans la validation de données

Bonjour et bonne année

Je me retrouve avec un gros fichier excel qui contient plus de 1200 noms. (ce n'est pas le fichier joint)

Je veux faire du nettoyage et supprimer les noms non utilisés.

Je me suis fait un code à base de la formation find() qui me permet de trouver tous les noms utilisés dans une formule excel classique.

mon problème est que cette fonction ne m'indique pas les noms utilisé dans le cadre de la validation de données. ( par exemple liste de choix )

Est ce que vous auriez une solution pour trouver ces noms là.

Dans le fichier joint (fichier dédié à la validation), mon code actuel trouve bien des noms utilisé dans les cases ( ie dans les formules ) mais pas l'utilisation du nom " liste_1" qui est défini dans l'onglet "page 1" mais utilisé dans des validations de données en onglet "test_3" ( cases jaunes)

Voilà, pour moi, ma demande à l'air clair car je l'ai en tête et j'y travaille dessus, si c'est pas clair, n'hésitez pas à me le dire.

Merci de votre aide.

Christophe

13test-valid-nom.xlsx (10.65 Ko)

Bonjour,

Je ne suis pas sûr de bien saisir mais c'est peut être ça que tu veux ?

MsgBox Range("H11").Validation.Formula1

Bonjour Theze,

merci de ta réponse, mais non, je ne pense pas que c'est cela.

j'ai copié ton code, et j'ai une erreur, mais au final, je pense que ton code va me renvoyer la formule associée à la validation de donnée.

Si j'ai un fichier avec 20 ou 30 onglets, et des milliers de ligne, il me semble peut difficile de rcuperer puis tester, case par case, les formules de validation de donnée.

C'est pour cela que la fonction find() est très appropriée pour rechercher les "nom" dans les cases .. mais malheureusement pas dans la validation de données.

moi, mon code me renvoi ( pour l'instant en tableau mais à terme, bien écrit , bien propre dans une feuille ) quelque chose comme cela :

il y a 4 "nom" dans le fichier excel :

le nom : "nom_qui_n_est_pas_utilise" n'est pas utilisé

le nom : "nom_utilise_test_4" est utilisé au moins une fois dans l'onglet "Test_4"

le nom : "non_utilisé" n'est pas utilisé,

le nom : "utilise_en_page_2" est au une fois utilisé dans l'onglet "page_2"

[ actuellement mon code dit : ]

le nom : "liste_1" n'est pas utilisé, [ effectivement car je base mon programme sur la fonction find() et que liste_1 n'est écrit nul par dans une formule où une valeur ]

[ j'aimerai que mon code dise ]

le nom : "liste_1" est pas utilisé [ie ne pas le supprimer ]

j'espére avoir été plus compréhensible.

Christophe

en complément du message ci dessus :

voici ce que me sort ma macro actuelle basé sur la fonction find() ( ci dessous le coeur de la macro )

      For Each Nms In Names
            If onglet.Cells.Find(What:=Nms.Name, _
                                After:=ActiveCell, _
                                LookIn:=xlFormulas, _
                                LookAt:=xlPart, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, _
                                MatchCase:=False, _
                                SearchFormat:=False) Is Nothing Then
                    ' "nom" non trouvé
                    Tab_nom_utilise(i, j) = "FAUX"
            Else
                    ' "nom" trouvé
                    Tab_nom_utilise(i, j) = "VRAI"
            End If   'If onglet.Cells.Find(
            i = i + 1
       Next Nms 'For Each Nms In Names

et voila le résultat , et moi j'aimerai trouver dans la colonne du nom "liste_1" , un VRAI en "test_3"

tmp

La fonction (ou méthode) Find() parcourt toutes les cellules de la plage parent mais comme c'est du code compilé (langage machine) c'est bien plus rapide que le code interprété de VBA (lu ligne par ligne).

Tu peux parcourir seulement les cellules ayant une liste de validation ça sera de fait plus rapide que de toutes les passer en revue :

Sub Test()

    Dim Fe As Worksheet
    Dim Cel As Range

    Set Fe = ActiveSheet

    For Each Cel In Fe.Cells.SpecialCells(xlCellTypeAllValidation)

        Debug.Print Cel.Address(0, 0)

    Next Cel

End Sub

Bonsoir,

ci-jointe proposition

Yes ! Yes ! Yes !

bon, j'ai pas intégré tout ton code dans le mien, mais les tests que j'ai fait dessus fonctionne bien, je sent la solution super proche.

C'est trop cool,

Merci, merci , merci, Theze

Merci aussi à Thev, ton code est intéressant, car en testant la réponse de Theze, je me suis dit qu'il fallait tester les noms dans les noms ...

je vais faire une macro avec vos 2 solutions,

merci, merci , merci

Rechercher des sujets similaires à "recherche nom utilises validation donnees"