VBA comment exclure noms d'onglets dans une liste d'onglets

Bonjour,

Etant novice en VBA et en fouillant un peu partout, j'ai trouvé comment créer une macro qui me permet de faire la liste d'onglets dans ma feuille synthese. J'incorpore la liste dans un tableau de 19 lignes (question de mise en page ) et crée des feuilles de synthèses selon le nombre d'onglets afin des remplir les tableaux ...

Mais cela me liste tous les onglets, donc y a t il un moyen de lister qu'une partie ? Car je n'ai pas besoin dans la liste des onglets : page de garde, de mes onglets synthese (1,2,3 ....), de mes feuilles qui me servent de modèle (model 1, model 2 .... , tabouret, liste )

En résumé dans la liste d'onglets j'aurai besoin que ce qui se trouve entre ma dernière feuille de synthese (qui peut varier il peut en avoir 1 comme 16 ou plus ) et la première feuille qui me sert comme modèle

Voici le code de la macro que j'utilise

Sub Synthese()

    Dim Lig As Integer, i As Long, Col As Long
    Dim rg As Range
    Dim NomFeuille As String
    Dim Compteur As Integer

    Const MaxLignes As Integer = 19
    Set rg = Range("C14")
    Lig = rg.Row
    Col = rg.Column

    For i = 1 To Worksheets.Count
        If i Mod MaxLignes <> 0 Then
            Cells(Lig, Col) = Sheets(i).Name
            Lig = Lig + 1
        Else
            Application.DisplayAlerts = False
            Sheets("Synthese").Copy After:=ActiveSheet
            On Error Resume Next
        Do
          Err.Clear
          Compteur = Compteur + 1
          NomFeuille = "Synthese" & Compteur
          ActiveSheet.Name = NomFeuille
          ActiveSheet.Select
          Loop Until Err.Number = 0
        On Error GoTo 0

            Application.DisplayAlerts = True
            Cells(Lig, Col) = Sheets(i).Name
            Lig = rg.Row
            Col = Col

        End If

    Next i

End Sub

Afin de mieux comprendre voici le fichier avec des onglets fictifs et la macro qui me sert de test

Y aurait il une solution ?

Merci

Bonjour et bienvenue sur le forum

Essaie ça, en ajoutant les feuilles à exclure :

    For i = 1 To Worksheets.Count
        If Sheets(i).Name <> "model 1" And Sheets(i).Name <> "model 2" Then

            If i Mod MaxLignes <> 0 Then
                Cells(Lig, Col) = Sheets(i).Name
            ...
            ...
            End If
     End If
    next i

Bye !

Bonsoir gmb, Franck_DK59

Je n'ai rien compris à ton charabia

Pour t'aider : place le nom de tes feuilles à exclure dans un array

Sub Exclure_feuilles()
Dim a, w As Worksheet
a = Array("Feuil1", "Feuil2") 'Nom des feuilles à exclure
   For Each w In Worksheets
        If IsError(Application.Match(w.Name, a, 0)) Then
            MsgBox "w.Name"
            'ton code
       End If
    Next
End Sub

klin89

Merci pour vos réponses.

Alors pour gmb j'ai fait l'essai avec mes 2 premiers onglets (page de garde et synthese1) cela fonctionne mais cela me laisse 2 lignes vides en bas dans mon tableau . Les feuilles exclues de la liste sont quand même prise en compte par le compteur pour remplir mes tableaux (compteur de 19 lignes) donc cela me crée une nouvelle feuille synthese et continue sur le 2ème tableau de la nouvelle feuille malgré que le 1er tableau ne soit pas fini d'être remplis .

Pour Klin89 cela ne fonctionne pas ou alors je n'ai pas réussi à l'adapter à mon code ...

Nouvel essai à tenter :

Sub Synthese()

    Dim Lig As Integer, i As Long, Col As Long
    Dim rg As Range
    Dim NomFeuille As String
    Dim Compteur As Integer

    Dim listeOnglets(), f As Worksheet, k&

    Const MaxLignes As Integer = 19
    Set rg = Range("C14")
    Lig = rg.Row
    Col = rg.Column

    k = 0
    For Each f In Worksheets
        If f.Name <> "Page de garde" And Left(f.Name, 8) <> "Synthèse" _
                And Left(f.Name, 6) <> "model " And f.Name <> "tabouret" _
                And f.Name <> "liste" Then
            ReDim Preserve listeOnglets(1, k + 1)
            listeOnglets(0, k) = f.Name
            k = k + 1
        End If
    Next f

    For i = 1 To UBound(listeOnglets, 2) 'Worksheets.Count
        If i Mod MaxLignes <> 0 Then
            Cells(Lig, Col) = Sheets(listeOnglets(0, i - 1)).Name   'Sheets(i).Name
            Lig = Lig + 1
        Else
            Application.DisplayAlerts = False
            Sheets("Synthese").Copy After:=ActiveSheet
            On Error Resume Next
        Do
          Err.Clear
          Compteur = Compteur + 1
          NomFeuille = "Synthese" & Compteur
          ActiveSheet.Name = NomFeuille
          ActiveSheet.Select
          Loop Until Err.Number = 0
        On Error GoTo 0

            Application.DisplayAlerts = True
            Cells(Lig, Col) = Sheets(listeOnglets(0, i)).Name   'Sheets(i).Name
            Lig = rg.Row
            Col = Col
        End If
    Next i
End Sub

Résultat ?

Bye !

J'ai du mal à comprendre ta modif mais cela fonctionne ,merci

Left(f.Name, 8) <> "Synthèse" _
                And Left(f.Name, 6) <> "model" 

a quoi correspond les chiffres 8 et 6 ?

Par contre pour faire un essai plus poussé j ai numéroté les feuilles et là je m'aperçois que j'ai bug sur la 19ème ligne de chaque tableau

sur le 1er tableau la ligne 19 est vide

capture1

sur les tableaux des feuilles synthese suivantes sur la ligne 19 on retrouve toujours la 1ere ligne du tableau

capture2

Aurais tu une idée de où le bug peut venir ?

Franck_DK59 a écrit :

a quoi correspond les chiffres 8 et 6 ?

Pour le 8 , la condition s’exprime ainsi : « Si les 8 premières lettres, en partant de la gauche, du nom de la feuille sont différentes de :’’Synthèse’’

Et pareil pour le 6 où j’ai mis un espace à la fin de ‘’model ‘’ pour faire bonne mesure, on n’est jamais assez prudent….

Pour le cas où les feuilles sont numérotées, il faudrait voir avec le fichier mais est-ce bien nécessaire ?

Bye !

merci pour les explications , concernant la numérotation des feuilles oui c'est important car en fait une feuille= PV de vérification de matériel .... donc dans ma synthèse y a le numéro de de pv , la date , le nom .....

je clôture le post car la problématique initiale a été résolu. Si je ne résous pas le problème sur la 19ème ligne des tableaux , j'ouvrirai un autre post à ce sujet.

Merci pour ton aide

Rechercher des sujets similaires à "vba comment exclure noms onglets liste"