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 SubAfin 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 iBye !
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 Subklin89
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 SubRé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
sur les tableaux des feuilles synthese suivantes sur la ligne 19 on retrouve toujours la 1ere ligne du tableau
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