Macro qui renomme les feuilles d'un classeur de Janvier à Décembre
ou de Lundi à Dimanche ou de 01 à 12
Vous ouvrez un classeur, vous cliquez droit sur l'onglet d'une feuille,
le menu contectuel apparait, vous sélectionnez l'incrémentation
désirée, si vous voulez renommer les feuilles existantes, si
il faut créer de nouvelle feuille si nécessaire,.... Personnellement
après avoir ouvert un nouveau classeur, je sélectionne mon incrémentation,
l'option 2 puis l'option 3.
'B. Marchand & F. Sigonneau mpfe
Option Explicit
Public Const Entrée As String = "Copie incrémentée
de feuille(s)"
Dim Jours, Mois, MoisNum, tabListes
Sub Démarre()
Dim Ctrl As CommandBarControl, Liste, S$, x%
Set Ctrl = Application.CommandBars("Ply").Controls. _
Add(Type:=msoControlPopup, before:=1, temporary:=True)
Ctrl.Caption = Entrée
FillListes
For x = LBound(tabListes) To UBound(tabListes)
Liste = tabListes(x)
S = Liste(1) & ", " & Liste(2) & "..."
With Ctrl.Controls.Add(msoControlButton)
.Caption = S
.OnAction = "'IncrémentationFeuille " & x & "'"
End With
Next x
With Application.CommandBars("Ply").Controls(2)
.BeginGroup = True
End With
End Sub
Sub Désinstalle()
On Error Resume Next
Application.CommandBars("Ply").Controls(Entrée).Delete
End Sub
Sub IncrémentationFeuille(Param As Byte)
Dim NouvelleFeuille As String
Dim N%, M%, Liste
Dim Msg As String, retour As String, sht As Worksheet
Msg = "Pour :" & vbLf & vbLf & _
"- Ajouter une feuille avec le nom de l'entrée suivante "
_
& "dans la liste : tapez 1" _
& vbLf & vbLf & _
"- Renommer les feuilles existantes avec les noms de la " _
& "liste : tapez 2" _
& vbLf & vbLf & _
"- Compléter le classeur avec autant de feuilles que " _
& "d'entrées dans la liste : tapez 3"
retour = InputBox(Msg, "Copie incrémentée de feuille(s)")
If retour = "" Then Exit Sub
FillListes
Liste = tabListes(Param)
Application.ScreenUpdating = False
Select Case Val(retour)
Case 1
If Not ListeExistante(Liste) Then GoTo Fin3
On Error GoTo Fin1
For N = 1 To UBound(Liste)
If ActiveSheet.Name = Liste(N) Then
Set sht = ActiveSheet
NouvelleFeuille = Liste(N + 1)
ActiveSheet.Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = NouvelleFeuille
Exit For
End If
Next N
Case 2
M = 0
For N = 1 To Worksheets.Count
If Worksheets(N).Visible = xlSheetVisible Then
Worksheets(N).Name = "Tmp" & N - M
Worksheets(N).Name = Liste(N - M)
Else
M = M + 1
End If
If N - M = SheetsVisible And N < UBound(Liste) Then GoTo Fin2
Next N
Case 3
If Not ListeExistante(Liste) Then GoTo Fin3
For N = SheetsVisible + 1 To UBound(Liste)
NouvelleFeuille = Liste(N)
ActiveSheet.Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = NouvelleFeuille
Next N
End Select
Exit Sub
Fin1:
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
sht.Activate
MsgBox "Une feuille porte déjà le même nom"
& vbLf & _
"que l'entrée suivante dans la liste...", , Entrée
End
Fin2:
MsgBox "Ne peut tout renommer : il y a des feuilles cachées"
& vbLf & _
"et/ou moins de feuilles que d'entrées dans la liste...",
, Entrée
Exit Sub
Fin3:
MsgBox "La liste choisie ne correspond pas" & vbLf & _
"aux noms des feuilles existantes...", , Entrée
End Sub
Function SheetsVisible() As Long
Dim i&, V&
For i = 1 To Worksheets.Count
If Worksheets(i).Visible = xlSheetVisible Then V = V + 1
Next i
SheetsVisible = V
End Function
Function ListeExistante(Liste) As Boolean
Dim N&, M&
For N = 1 To Worksheets.Count
For M = 1 To UBound(Liste)
If Worksheets(N).Name = Liste(M) Then
ListeExistante = True
Exit Function
End If
Next M
Next N
End Function
Sub FillListes()
Jours = Array("", "Lundi", "Mardi", "Mercredi",
"Jeudi", _
"Vendredi", "Samedi", "Dimanche")
Mois = Array("", "Janvier", "Février",
"Mars", "Avril", "Mai", "Juin", _
"Juillet", "Août", "Septembre", "Octobre",
"Novembre", "Décembre")
MoisNum = Array("", "01", "02", "03",
"04", "05", "06", _
"07", "08", "09", "10", "11",
"12")
tabListes = Array(Jours, Mois, MoisNum)
End Sub