Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bizarre

2 réponses
Avatar
Daniel.C
Bonjour.
Je ne sais pas quel autre sujet mettre. Le code suivant se trouve dans
la macro :
Private Sub Workbook_SheetChange
...
Var = Application.Match(Sh.Name, [List!A:A], 0)
If Not IsNumeric(Var) Then Exit Sub
Set Sh1 = Sh
t = Application.Index([List!B1:B500], Var)
*** Cette ligne est en erreur (incompatibilité de type
Set Sh2 = Sheets(Application.Index([List!B1:B500], Var))
*** Cette ligne fonctionne
Set Sh2 = Sheets(t)

Pourquoi ?
Merci d'avance.
Daniel

2 réponses

Avatar
michdenis
Bonjour Daniel,

Es-tu sûr que ce n'est pas une histoire de "Fully supported" ?
;-))

Pour ta problématique :

Application.Index([List!B1:B500], Var)) retourne un "Range", une cellule.
En fait, c'est la propriété "Value" que nous récupérons dans une variable
comme dans la ligne de code suivante :
T = Application.Index([List!B1:B500], Var)

(Oui, oui, ce n'est pas évident pour ceux qui utilisent cette fonction
abondamment dans des formules !!!

2 façons de corriger la ligne de code problématique :

Set sh2 = Sheets((Application.Index([List!B1:B500], Var).Value))
OU
Set sh2 = Sheets(Cstr(Application.Index([List!B1:B500], Var)))

Et pour démontrer ce que j'avance, exécute cette ligne de code :
a = TypeName(Application.Index([List!B1:B500], Var))
Avatar
Daniel.C
Bonjour Denis.
Tu as raison. Je n'aurais jamais pensé à ça... Même en lisant l'aide
VBA sur Index.
Merci.
Daniel

Bonjour Daniel,

Es-tu sûr que ce n'est pas une histoire de "Fully supported" ?
;-))

Pour ta problématique :

Application.Index([List!B1:B500], Var)) retourne un "Range", une cellule.
En fait, c'est la propriété "Value" que nous récupérons dans une variable
comme dans la ligne de code suivante :
T = Application.Index([List!B1:B500], Var)

(Oui, oui, ce n'est pas évident pour ceux qui utilisent cette fonction
abondamment dans des formules !!!

2 façons de corriger la ligne de code problématique :

Set sh2 = Sheets((Application.Index([List!B1:B500], Var).Value))
OU
Set sh2 = Sheets(Cstr(Application.Index([List!B1:B500], Var)))

Et pour démontrer ce que j'avance, exécute cette ligne de code :
a = TypeName(Application.Index([List!B1:B500], Var))