Excel VBA référence une feuille par codename

Medestrac -  
yg_be Messages postés 23437 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?

3 réponses

  1. ozone_ Messages postés 1823 Statut Membre 511
     

    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
  2. 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
    1. ozone_ Messages postés 1823 Statut Membre 511
       

      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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      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
  3. 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
    1. ozone_ Messages postés 1823 Statut Membre 511
       

      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