IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment attribuer des feuilles spécifiques à une variable Sheets? [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 180
    Points : 92
    Points
    92
    Par défaut Comment attribuer des feuilles spécifiques à une variable Sheets?
    Bonjour,

    Je souhaite utiliser une variable de type Sheets afin de lui attribuer différentes références d'objets Worksheet.

    C'est ce que je fais couramment avec les codes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Set FlsSel = ActiveWindow.SelectedSheets
            If FlsSel.Count = 1 Then Set Fls = Worksheets Else Set Fls = FlsSel
    Maintenant, comment attribuer des feuilles spécifiques à la variable publique Fls?

    L'idée est ensuite de boucler dessus.

    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fls.add Workbook.Sheets("nom de la feuille")
    Ça marche si j'utilise la variable Fls en tant que collection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Fls = New Collection
    Mais étant donné que l'objet Sheets est une collection (documentation Microsoft ici), comment se fait-il que ça ne fonctionne pas si Fls est de type Sheets?

    Ça ne marche pas non plus en instanciant Fls en tant que Sheets: Vos lumières sont les bienvenues !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Dédé6221

    Je n'ai pas tout compris, mais une fois la variable définit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Fls in ThisWorkbook.Sheets
    Msgbox "Feuille : " & Fls.Name
    Next Fls
    A+

  3. #3
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 180
    Points : 92
    Points
    92
    Par défaut
    Je n'ai sans doute pas été suffisamment clair, mais la variable Fls est une variable de type Sheets et non une variable de type Worksheet.

    Pour l'objet Worksheet, j'utilise la variable Fl, comme dans:
    Le but est de pouvoir utiliser la boucle ci-dessus, mais en ayant une collection Fls de feuilles bien définies, qui ne sont pas l'ensemble des feuilles d'un classeur (ActiveWorkbook.Sheets) ou l'ensemble des feuilles sélectionnées (ActiveWorkbook.SelectedSheets).

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re,

    Pour info : Worksheet représente une feuille de calcul, alors que Sheet représente n'importe quelle feuille, quel que soit son type
    Donc Sheet et Worksheet peuvent être utilisées de la même façon (ou presque)

    Et non je ne comprends pas votre logique, s'il y en a une 🤔

    Que voulez-vous faire exactement, un fichier ne serait pas plus simple pour comprendre ?

    A+

  5. #5
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 180
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par BrunoM45 Voir le message
    Pour info : Worksheet représente une feuille de calcul, alors que Sheet représente n'importe quelle feuille, quel que soit son type
    Donc Sheet et Worksheet peuvent être utilisées de la même façon (ou presque)
    Pardon, mais je ne vois pas très bien en quoi cela s'applique à ma question.
    Pourriez-vous préciser?

    Citation Envoyé par BrunoM45 Voir le message
    Et non je ne comprends pas votre logique, s'il y en a une 🤔

    Que voulez-vous faire exactement, un fichier ne serait pas plus simple pour comprendre ?
    J'ai développé ma problématique sur deux messages. Est-ce qu'il y a un point précis qui n'est pas clair?
    Je n'ai pas pour habitude d'envoyer des fichiers. Trop risqué.

    Merci de votre aide en tous les cas.

    PS: Sauf erreur, Sheet n'existe pas en VBA.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    On peut définir une variable feuille comme étant un WorkSheet

    Nom : 2022-10-04_14h47_20.png
Affichages : 197
Taille : 2,0 Ko

    On ne peut pas le faire avec Sheet
    Nom : 2022-10-04_14h48_12.png
Affichages : 205
Taille : 1,5 Ko

    Sheets ne sert qu'a travailler sur une collection de feuille
    https://learn.microsoft.com/fr-fr/of...i/excel.sheets



    A+

  7. #7
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 180
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par BrunoM45 Voir le message
    On ne peut pas le faire avec Sheet, ou seulement pour une collection de feuilles avec Sheets
    C'est bien à la collection Sheets à laquelle je fais référence dans mon premier message.
    Si vous ne comprenez pas ma question, peut-être qu'il vaut mieux laisser d'autres y répondre.

    Cordialement

  8. #8
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 481
    Points : 2 261
    Points
    2 261
    Par défaut
    Bonjour,
    il ne faut pas confondre entre l'objet collection qui est une classe mis à disposition pour que tu puisses instancier tes propre objets, et une collection mis à disposition par Excel vba ! la méthode add de l'objet Sheets ajoute un nouveau classeur dans Excel la méthode New de la classe Sheets est réservé à Microsoft!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim Sheet As New Collection
    Sub test()
    Sheet.Add Sheets("Feuil1"), "Feuil1"
    Sheet.Add Sheets("Feuil2"), "Feuil2"
    Sheet("Feuil2").Select
     
    Sheet.Add  Sheets.Add
     
    For i = 1 To Sheet.Count
        Sheet(i).Select
    Next
    For Each Sh In Sheet
        Sh.Select
    Next
     
     
    End Sub

  9. #9
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 180
    Points : 92
    Points
    92
    Par défaut
    Bonjour,

    Merci pour ce point théorique.

    Citation Envoyé par Thumb down Voir le message
    il ne faut pas confondre entre l'objet collection qui est une classe mis à disposition pour que tu puisses instancier tes propre objets, et une collection mis à disposition par Excel vba !
    Je maîtrise mal la notion de classe. J'imagine seulement qu'il s'agit d'un type d'objet avec ses propriétés et ses méthodes, soit préexistante dans VBA, soit créée par l'utilisateur.

    Mais si je comprends bien, Sheets et Collection sont deux classes préexistantes ; et tandis que Sheets ne permet pas d'instancier mes propres objets, Collection le permet.

    Aussi, une variable de type Sheets ne permettrait d'instancier que des objets bien précis, soit :

    • toutes les feuilles du classeur : Set Fls = ActiveWorkbook.Sheets
    • toutes les feuilles sélectionnées : Set Fls = ActiveWindow.SelectedSheets
    • toutes les feuilles de calcul du classeur : Set Fls = ActiveWorkbook.Worksheets
    • toutes les feuilles de graphique du classeur : Set Fls = ActiveWorkbook.Charts

    Et c'est tout ...?

    Ainsi, il n'est pas possible d'alimenter une variable de type Sheets avec des feuilles particulières.
    Il vaut mieux passer par une collection.

    Est-ce que j'ai bien compris?

    P.S.: Après essai, la méthode Sheets.add crée une feuille avant la feuille active.

  10. #10
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 481
    Points : 2 261
    Points
    2 261
    Par défaut
    Bonjour,
    Si tu veux un objet qui collecte que les feuilles qui t'intéresse utilises l'objet collection dim collec as New collectionL'objet Sheets collecte les onglets ouvert par Excel
    Excel a très certainement utiliser l'objet collection pour son propre compte ?????

    Pour ce qui concerne Sheets tu peux préciser avant ou après telle onglet !
    Sheets.Add Before/After:="Feuil4"

  11. #11
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 180
    Points : 92
    Points
    92
    Par défaut
    Il me semble qu'on est bien d'accord.

    Ok, merci !

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 939
    Points : 28 936
    Points
    28 936
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour info, on peut également boucler sur des feuilles spécifiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
      Dim sht As Worksheet
      For Each sht In Sheets(Array("2020", "2021", "2022"))
       Debug.Print sht.CodeName
      Next
      Set sht = Nothing
    End Sub
    et donc également utiliser une variable représentant la collection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub t()
      Dim sht As Worksheet
      Dim shts As Sheets
      Set shts = Sheets(Array("2020", "2021", "2022"))
      For Each sht In shts
       Debug.Print sht.CodeName
      Next
      Set sht = Nothing: Set shts = Nothing
    End Sub

  13. #13
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 481
    Points : 2 261
    Points
    2 261
    Par défaut
    Bien vu Philippe

  14. #14
    Invité
    Invité(e)
    Par défaut
    Re,

    Oui, merci Philippe de l'explication par code de ce que j'avais dis ici 😉
    https://www.developpez.net/forums/d2.../#post11880164

    Il faut parfois mettre les points sur les i et la barre aux T

  15. #15
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 180
    Points : 92
    Points
    92
    Par défaut
    Bonjour,

    Assez génial, merci !

    Le réponse est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim Fls as Sheets
        Dim Fl as Worksheet
    
        Set Fls = ActiveWorkbook.Sheets(Array("Feuil8", "Feuil27"))
    
    For Each Fl In Fls
        code 
    Next Fl

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Attribuer un format spécifique à une variable Long
    Par Djef Ray dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/04/2019, 13h52
  2. [FAQ] Comment attribuer à des objets un onclick faisant appel à une variable de boucle ?
    Par Watilin dans le forum Contributions JavaScript / AJAX
    Réponses: 1
    Dernier message: 09/12/2017, 16h48
  3. Comment modifier des listes dans une feuille avec une textbox
    Par debutant033 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 23/03/2017, 09h19
  4. Réponses: 4
    Dernier message: 15/08/2007, 22h05
  5. comment créer des boutons sur une feuille en utilisant eclipse
    Par ratamahatta dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/06/2006, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo