8 votes

La méthode Select de l'objet '_Worksheet' a échoué - pourquoi ?

Set mainWB = Workbooks("Copy Paste.xlsb")
Set mainWS = mainWB.Sheets("Sheet1")
Set testWS = mainWB.Sheets("Sheet3")

mainWS.Select

Je continue à obtenir une erreur sur la dernière ligne dans Excel VBA :

"La méthode Select de l'objet '_Worksheet' a échoué".

Une idée de la raison ou de la manière de résoudre ce problème ? Merci.

10voto

enderland Points 3624

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.

1voto

Louis Lac Points 865

Si je suis d'accord avec ce qui précède, il est également important de noter que la fonction Supprimer ne fonctionnera pas si la visibilité de la feuille de calcul est actuellement définie sur xlSheetVeryHidden.

1voto

Mark Points 148

J'ai eu le même problème et j'ai regardé cet article pour trouver des idées sur la façon de le résoudre. Mon problème a été résolu en utilisant "Activate" au lieu de "Select" sur la ligne où mon code échouait. Donc, au lieu d'utiliser "mainWS.Select", essayez d'utiliser "mainWS.Activate".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X