Analyst Cave

Nov 24, 2021

ThisWorkbook fait référence au classeur dans lequel le code Excel VBA est en cours d’exécution. ActiveWorkbook d’autre part se réfère au classeur Excel qui a actuellement le focus, ce qui signifie est la fenêtre Excel faisant face à l’avant.

Souvent les développeurs Excel VBA mélangent ces deux types communs de classeurs dans VBA. Le problème commence à se poser lorsque vous travaillez dans plusieurs classeurs Excel en même temps et que, par accident, vous exécutez une macro depuis un classeur alors qu’un autre classeur Excel est actuellement actif. Cela peut avoir des effets désastreux si vous utilisez directement les propriétés Range ou Cell VBA.

Dans cet article, laissez-moi vous expliquer la différence distincte entre les objets Excel VBA ActiveWorkbook vs ThisWorkbook.

ActiveWorkbook

L’ActiveWorkbook n’est pas seulement le classeur visible comme beaucoup le pensent, car vous pouvez tout aussi bien avoir plusieurs classeurs ouverts et placés côte à côte. Cependant, un seul classeur Excel est considéré comme actif à un moment donné. Être actif est une propriété du haut de l’écran – seul le classeur dont la fenêtre est actuellement sélectionnée est considéré comme actif. Voir ci-dessous pour une définition précise

Application.ActiveWorkbook ou ActiveWorkbook dans Excel VBA:
Retournera l’objet Workbook qui représente le classeur dans la fenêtre active (la fenêtre du haut). La propriété ne renverra rien si la fenêtre Info ou la fenêtre du presse-papiers est la fenêtre active.

Excel VBA ActiveWorkbook exemple

'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")

ThisWorkbook

La propriété ThisWorkbook est beaucoup plus facile à comprendre car elle fait simplement référence au classeur Excel dans lequel le code VBA s’exécute. Pour la définition complète, voir ci-dessous:

Application.ThisWorkbook ou ThisWorkbook dans Excel VBA:
Retourne l’objet Workbook qui représente le classeur dans lequel le code macro VBA actuel s’exécute.

Exemple d’Excel VBA ThisWorkbook

'Returns the name of the Workbook which is executing this MacroDebug.Print ActiveWorkbook.Name'Get Sheet1 from the Workbook executing this MacroActiveWorkbook.Sheets("Sheet1")

ActiveWorkbook vs ThisWorkbook

Si vous êtes toujours confus sur la différence entre ces deux propriétés voir ci-dessous:

À gauche le classeur Excel est visible et est l’application la plus en avant. Dans ce cas, si vous exécutez une macro dans ce classeur, la propriété ActiveWorkbook est la même que ThisWorkbook.

À droite, le classeur Excel n’est pas visible ou n’est pas l’application la plus en avant. Dans ce cas, si vous exécutez une macro dans ce classeur, la propriété ActiveWorkbook représente le classeur de gauche et ThisWorkbook représente le classeur de droite.

J’espère que c’est clair maintenant !

Conclusions

Maintenant que vous pouvez distinguer ces deux propriétés, il est important de garder quelques choses à l’esprit :

  • Au quotidien, utilisez ThisWorkbook plutôt que ActiveWorkbook, plus erroné, lorsque vous vous attendez à ce que votre code s’exécute sur le même Workbook que celui sur lequel vous travaillez
  • Utilisez ActiveWorkbook avec précaution, car c’est une propriété située en haut de l’écran, elle ne renverra pas toujours une propriété si d’autres fenêtres pop-up Excel seront impliquées. Bien que vous puissiez avoir besoin de la propriété ActiveWorkbook lorsque vous travaillez avec des AddIns Excel (qui exécutent du code sur le Workbook actif et non sur votre AddIn)

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.