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 :

nom et index des feuilles [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut nom et index des feuilles
    Bonjour la communauté,

    J'ai beau chercher je ne trouve nulle par un code VBA me permettant de lister dans une feuille, les noms de mes feuilles en colonne A et l'index de ces memes feuilles en colonnes B. J'ai un classeur de plus de 300 feuilles et mes macros sont basées sur les index de mes feuilles. Cela me permet de modifier le nom de mes feuilles sans pour autant aller remodifier mes macros.

    Quelqu'un aurait il un code sous la main.
    Le seul code que j'ai trouvé me liste en colonne A le nom de mes feuilles par ordre alphabétique mais pas les N° d'index associés.

    Cordialement,
    Graphikris.

  2. #2
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 179
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    un essai
    ça écrit la liste des feuilles à partir de la cellule sélectionnée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ListFeuil()
    Dim Tablo(), i As Long
        ReDim Tablo(1 To Sheets.Count, 1 To 2)
        For i = 1 To Sheets.Count
            Tablo(i, 1) = Sheets(i).Name
            Tablo(i, 2) = i
        Next
        ActiveCell.Resize(UBound(Tablo, 1), 2).Value = Tablo
    End Sub

  3. #3
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Bonjour et merci pour ta reponse rapide mais ca me donne la liste des noms des feuilles mais les N° ne correspondent pas aux vrais N° d'index des feuilles que l'on voit dans "Visual Basic".

  4. #4
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 179
    Billets dans le blog
    2
    Par défaut
    Re,

    Sinon pour éviter le problème des noms des feuilles on peut utiliser le CodeName plutôt que le nom de l'onglet

    Dans les propriété d'une feuille, le Name est le nom de l'onglet, le (Name) entre parenthèses est le CodeName
    Le CodeName ne peut pas contenir d'espace

    L'appel des feuille ne se fait plus du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Activate
    (ici avec le Name)
    mais
    (ici avec le CodeName)

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 179
    Billets dans le blog
    2
    Par défaut
    Re,

    Dis-moi où tu vois ces numéros d'index dans Visual Basic

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme l'a écrit dans un post précédent tototiti2008, que je salue au passage, la façon la plus sûre de gérer les feuilles d'un classeur excel, c'est le CodeName
    J'ai écrit deux billets sur ce sujet

    Si ce que vous appelez l'index d'une feuille, c'est par exemple Worksheets(1), oubliez vite cette façon de faire car le numéro dépend de sa position dans le classeur en partant de la gauche. Il suffit que l'utilisateur déplace sa feuille pour que ce soit la catastrophe.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Comme l'a écrit dans un post précédent tototiti2008, que je salue au passage, la façon la plus sûre de gérer les feuilles d'un classeur excel, c'est le CodeName
    J'ai écrit deux billets sur ce sujet

    Si ce que vous appelez l'index d'une feuille, c'est par exemple Worksheets(1), oubliez vite cette façon de faire car le numéro dépend de sa position dans le classeur en partant de la gauche. Il suffit que l'utilisateur déplace sa feuille pour que ce soit la catastrophe.
    Merci pour votre reponse. Pour ma part, j'ai une macro qui classe les feuilles de gauche a droite par ordre alphabetique.

  8. #8
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    en exemple un classeur de 4 feuilles qui ont été renommées. Je voudrais que dans la feuille 5 apparaisse en colonne A le nom des feuilles par ordre alphabetique et en colonne B leur Index
    Nom : Image1.png
Affichages : 70
Taille : 4,5 Ko
    Ce qui ferait :
    Nom : Image2.png
Affichages : 66
Taille : 10,4 Ko

  9. #9
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 179
    Billets dans le blog
    2
    Par défaut
    Re,
    Bonjour Philippe,

    Ma macro devrait faire ce que tu demande, si ce n'est que les noms des feuilles ne sont pas triés
    mais comme
    Pour ma part, j'ai une macro qui classe les feuilles de gauche a droite par ordre alphabetique
    ça ne devrait pas poser de soucis, je suppose ?

    Et en effet, je plussoie la remarque de Philippe, c'est source d'erreur de chercher les feuilles en fonction de leur numéro d'index, qui n'indique que la position des feuilles dans le classeur

  10. #10
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Re,
    Bonjour Philippe,

    Ma macro devrait faire ce que tu demande, si ce n'est que les noms des feuilles ne sont pas triés
    mais comme


    ça ne devrait pas poser de soucis, je suppose ?

    Et en effet, je plussoie la remarque de Philippe, c'est source d'erreur de chercher les feuilles en fonction de leur numéro d'index, qui n'indique que la position des feuilles dans le classeur
    Pour ma part ce ne fonctionne pas.

  11. #11
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 179
    Billets dans le blog
    2
    Par défaut
    Re,

    Si tu n'explique pas ce qui ne fonctionne pas, ce que ça donne et en comparaison, ce que ça devrait donner, je ne vois pas comment corriger

  12. #12
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Re,

    Si tu n'explique pas ce qui ne fonctionne pas, ce que ça donne et en comparaison, ce que ça devrait donner, je ne vois pas comment corriger
    Dans mon exemple ci dessous, j'ai supprimé la feuille 1 puis dans la feuille nommée vba, j'ai déclenché ta macro et là on s'aperçois qu'il y a pas la meme numerotation que dans le projet vba. avec ta macro la feuille calcul a lae N° 1 alors que dans le projet vba, elle a le N° 2
    Nom : Image3.png
Affichages : 68
Taille : 27,4 Ko

  13. #13
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 179
    Billets dans le blog
    2
    Par défaut
    Re,

    Oui mais en VBA, si tu écris

    ça pointera bien sur Calculs, même si son CodeName est Feuil2

    si tu veux le CodeName des feuilles, tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ListFeuil2()
    Dim Tablo(), i As Long
        ReDim Tablo(1 To Sheets.Count, 1 To 2)
        For i = 1 To Sheets.Count
            Tablo(i, 1) = Sheets(i).Name
            Tablo(i, 2) = Sheets(i).CodeName
        Next
        ActiveCell.Resize(UBound(Tablo, 1), 2).Value = Tablo
    End Sub

  14. #14
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 509
    Par défaut
    Bonjour à tous,
    On peut concaténer le nom et son index, puis faire un tri...
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Function GetSortedSheets() As Variant
     
        ReDim sheetInfo(1 To ThisWorkbook.Sheets.Count)
     
        ' Parcourir toutes les feuilles et stocker leur nom et index
        Dim i As Long
        i = 1
        Dim ws As Worksheet
        For Each ws In ThisWorkbook.Sheets
            ' Utiliser un séparateur unique pour stocker les deux informations
            sheetInfo(i) = ws.Name & "|" & ws.Index  ' Index basé sur 0 pour être cohérent avec d'autres langages
            i = i + 1
        Next ws
     
        ' // On tri les feuilles
        For i = LBound(sheetInfo) To UBound(sheetInfo) - 1
            Dim j As Long
            For j = i + 1 To UBound(sheetInfo)
                ' // Comparer les noms des feuilles (avant le séparateur "|")
                If Left(sheetInfo(i), InStr(sheetInfo(i), "|") - 1) > Left(sheetInfo(j), InStr(sheetInfo(j), "|") - 1) Then
                    ' // Échanger les éléments si l'ordre est incorrect
                    Dim temp As String
                    temp = sheetInfo(i)
                    sheetInfo(i) = sheetInfo(j)
                    sheetInfo(j) = temp
                End If
            Next j
        Next i
     
        ' // Préparer le tableau final pour le résultat (Nom, Index)
        Dim resultArray() As Variant
        ReDim resultArray(1 To UBound(sheetInfo), 1 To 2) ' Deux colonnes : Nom et Index
     
        ' // Remplir le tableau final avec les données triées
        For i = LBound(sheetInfo) To UBound(sheetInfo)
            Dim parts As Variant
            parts = Split(sheetInfo(i), "|")
            resultArray(i, 1) = parts(0) ' Nom de la feuille
            resultArray(i, 2) = CInt(parts(1)) ' Index de la feuille (converti en entier)
        Next i
     
         GetSortedSheets = resultArray
     
    End Function
    Petit exemple d'utilisation. ATTENTION L'ECRITURE SE FAIT SUR LA FEUILLE ACTIVE.
    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
    18
    19
    Sub Test101()
        ' // Sélection de la feuille active pour renvoyer les infos
        With ActiveSheet
            .Columns("A:B").ClearContents
            .Cells(1, 1).Value = "Nom de la feuille"
            .Cells(1, 2).Value = "Index de la feuille"
            .Range("A1:B1").Font.Bold = True
     
            Dim sheetData As Variant
            sheetData = GetSortedSheets()
     
            If Not IsEmpty(sheetData) Then
                .Range("A2").Resize(UBound(sheetData, 1), UBound(sheetData, 2)).Value = sheetData
                .Columns("A:B").AutoFit
            Else
                MsgBox "Aucune information de feuille trouvée ou une erreur est survenue.", vbExclamation
            End If
        End With
    End Sub
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en :resolu: Vous avez aimé la discussion alors un :plusser: fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  15. #15
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Re,

    Oui mais en VBA, si tu écris

    ça pointera bien sur Calculs, même si son CodeName est Feuil2

    si tu veux le CodeName des feuilles, tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ListFeuil2()
    Dim Tablo(), i As Long
        ReDim Tablo(1 To Sheets.Count, 1 To 2)
        For i = 1 To Sheets.Count
            Tablo(i, 1) = Sheets(i).Name
            Tablo(i, 2) = Sheets(i).CodeName
        Next
        ActiveCell.Resize(UBound(Tablo, 1), 2).Value = Tablo
    End Sub
    Merci à toi, c'est vraiment ça que je voulais.

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

Discussions similaires

  1. récupérer nom des feuilles excel
    Par hector2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/04/2020, 12h19
  2. Réponses: 9
    Dernier message: 27/07/2007, 08h49
  3. [iReport] Export XL : personnaliser le nom des feuilles
    Par jtouille dans le forum iReport
    Réponses: 5
    Dernier message: 13/06/2007, 10h37
  4. Geler le nom des Feuilles Excel
    Par shadockgreg dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/11/2006, 18h41
  5. Comment remplir un ComboBox avec le nom des feuilles Excel ?
    Par libracom dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 27/06/2005, 15h14

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