Commençons au début : mettre des noms (à des cellules, à des plages de cellules et bien d'autres éléments est une faculté d'Excel bien pratique qui permet d'utiliser le nom à la place d'une référence qui peut parfois s'avérer longue. Et dans le cas où la référence varie, le nom ne variant pas, son utilisation demeure pérenne.
Au cas particulier de ta liste, si tu mets comme référence de ta liste de validation =ListeFiltrée (ou un autre nom de ton choix, si tu en as donné un autre), les données de liste filtrée peuvent changer, la longueur de la liste peut varier, mais le même nom correspondra toujours à la liste actuelle...
Pour les noms (en mettre, en supprimer, voir...) tu vas sur l'onglet Formules. Presque au milieu du ruban tu as l'icône Gestionnaire de noms (pour l'ouvrir). Pour ajouter un nom : Nouveau dans le gestionnaire, ou la commande Définir un nom à côté de l'icône.
Pour qu'un nom recouvre une référence dynamique (c'est à dire qui peut varier) : on utilise une fonction qui permet à Excel de recalculer la plage à chaque fois.
=DECALER(CellSupérieureGauchePlage;;;NBVAL(ColonnePlageToujoursServie);NbCols'ilyalieu)
On indique comme référence de plage décalée la cellule supérieure gauche (toujours la 1re cellule permettant de référencer une plage dans Excel). Les 2 vides qui suivent (=0) indiquent qu'on ne décale pas cette cellule, ni en lignes, ni en colonnes. L'argument suivant évalue le nombre de lignes de la plage dans une colonne dont on est sûr qu'il n'y aura aucun "vide" avec NBVAL (si tu nommes une plage à partir de la ligne 2, la ligne 1 étant réservée aux intitulés de champs, il faudra diminuer de 1 la valeur renvoyée par NBVAL qui aura compté cet intitulé). Enfin le nombre de colonnes (qu'on peut omettre s'il n'y en a qu'une) qu'on peut faire varier de façon analogue.
Dans ta base, il est souhaitable aussi de la nommer. Au cas particulier je n'ai nommé que la colonne que tu utilisais. Mais tu peux la nommer en entier, ou y mettre plusieurs noms selon les parties les plus utilisées. On peut de toute façon à partir d'un nom accéder à toute partie de la plage, voire une seule cellule, avec un décalage approprié (mais il est souhaitable de nommer les parties que tu utilises le plus fréquemment pour un accès direct avec le seul nom...). Si ta base est finie et ne variera pas, tu le peux nommer en plage fixe, sinon la référence dynamique est généralement la meilleure solution.
La Macro. D'abord, une macro c'est du texte, qu'on appelle code parce que chaque ligne représente une instruction ou une commande à exécuter. L'exécuteur est un interpréteur de commande, qui va la lire, et faire ce qui est écrit. Pour qu'il puisse la trouver, elle doit figurer sur une feuille texte particulière (pour que l'interpréteur la trouve) appelée Module. S'agissant simplement de texte, on peut aisément le copier là où il est, pour aller le coller dans un Module.
Ces opérations se passent dans l'éditeur VBA. On y accède par l'onglet Développeur (qu'il faut activer le cas échéant car il ne l'est pas par défaut), icône Visual Basic tout à fait à gauche (le raccourci clavier Alt+F11 permet d'y accéder dans toutes les versions d'Excel).
Une fois rendue dans l'éditeur tu verras dans un volet Projet à gauche, mention de ton classeur (et éventuellement des autres classeurs ouverts) avec une liste en dessous des objets qui le composent (feuilles de calcul et classeur lui-même tant que tu n'y a pas adjoins d'autres éléments). Un double clic sur le nom d'une feuille ou sur ThisWorkbook (le classeur) ouvre un module, celui qui est propre à l'objet, dans lequel on programme ou on peut insérer des macros particulières, dites évènementielles, car elles se lancent automatiquement lors de la survenance d'évènements spécifiques dans l'objet concerné (par exemple ouverture ou fermeture du classeur, changement de valeur d'une cellule ou déplacement de la sélection dans une feuille, etc.).
Les macros ordinaires se placent dans des modules standards. Lorsqu'il n'y en a pas, il convient d'en insérer : menu Insertion > Module ou Clic droit dans le volet Projet en regard du classeur et Insertion > Module.
Ayant inséré un tel module, tu peux y écrire ou y coller une macro.
La macro peut y être collée et ne réclamera que peu d'adaptation si tu es dans la même configuration. Seuls les noms de plage peuvent changer, c'est toi qui décides des noms que tu mets, et il suffit donc de mettre les bons dans la macro.
Celle-ci ne comporte que 2 lignes de commande (le With... End With sert à ne pas répéter le nom de la plage qu'on met à jour, qui interviendrait sinon 3 fois dans la 1re ligne et 1 fois dans la 2e). La première ligne de commande efface la liste antérieure, sous condition qu'il y plus d'une ligne dans la plage, comme déjà vu. La deuxième copie la liste dans la base après filtrage en ne prenant en compte que les cellules visibles, pour la coller à l'emplacement de la liste. Donc à part les noms, le reste ne devrait pas varier.
Tu peux sûrement te débrouiller avec ça, mais n'hésite pas à venir poser la question si tu as un doute.
Cordialement
Ferrand
Si tu as copié le bouton, il faut ensuite lui attacher la macro dans le classeur.
Pour le reste, si tu as adapté la constitution des noms à ton classeur, vérifie que cela correspond bien.
Aussi : ton classeur (avec macro) devra être enregistré en .xlsm.
Et il faut que tes paramètres autorisent l'exécution des macros.