Excel VBA référence une feuille par codename

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?

3 réponses

  1. 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

    1. 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.

      1. 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

      2. Contributeur

        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
    2. 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.

      1. 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