Bonsoir,
Grace à l'instruction TopLeftCell d'un shape on connait la cellule qui contient le coin supérieur gauche du shape.
Don cette ligne : Set Cel = ActiveSheet.Shapes(Application.Caller).TopLeftCell permet d'attribuer à la variable Cel le RANGE (CELLULE) correspondant que le shape "survole.
On peut connaitre également la cellule qui contient le coin inférieur droit avec l'instruction BottomRightCell.
Donc, vos zone de nom comprennent 6 cellules : 3 colonne sur 2 lignes. Les shapes boutons sont sur la droite de la zone et leur coin supérieur gauche se trouve sur la colonne 3 de la zone et la ligne 1, avec TopLeftCell on connait la cellule correspondante. de cette cellule il faut bien aller en colonne "-1" pour trouver le nom et en colonne "-1" et ligne "+1" pour connaitre le prénom, ceci grâce à l'instruction OffSet.
Mais pour connaitre cette cellule d'origine, il faut connaitre le shape qui a été cliqué. Un shape cliqué qui lance une macro peut être connu avec l'instruction Application.Caller qui peut être traduit par "qui vient d'être cliquer pour lancer le code".
Donc : SET = on attribue à Cel une variable représentant un RANGE la CELLULE contenant le coin supérieur gauche du SHAPE de la feuille active qui vient d'être cliqué (Caller)
Après je n'ai pas redessiner les boutons pour que... Les vôtres étaient déjà à ces positions (3 ième colonne ligne 1 des différentes zones) J'ai juste modifié les ActiveX (me semble-t-il) par des formes "images" avec un effet pour donner du relief.
L'avantage du Caller, permet en fonction de cette source de n'avoir qu'un code pour X boutons, mais il faut que l'action à mener soit compatible avec cette façon de faire. Application.Caller renvoie le nom du shape, donc on peut imaginer de type de nom de shapes et avec une Select Case on peut alors lancer différent type de code en fonction du bouton.
En espérant avoir été assez clair, si tel n'est pas le cas n'hésitez pas.
@ bientôt
LouReeD