Beaucoup de rattrapage ! Vous avez des ressources nocturnes ! (il est vrai qu'on était rendu au matin chez moi, et le le matin je dors...)
Lu en diagonale, mais :
- L'insertion doit être de même taille que la copie...
- Si l'insertion ne concerne pas une ligne entière ou une colonne entière, le paramètre shift doit toujours être indiqué :
xlShiftDown ou xlShiftToTight (même valeur que xlDown que continue à mettre l'enregistreur, Microsoft a revu et augmenté les énumérations de constantes en gardant les anciennes pour compatibilité...)
Inutile de nommer les arguments, surtout quand c'est le premier : de façon générale, ne pas les nommer est plus pratique et raccourcit les commande, ils doivent être indiqués dans l'ordre, en n'omettant pas l'emplacement vide de ceux que l'on omet ; les nommer est utile quand il y en a beaucoup et qu'on ne les utilise jamais tous ou dans le désordre ou qu'il y aurait ambiguïté à la lecture (cas pour le Tri, le Filtrage, ou pour before/after lors d'une insertion ou copie de feuille...)
-CutCopyMode n'est jamais nécessaire (sauf dans 2 cas) : cette commande (avec =False) a pour effet de vider le presse-papier, or dans le cas d'un copier-coller ordinaire la première action qui suit a pour effet de le vider automatiquement (ce qui explique qu'on le retrouve presque toujours dans le code enregistré, car sans le vouloir ni le savoir l'utilisateur l'a fait) ; l'utilité est lorsqu'il n'y a pas d'action qui le vide, pour éliminer le scintillement de la zone copiée si elle reste en vue d'une part, et d'autre part si fermeture du classeur à la suite, éviter le message demandant si on veut ou pas le vider). En fait, lorsqu'on trouve cette commande dans du code enregistré, c'est qu'on n'en a pas besoin ; si elle n'y est pas, c'est qu'il est possible qu'elle soit utile !
Effectivement, la non qualification de Cells dans la désignation d'une plage peut amener l'interpréteur à ne pas savoir décider de quelle plage il s'agit.
Mais on ne peut pas écrire : Sheets("ASS").Range(.Cells(...), .Cells(...)) car le point devant Cells ne réfère à rien. Soit on passe à une désignation style A1, soit on utilise With :
With Sheets("ASS")
.Range(.Cells(...), .Cells(...))
End With
Bonne journée.