Référence à une feuille par codename

Résolu
Medestrac -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    0
  2. Medestrac
     
    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.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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)
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      si tu veux le nom, fais
      nom=Feuil1.name
      0
  3. Medestrac
     
    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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      beaucoup plus simple:
      Feuilles = Array(Feuil1 , Feuil4 , Feuil8)
      For each F in Feuilles
          F.Range("A1")= "blabla"
      Next
      0