Comme indiqué dans les commentaires, on ne peut pas sélectionner Sheets
dans VBA qui ne sont pas actifs (ou Range
sur eux).
Par exemple, le code suivant
Sheets(1).Activate
Sheets(2).Range("A1").Select
provoquera l'erreur que vous recevez.
Dans votre cas, il semble que vous essayez de Select
une feuille qui n'est pas active - votre mainWS
n'est vraisemblablement pas l'objet ActiveSheet
au moment où vous appelez ce code. Un moyen facile de tester si cela se produit est d'ajouter ce qui suit à la fin de votre code :
if (ActiveSheet.Name <> mainWS.Name) then
msgbox ("Going to crash after clicking ok!")
end if
mainWS.Select
Notez que vous pouvez vous référer à la feuille de travail activée avec la commande ActiveSheet
pour obtenir des propriétés ou toute autre opération que vous souhaitez effectuer.
Cette erreur peut également se produire si vous avez parcouru en boucle toutes les feuilles de calcul du classeur et qu'il existe des feuilles cachées. Faites attention à cela.
Enfin, et sans rapport avec votre message d'erreur spécifique, je suppose que vous déclarez ces variables quelque part et que vous ne les avez tout simplement pas copiées ici - si ce n'est pas le cas, j'envisagerais d'utiliser Option Explicit
car vous pouvez souvent rencontrer toutes sortes de problèmes sans avoir Option Explicit
en haut de votre code VBA.