Pour chaque feuille "TEST" et "TEST (2)", j'ai mis un code VBA (le même) dans le module de la feuille concernée :
On met un code VBA dans le module d'une feuille lorsqu'il s'agit d'une procédure événementielle : ici, comme le nom de la sub est Worksheet_SelectionChange, le code est exécuté en cas de changement de sélection dans la feuille "TEST" ; idem pour "TEST (2)".
Target est la sélection actuelle sur la feuille ; si elle contient plus d'une cellule, on sort ➯ on continue seulement si la sélection est une seule cellule. Si le n° de colonne est < 4 ou > 14 (donc à gauche de D ou à droite de N), on sort ➯ on continue seulement si la cellule de la sélection est une des colonnes D à N.
Sur le moment, je n'y ai pas pensé, mais j'aurai pu mettre ce test de n° de ligne (à toi de l'ajouter) :
If Target.Row < 11 or Target.Row > 188 Then Exit Sub ' sortie si n° de ligne au-dessus de 11 ou après 188
Inutile d'ajouter un test de ligne pour chaque double ligne qui sépare verticalement chaque tableau, car tes différentes fusions interdisent de saisir dans les cases vides ; exemples : A45 ; I46 ; J46 ; K46 ; L46 ; M46 ; N46 ; après ton futur ajout, on continue seulement si le n° de ligne de la sélection est bon :
Si la valeur de la cellule est une des 3 lettres c x o, alors on la met en majuscule (avec UCase$).
NB : une procédure événementielle qui concerne le classeur est placée dans ThisWorkbook.
dhany