Référence à une feuille par codename

Résolu
Bonjour,

J'ai un classeur contenant 3 feuilles "Entrée2021", "Sortie2021", "Bilan2021" et d'autres feuilles.
Ce classeur est réutilisé chaque année en renommant les feuilles 2021 en 2022.

J'ai un code à répéter sur ces 3 feuilles. Je ne peux pas utiliser leur nom car il change chaque année. J'aurais donc voulu utiliser leur "codename". Quelque chose du genre:
Feuilles = array("Feuil1", "Feuil4", "Feuil8")
For each F in Feuilles
F.range("A1") = "blabla"
Next F


Ce qui ne marche évidemment pas... une idée?

Configuration: Windows / Firefox 97.0

3 réponses

  1. Contributeur
    bonjour,
    peut-être
    Feuilles = array("Feuil1", "Feuil4", "Feuil8")
    For each F in Feuilles
        sheets(F).range("A1") = "blabla"
    Next F

    ou
    dim F as worksheet, nom as string
    Feuilles = array("Feuil1", "Feuil4", "Feuil8")
    For each nom in Feuilles
        set F = sheets(nom)
        F.range("A1") = "blabla"
    Next F
    1. Bonjour,

      Le problème est que le "nom" de la feuille est différent. Dans l'éditeur VBA -> Propriétés d'une feuille il y a une ligne "(Name)" qui chez moi est "Feuil1" et une ligne "Name" qui chez moi est "Entrée 2021".
      Pour écrire sur cette feuille je peux faire soit
      Feuil1.range("A1") = "blabla"
      soit
      Sheets("Entrée 2021").range("A1") = blabla

      Mais le code suivant ne marche pas:
      nom = "Feuil1"
      sheets(nom).range("A1") = "blabla"


      car nom ne correspond pas à la propriété name de la feuille mais à la propriété (name)...ce qui n'est pas pareil.
      1. Contributeur
        Ce sont des variables, pas des noms.
        Tu l'utilises comme une variable quand tu fais
        Feuil1.range("A1") = "blabla"
        .
        Tu peux créer un tableau avec les valeurs de ces variables:
        Feuilles = array(Feuil1, Feuil4, Feuil8)
      2. Contributeur
        si tu veux le nom, fais
        nom=Feuil1.name
    2. nom = "Feuil1"
      nom.range("A1")= "blabla"
      renvoi une erreur tandis que
      Feuil1.range("A1") = "blabla"
      fonctionne correctement

      La solution dans mon cas est effectivement d'utiliser la propriété name de la manière suivante:
      Feuilles = Array(Feuil1.name, Feuil4.name, Feuil8.name)
      For each F in Feuilles
      worksheets(F).Range("A1")= "blabla"
      Next


      Merci du coup de main
      1. Contributeur
        beaucoup plus simple:
        Feuilles = Array(Feuil1 , Feuil4 , Feuil8)
        For each F in Feuilles
            F.Range("A1")= "blabla"
        Next