Excel VBA référence une feuille par codename

Fermé
Medestrac - 12 août 2022 à 14:39
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 - 12 août 2022 à 18:32

Bonjour,

J'ai un classeur "Ventes2022" avec une feuille "France 2022" sur laquelle je veux lire la cellule A1 depuis un autre classeur.

Etape 1: j'ouvre "Ventes2022" en lecture seule:

Set W_Vente = Application.Workbooks.Open(Chemin, ReadOnly:=True)

Etape 2: je lis ma cellule:

valeur = W_Vente.Sheets("France 2022").Range("A1").Value

Sauf que chaque année le nom de la feuille change. Alors que son "Codename" reste Feuil1

Dans le classeur W_Vente j'utilise toujours Feuil1.Range("A1".Value pour accéder à cette valeur...mais impossible de faire de même depuis un autre classeur:

valeur = W_Vente.Feuil1.Range("A1").value

renvoie une incompatibilité de type.

Comment faire référence depuis un autre classeur à une feuille dont le nom est susceptible de changer?

A voir également:

3 réponses

ozone_ Messages postés 1518 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 2 juin 2023 478
Modifié le 12 août 2022 à 15:02

Bonjour,

Pour faire référence à la première feuille d'un classeur alors il faut écrire :

valeur = W_Vente.Worksheets(1).Range("A1").value

0

Il me semble que cette notation fait référence à l'ordre des feuilles dans le classeur, ce qui n'est pas forcément figé. Ma Feuil1 "France2022" peut très bien être placé en troisième position dans le classeur.

0
ozone_ Messages postés 1518 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 2 juin 2023 478
12 août 2022 à 15:18

Effectivement si l'ordre vient à changer il y aura un problème !

Ce code ci ne fonctionne pas ?

valeur = W_Vente.Feuil1.Range("A1").value

Excel est peut être en langue anglaise ? 

A la place de Feuil1 y mettre Sheet1

0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
Modifié le 12 août 2022 à 18:32

bonjour, alors 

dim ws1 as worksheet
for each ws1 in W_Vente.Worksheets
    if ws1.codename="Feuil1" then
        valeur = ws1.Range("A1")
        break
    end if
next ws1
0

Malheureusement non...ni en anglais ni en français. Si je place le code dans le classeur vente et que je fais

valeur = Feuil1.Range("A1").value

j'obtiens un résultat correct...mais pas quand je le fais depuis un autre classeur.

0
ozone_ Messages postés 1518 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 2 juin 2023 478
12 août 2022 à 16:18

Est-il possible d'avoir un exemple de classeur ? (des classeurs ?)

Car la syntaxe est bonne pour moi et l'appel depuis un autre classeur ne devrait pas poser problème puisque celui ci a été déclaré via :

Set W_Vente = Application.Workbooks.Open(Chemin, ReadOnly:=True)

Et ensuite appelé avec :

valeur = W_Vente.Feuil1.Range("A1").value
0