Articles

excel-vba Quand utiliser ActiveWorkbook et ThisWorkbook

Exemple

C’est une bonne pratique VBA de toujours spécifier à quel classeur votre code VBA fait référence. Si cette spécification est omise, alors VBA suppose que le code est dirigé vers le classeur actuellement actif (ActiveWorkbook).

'--- the currently active workbook (and worksheet) is impliedRange("A1").value = 3.1415Cells(1, 1).value = 3.1415

Cependant, lorsque plusieurs classeurs sont ouverts en même temps — particulièrement et surtout lorsque le code VBA est exécuté à partir d’un complément Excel — les références au ActiveWorkbook peuvent être confondues ou mal dirigées. Par exemple, un add-in avec un UDF qui vérifie l’heure du jour et la compare à une valeur stockée sur l’une des feuilles de calcul de l’add-in (qui ne sont généralement pas facilement visibles par l’utilisateur) devra identifier explicitement quel classeur est référencé. Dans notre exemple, notre classeur ouvert (et actif) a une formule dans la cellule A1 =EarlyOrLate() et n’a PAS de VBA écrit pour ce classeur actif. Dans notre complément, nous avons la fonction définie par l’utilisateur (UDF) suivante :

Public Function EarlyOrLate() As String If Hour(Now) > ThisWorkbook.Sheets("WatchTime").Range("A1") Then EarlyOrLate = "It's Late!" Else EarlyOrLate = "It's Early!" End IfEnd Function

Le code de l’UDF est écrit et stocké dans le complément Excel installé. Il utilise des données stockées sur une feuille de calcul du complément appelée « WatchTime ». Si l’UDF avait utilisé ActiveWorkbook au lieu de ThisWorkbook, alors il ne serait jamais en mesure de garantir quel classeur était destiné.

.

Laisser un commentaire

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