Excel VBA référence une feuille par codename

Medestrac -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -

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   Statut Membre Dernière intervention   478
 

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
Medestrac
 

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   Statut Membre Dernière intervention   478
 

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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

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
Medestrac
 

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   Statut Membre Dernière intervention   478
 

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