Voir aussi
Numérotation automatique des nouvelles feuilles ajoutées
Dans un classeur, j'ai un onglet nommé 1 qui me sert de modèle. Je le copie pourcréer de nouvelles feuilles. Comment nommer ces nouvelles feuilles lors de leur création en ajoutant 1 au nom (numéro) de l'onglet précédent ?
Il existe une procédure (module ThisWorkbook) déclenchée lors de la création d'une nouvelle feuille, que tu peux utiliser pour ce genre de besoin.
Par exemple :

Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim x
x = Worksheets.Count
'le format est à adapter comme tu veux
Sh.Name = Format(x, "000")
'si tu veux que la copie s'effectue de gauche à droite
Sh.Move after:=Worksheets(x)
End Sub
Frédéric Sigonneau,
Ajouté ou modifié le 24/02/2008 (N°1967)
Ajouter une feuille avec un format prédéfini
On peut créer un nouveau classeur à partir d'un modèle prédéfini. Mais comment ajouter seulement un type de feuille particulier dans un classeur existant ?
Mets en forme une feuille à ton idée dans un classeur avec une seule feuille et enregistre
ce classeur comme modèle sous le nom le nom de ton choix.
Tu peux ensuite ajouter une feuille basée sur ce modèle en utilisant cette syntaxe (par exemple) :

Sheets.Add after:=Sheets(Sheets.Count), _
Type:=Application.TemplatesPath & "MonModele.xlt"

(cette instruction suppose que tu as enregistré ton modèle sous le nom de MonModele.xlt
dans le dossier par défaut des modèles proposé dans la boite de dialogue Enregistrer sous).
Frédéric Sigonneau,
Ajouté ou modifié le 18/12/2004 (N°1539)
Créer un menu pour afficher les feuilles d'un classeur
J'ai de nombreuses feuilles dans mon classeur et je vourais disposer d'un menu pour pouvoir naviguer aisément.
N'oublie pas qu'en faisant un clic droit sur les flèches qui permettent de passer d'une
feuille
à une autre, tu peux avoir cette liste. Cela dit, la macro ci dessous te crée le menu
demandé.
Elle a été adaptée d'une macro de Chip Pearson, elle même traduite par frédéric
Sigonneau.
Elle te permet de paramétrer le nombre de feuilles à faire apparaitre dans ton menu ou de

choisir de toutes les montrer.

Dans le workbook_open:
Private Sub Workbook_Open()
'On inscrit un nombre par défaut dans une cellule d'une des feuilles du classeur par
exemple :
LeNombre = Sheets("Feuil1").Range("nbf").Value
CreerLeMenuFeuilles (LeNombre)
End Sub

pour supprimer ce menu à la fermeture du classeur :
dans le workbook_beforeclose:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SupprimerLeMenuFeuilles
End Sub

et dans un module ordinaire:

Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer)
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
Set MenuFeuilles = Application.CommandBars(1).Controls.Add(msoControlPopup, , , , True)
With MenuFeuilles
.Caption = "&Menu Feuilles"
.Tag = cTag
.BeginGroup = False
End With
Set OptionsMenuFeuilles = MenuFeuilles.Controls.Add(msoControlPopup, , , ,True)
With OptionsMenuFeuilles
.Caption = "Options"
Set Option1 = .Controls.Add(msoControlButton, 1, , , True)
With Option1
.Caption = "Afficher toutes les feuilles"
.OnAction = "ToutesLesFeuilles"
End With
Set Option2 = .Controls.Add(msoControlButton, 1, , , True)
With Option2
.Caption = "Définir le nombre de feuilles à afficher"
.OnAction = "NombredeFeuilles"
End With
End With
Select Case Nbf
Case Is = 0
ToutesLesFeuilles
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
End Select
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
End With
End With
End If
Next i
End Sub

Sub SupprimerLeMenuFeuilles()
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub

Sub ToutesLesFeuilles()
CreerLeMenuFeuilles (ThisWorkbook.Sheets.Count)
End Sub

Sub NombredeFeuilles()
LeNombre = Application.InputBox("Combien de feuilles souhaites-tu afficher ?", _
"Option menu Feuilles", , , , , , 1)
Select Case LeNombre
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
Case Is = 0
ToutesLesFeuilles
Case Is > 0 < ThisWorkbook.Sheets.Count
Sheets("Feuil1").Range("nbf") = LeNombre
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub

Sub ActiverLaFeuille()
CommandBars("Workbook tabs").ShowPopup
End Sub
Papou,
Ajouté ou modifié le 15/05/2004 (N°1383)
Vues personnalisées
Je voudrais limiter aux colonnes A à F la portion de feuille visible à l'ouverture d'un classeur. Comment faire ?
Tu peux utiliser l'affichage personnalisé (dans le menu Affichage).
Tu présente ta fenêtre comme tu le veux, tu donnes un nom à l'affichage
et tu ajoutes ceci dans ton WorkBook open

ActiveWorkbook.CustomViews("essai").Show
Monique Brunel, (N°682)
Trier les onglets d'un classeur
Comment trier par ordre alphabétique les onglets de mon fichier ?
Voilà une macro avec un algorithme de tri très rapide, triant par
ordre alphanumérique les *groupes* de feuilles qui commencent par les mêmes
chaînes de caractères, et opérant à l'intérieur de ces groupes
un tri numérique sur les fins de noms. Si ton classeur contient les
feuilles Zaza26, Zaza15, JPS69, 2000, 19, JPS49287, Zaza4 et Feuil10,
elles seront triées en: 19, 2000, Feuil10, JPS69, JPS49287, Zaza4,
Zaza15 et Zaza26.

'==============================================
Dim Arr(), Idx() As Integer
Dim Elt1, Elt2, IdxTemp As Integer
Dim I As Integer

Sub TriFeuilles()
Dim J As Integer, NF As Integer
Dim Nom() As String
Dim Calc As Long

NF = Sheets.Count
ReDim Nom(1 To NF)
ReDim Arr(1 To NF, 1 To 2)
For I = 1 To NF
Nom(I) = Sheets(I).Name
For J = Len(Nom(I)) To 1 Step -1
If Not IsNumeric(Mid$(Nom(I), J, 1)) Then Exit For
Next J
If J = Len(Nom(I)) Then
Arr(I, 1) = Nom(I)
Else
Arr(I, 1) = Left$(Nom(I), J)
Arr(I, 2) = CLng(Mid$(Nom(I), J + 1))
End If

Next I
ReDim Idx(1 To NF)
For I = 1 To UBound(Idx)
Idx(I) = I

Next I
Tri 1, NF
Erase Arr
Calc = Application.Calculation

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For I = 1 To NF
Sheets(Nom(Idx(I))).Move Sheets(I)
Next I

Application.Calculation = Calc

End Sub

Private Sub Tri(ByVal B1 As Integer, ByVal H1 As Integer)

Dim B2 As Integer
Dim H2 As Integer


B2 = B1
H2 = H1
Elt1 = Arr(Idx((B1 + H1) \ 2), 1)
Elt2 = Arr(Idx((B1 + H1) \ 2), 2)
Do While B2 < H2
Do While B2 < H1
If Arr(Idx(B2), 1) > Elt1 Then Exit Do
If Arr(Idx(B2), 1) = Elt1 Then _
If Arr(Idx(B2), 2) >= Elt2 Then Exit Do
B2 = B2 + 1
Loop
Do While
H2 > B1
If Arr(Idx(H2), 1) < Elt1 Then Exit Do
If Arr(Idx(H2), 1) = Elt1 Then _
If Arr(Idx(H2), 2) <= Elt2 Then Exit Do
H2 = H2 - 1
Loop
If B2 < H2 Then
IdxTemp = Idx(B2)
Idx(B2) = Idx(H2)
Idx(H2) = IdxTemp
End If
If B2 <= H2 Then
B2 = B2 + 1
H2 = H2 - 1
End If
Loop
If H2 > B1 Then Tri B1, H2

If B2 < H1 Then Tri B2, H1

End Sub
Laurent Longre, (N°681)
Tri complexe d'onglets
J'ai besoin de trier des onglets par ordre alphabétique avec les règles suivantes : les 0 sont prioritaires (01 avant 1) les _ (underscore) sont classés en dernier...
Dans ce classeur à télécharger, tu peux en prime sélectionner tes paramètres de tri.

Cette astuce est illustrée dans ce classeur exemple :
dma-trieronglets (téléchargé 5889 fois)
Daniel Maher, (N°680)
Tester la présence d'une feuille
Je voudrais pouvoir teste la présence ou non d'une feuille . Si elle existe, la sélectionner, sinon la créer et la nommer.
Sub SelectFeuille(Nom$)
On Error Resume Next
Worksheets(Nom).Select
If Err <> 0 Then Worksheets.Add.Name = Nom
End Sub

ensuite, dans ton code :
SelectFeuille ("récapitulation")
Frédéric Sigonneau, (N°679)
Eliminer les feuilles vierges masquer l'inutile
Comment supprimer dans un classeur toutes les feuilles vierges et masquer toutes les lignes et les colonnes inutilisées sur la feuille active ?
Sub supsupFlu()
Dim Sht As Worksheet
Set aSh = ActiveSheet

Application.ScreenUpdating = False
For Each Sht In ActiveWorkbook.Worksheets
Sht.Activate
ActiveSheet.UsedRange
Selection.SpecialCells(xlLastCell).Select
Application.DisplayAlerts = False
If ActiveCell.Address = "$A$1" And IsEmpty(ActiveCell) Then
Sht.Delete
Else
ActiveCell.Offset(1, 1).Select
Range(Selection, Selection.End(xlDown)).EntireRow.Hidden = True
Range(Selection, Selection.End(xlToRight)).EntireColumn.Hidden =
True
End If
Next Sht
End Sub
ChrisV, (N°678)
Masquer toutes les feuilles d'un classeur
Est-il possible de masquer réellement toutes les feuilles d'un classeur ?
Oui : tu mets dans VBA la propriété isaddin de ce classeur à true...

autre soluce :
Ouvre ton classeur, puis ouvre un nouveau classeur vierge et bascule dans la
fenêtre de ton classeur.
Menu Fenêtres / Masquer
Il ne reste à l'écran que le nouveau classeur
Tu quittes Excel et tu réponds Oui à voulez-vous enregistrer les
modifications apportées à ton classeur.
Réouvre ton fichier et tu ne verras plus rien à l'écran.

Mais, il suffit de réactiver la fenêtre depuis le menu adéquat pour la rendre à nouveau
apparente, ce que tu peux empêcher par macro :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True
End Sub

Private Sub Workbook_Open()
ThisWorkbook.Windows(1).Visible = False
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
ThisWorkbook.Windows(1).Visible = False
End Sub
Michel Pierron, (N°677)
Feuille vide ?
Comment vérifier si une feuille est vraiment complètement vide ?
Sub verre_vide_ou_plein()
If Cells.Find("*") Is Nothing Then
MsgBox ("ya rien")
Else
MsgBox "ya qqchose"
End If
End Sub
Jacques Chaussard, (N°676)
Insérer une nouvelle feuille à la fin
Quand je clique sur nouvelle feuille, comment faire pour que celle-ci s'ajoute automatiquement en dernier ?
à mettre dans un module standard de ton perso.xls :

Declare Function GetKeyState _
Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Const VK_SHIFT = &H10

Sub CreeBoutonFeuille()
On Error Resume Next
Set newBtn = Application.CommandBars("Standard").Controls. _
Add(Type:=msoControlButton, before:=3)
With newBtn
.Name = "FeuillePlus"
.TooltipText = "Nouvelle feuille (insertion spéciale)"
.FaceId = 136
.OnAction = "DoubleAction"
.Visible = True
End With
End Sub

Sub DoubleAction()
Sheets.Add
If GetKeyState(VK_SHIFT) < 0 Then
ActiveSheet.Move After:=Worksheets(ActiveSheet.Index + 1)
Else
ActiveSheet.Move After:=Worksheets(Sheets.count)
End If
End Sub

et, à ce moment-là, tu as un bouton dans la BO de ton classeur : une
jolie flèche verte mais que tu peux changer en modifiant le FaceId
Frédéric Sigonneau, (N°675)
Créer et détruire des onglets par VBA
Je voudrais créer des onglets à partir d'une liste de noms contenus sur une feuille. Je voudrais aussi pouvoir détruire tout ou partie de ces onglets.
Private Sub CmdCreerFeuilles_Click()
Dim cell As Range, Nom$, Sht As Worksheet

For Each cell In Selection
Nom = cell.Value
If Nom <> "" Then
On Error Resume Next
Set Sht = Sheets(Nom)
On Error GoTo 0
If Sht Is Nothing Then Sheets.Add.Name = Nom
End If
Next cell
End Sub

Exemple visible sur la page onglet de ce classeur

Cette astuce est illustrée dans ce classeur exemple :
fc-manipfichiers (téléchargé 10998 fois)
Frédéric Sigonneau, Flo Cabon, (N°674)
Copier les feuilles d'un classeur dans un nouveau
Comment sauvegarder une seule feuille de mon classeur dans un autre fichier qui sera créé à cet effet?
A mon avis, le plus simple
sheets("Feuil1").copy
Cela crée un nouveau classeur contenant uniquement une copie de Feuil.

Et dans le cas d'une sélection multiple de feuilles,
Sheets(Array("Feuil1", "Feuil2")).Copy

Et pour initialiser dynamiquement le nom des feuilles d'un "Array" par une
petite procédure, sachant qu'un array est en fait un tableau "constant". Pour
utiliser un tableau de variables, il suffit d'utiliser un tableau dimensionné

Dim Feuilles(1 To 2)
Feuilles(1) = "feuil1"
Feuilles(2) = "feuil2"
Sheets(Feuilles).Copy

En développant la macro, on peut ainsi créer un classeur avec toutes les
feuilles répondant à une ou plusieurs conditions.

For each Feuille in worksheets

Sub Copie()
ReDim Feuilles(1 To 1)
Dim Compteur As Integer
Compteur = 0
Dim Feuille As Worksheet
For Each Feuille In Worksheets
If UCase(Left(Feuille.Name, 6)) = "PIERRE" Then
Compteur = Compteur + 1
ReDim Preserve Feuilles(1 To Compteur)
Feuilles(Compteur) = Feuille.Name
End If
Next Feuille
If Compteur > 0 Then Sheets(Feuilles).Copy
End Sub

Cette astuce est illustrée dans ce classeur exemple :
fc-manipfichiers (téléchargé 10998 fois)
Pierre Fauconnier, (N°673)
Créer une barre d'outils pour accéder aux feuilles d'un classeur
Comment créer une barre d'outils permettant de naviguer facilement entre les différentes feuilles de mon classeur ?
Essaye cettedémo ky fo de...

Cette astuce est illustrée dans ce classeur exemple :
pe-cmdbarauto (téléchargé 9333 fois)
Pascal Engelmajer, (N°672)