VBA lister onglet (votre avis) + 2 questions

Bonsoir à tous,

merci de prendre de votre temps pour me lire et d'essayer de m'aider. je poste plusieurs questions pour éviter de mettre trop sur le forum.

je vous adresse ce message car j'aurais voulu votre avis sur 3 choses.

je joins le fichier ci-dessous.

j'ai 11 feuilles sur mon ficher (à terme il devrait y en avoir 60)

je cherche à lister le nom des onglets sur ma feuille 1.

j'ai trouvé un code VBA sur le net.

ma première question est : ce code est-il correct ? (et donc pour vous fonctionne-t-il correctement ?)

Sub ListerToutesLesFeuilles()

Dim fc As Worksheet
Dim x As Integer

x = 1

Sheets("Feuil1").Range("A:A").Clear

For Each fc In Worksheets
Sheets("Feuil1").Cells(x, 1) = fc.Name
x = x + 1
Next fc

End Sub

ma seconde question est de savoir, si je pourrais commencer le listing de mes onglet en a2:a60 ? (la cellule a1 étant prévu pour mettre le nom de la colonne)

Enfin, ma troisième question est de savoir si une formule via la recherche pourrait se faire via la liste pour aller recherche une info sur les feuilles.

ici, je ne cherche pas à l'inclure dans le code vba car je pourrais changer la cellule de référence sur les feuilles 2 à 11.

mais via une formule à mettre dans la colonne 2 ?

je m'explique :

sur toutes les feuilles (sauf la feuille 1) j'ai en g2 un chiffre.

image

je cherche à savoir si via une formule, je pourrais avoir ce résultat en prenant en compte que si j'active la macro peut-être que le listing des feuilles pourrait changer.

image

exemple, si sur le listing des feuilles en vient une nouvelle (ex. feuil12).. les infos de la colonne b devront via la formule indiquer le bon chiffre

image image

un tt grand merci pour votre aide.

Ben

Bonjour ben25000,

Le code commençant à la ligne 2.

.Clear : supprime aussi les propriétés en plus des données.
.ClearContents : supprime seulement la valeur dans la cellule. Les formats sont conservés.

Sub ListerToutesLesFeuilles()
    Dim fc As Worksheet
    Dim x As Integer
    Dim ws As Worksheet

    ' Définir la feuille de travail cible
    Set ws = Sheets("Feuil1")

    ' Commencer à la ligne 2
    x = 2

    ' Effacer les anciennes données dans la colonne A, à partir de la ligne 2
    ws.Range("A2:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row).ClearContents

    ' Lister toutes les feuilles de calcul du classeur sauf "Feuil1"
    For Each fc In ThisWorkbook.Worksheets
        If fc.Name <> "Feuil1" Then
            ws.Cells(x, 1).Value = fc.Name
            x = x + 1
        End If
    Next fc
End Sub

Je reviens si je trouve pour la formule.

Bizz

Bonjour ben25000,

Cellule "B2" : =SI($A2="";"";INDIRECT("'" & $A2 & "'!$G$2"))

Puis, tirer vers le bas.

Bizz

Bonjour à tous,
bonjour Bizarre,

merci à vous pour votre aide, ça fait tjrs plaisir :-)

j'ai recréer un nouveau fichier avec votre proposition de vba et la formule.

j'ai affecté la macro au bouton rectangulaire ça a marché une fois et puis j'ai ajouté une feuille (feuil13) et là plus rien...

je joins le fichier pour voir si j'ai pas fait une connerie...

merci à vous.... :-)

Bonjour,

Voici une version dans laquelle la formule est insérée en colonne "B" par la procédure "lister les onglets".

Un clic sur le rectangle "lister les onglets" et le tout se met à jour, "Nom de feuille" et "Formule donnant le contenu de G2 de la feuille concernée".

Bizz

Bonjour,

Pas de variable inutile!

Sub ListerToutesLesFeuilles()
Dim fc As Worksheet
With Sheets("Feuil1")
    .Range("A1").Resize(, 2) = Array("Feuiles", "Colonne G")
    .Range(.Range("A2"), .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 1)).Clear
    For Each fc In Worksheets
        .Cells(.Rows.Count, "A").End(xlUp).Offset(1) = fc.Name
        .Cells(.Rows.Count, "A").End(xlUp).Offset(, 1) = fc.Range("G2")
    Next fc
End With
End Sub

Edite:

Sub ListerToutesLesFeuilles()
Dim fc As Worksheet
With Sheets("Feuil1")
    .Range("A1").Resize(, 2) = Array("Feulles", "Colonne G")
    .Range(.Range("A2"), .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 1)).Clear
    For Each fc In Worksheets
        .Cells(.Rows.Count, "A").End(xlUp).Offset(1) = fc.Name
'        .Cells(.Rows.Count, "A").End(xlUp).Offset(, 1) = fc.Range("G2")
        .Cells(.Rows.Count, "A").End(xlUp).Offset(, 1).FormulaLocal = "=" & fc.Name & "!G2"
    Next fc
End With
End Sub

Bonjour à tous,

Bonjour bizarre,

bonjour dysorthographie,

merci à tous les deux pour votre aide. (désolé de répondre seulement maintenant mais je suis un peu débordé de travail et vous prie de m'en excuser).

bizarre, merci pour votre proposition mais... pouvez-vous m'éclairer sur ce qui ne marchait pas dans le fichier qui faisait que la macro ne se faisait plus.

suis pas un expert en macro (loin de là) c'est donc juste pour comprendre. merci à vous.

dysorthographie, merci pour votre proposition c'est quoi la différence entre les deux codes proposer mais surtout c'est lequel le bon ?

merci à vous deux pour votre aide.

Ben

Bonjour ben25000, le fil, le forum,

Sans constater cela par soi-même, c'est bien difficile d'être affirmatif. Peut-être la formule placée manuellement en "B".

En revanche, le dernier code écrit : "Feuil1", le nom de l'onglet en colonne "A" et la formule en colonne "B"; cela à chaque feuille qu'il trouve dans le classeur (excepté "Feuil1" bien sûr.)

Bizz

Bonjour,

Dans le premier code je mets dans la colonne B la valeur de la cellule [G2] dans le deuxième code je mets dans la colonne B une formule qui récupère la valeur de la cellule [G2] c'est toi qui voit ce que tu préfères.

Bien évidemment je peux évincer la feuil1 du traitement.

merci à tous les deux pour vos retours.... :-)

Rechercher des sujets similaires à "vba lister onglet avis questions"