Bizarre

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #21578451
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))
Daniel.C
Le #21578681
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))
Publicité
Poster une réponse
Anonyme