Excel VBA référence une feuille par codename
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?
- Excel VBA référence une feuille par codename
- Liste déroulante excel - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Excel trier par ordre croissant chiffre - Guide
- Déplacer une colonne excel - Guide
- Word et excel gratuit - Guide
3 réponses
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
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.
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.
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