Je veux dire réfléchir spécifiquement par rapport à ce principe d'un petit nombre de variables globales Private, c'est à dire conservées et partagées par toutes les procédures de l'UserForm. LCou As Long, surtout: le numéro dans la base de la ligne en cours de modification, VLgn() As Variant: les valeurs de la ligne en cours de modification ou de création, TLgn() As Long: une table de numéros de lignes éventuellement, si plusieurs doivent pouvoir être réaccédés (cas d'une ListBox par exemple)
Donc raisonner selon une indépendance totale des différentes procédures les une par rapport aux autres, qui ne s'appuieront toutes, de leurs façon particulières qui leur est propre, que sur ces quelques variables spécifiques là. Et quand même un truc connu partout aussi qui s'appelera CL.PlgTablo et sera un objet Range représentant la plage de cellules couvrant les lignes entières de la totalité de la base. Et donc du coup bien évidemment CL.PlgTablo.Rows(LCou) la plage représentant la ligne en cours de modification, etc. C'est toute une gymnastique basé sur un principes conceptuel de départ, faut y adhérer tête baissée en toute confiance. J'ai réalisé beaucoup d'UserForm de mise à jour tous basés sur ce principe, dans des classeurs nommés CBxLiéesPseudoDuDemandeur.xlsm joints dans de nombreuses discussions.