Numérotation d'un onglet dupliqué
Bonjour,
J'ai créé un fichier Excel avec 3 onglets "modèle" ainsi qu'un onglet de synthèse.
Dans cet onglet de synthèse se trouve un bouton déclancheant une macro proposant la duplication de l'un de ces onglets au choix.
Le code spécifie que chaque nouvel onglet sera renomé pour intégrer le nom choisit par l'utilisateur (via une input box).
J'ai également fait en sorte que chaque nouvel onglet copié porte un numéro (1 pour le premier, 2 pour le second)
Pour ce faire le code compte le nombre de feuilles présentes dans le classeur et ajoute 1 à chaque fois.
=> Cela permet d'éviter de faire buger la macro au cas où l'utilisateur entreraît 2 fois le même nom
Cependant deux problèmes subsistent, qui s'illustre mieux par un exemple:
Admettons que l'utilisateur duplique 3 fois le même onglet qui seront ainsi renomés: "1.PG-Bleu", "2.PG-Vert", "3.PG-Jaune"
Premier problème => Si l'utilisateur décide de supprimer l'onglet "2.PG-Vert", alors le prochain onglet dupliqué reprendra la numérotation à "3", ce qui fait qu'il y aura deux fois ce numéro dans des noms d'onglet
Deuxième problème => Si lors de la création de ce nouvel onglet l'utilisateur décide à nouveau de le nomer "Jaune", alors la macro bug étant donné que l'onglet "3.PG-Jaune" existe déjà.
Voici le code ci-dessous.
Auriez-vous une idée pour contourner ces problèmes?
Merci pour votre aide
Private Sub CommandButton1_Click()
Dim SheetName As String
If Personal = True Then
Worksheets("Personal").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then MsgBox ("Invalid facility name (between 1 and 25 characters)")
Loop While Len(SheetName) > 25 Or SheetName = ""
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".PG-" & SheetName
ElseIf TangibleFinancial = True Then Worksheets("Tangible Fi").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then MsgBox ("Invalid facility name (between 1 and 25 characters)")
Loop While Len(SheetName) > 25 Or SheetName = ""
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName
ElseIf TangibleNonFinancial = True Then Worksheets("Tangible").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then MsgBox ("Invalid facility name (between 1 and 25 characters)")
Loop While Len(SheetName) > 25 Or SheetName = ""
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName
End If
Hide
End Sub
Bonjour
mettre un numéro est-il vraiment utile ???
pourquoi ne pas tester si la feuille n'existe pas déjà avec le nom renseigné dans l'input box ???
avec cette fonction par exemple :
Function FeuilleExiste(nom As String) As Boolean
On Error Resume Next
'retourne true si la feuille existe sinon false
FeuilleExiste = Sheets(nom).Name <> ""
On Error GoTo 0
End Function
et appel de cette fonction :
Dim retour As Boolean
retour = FeuilleExiste(SheetName)
si retour = true c'est que la feuille existe, si false cela veut dire que la feuille n'existe pas...
fred
Salut
essayer ca
Function FeuilleExiste(nom As String) As Boolean
On Error Resume Next
'retourne true si la feuille existe sinon false
FeuilleExiste = Sheets(nom).Name <> ""
On Error GoTo 0
End Function
Private Sub CommandButton1_Click()
Dim SheetName As String
If Personal = True Then
Worksheets("Personal").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then MsgBox ("Invalid facility name (between 1 and 25 characters)")
Loop While Len(SheetName) > 25 Or SheetName = ""
If FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".PG-" & SheetName) = False Then
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".PG-" & SheetName
ElseIf FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".PG-" & SheetName) = True Then
MsgBox "this sheet already exists !"
Exit Sub
End If
ElseIf TangibleFinancial = True Then Worksheets("Tangible Fi").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then
reponse = (MsgBox(" Invalid facility name (between 1 and 25 characters) !" & Chr(10) & " Try again ?", 4))
End If
Loop While reponse = vbYes
If FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName) = False Then
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName
ElseIf FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName) = True Then
MsgBox "this sheet already exists !"
Exit Sub
End If
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName
ElseIf TangibleNonFinancial = True Then Worksheets("Tangible").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then
reponse = (MsgBox(" Invalid facility name (between 1 and 25 characters) !" & Chr(10) & " Try again ?", 4))
End If
Loop While reponse = vbYes
If FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName) = False Then
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName
ElseIf FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName) = True Then
MsgBox "this sheet already exists !"
Exit Sub
End If
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName
End If
Hide
End Sub
Salut
regarder ca "correction de la premiere procedure"
Function FeuilleExiste(nom As String) As Boolean
On Error Resume Next
'retourne true si la feuille existe sinon false
FeuilleExiste = Sheets(nom).Name <> ""
On Error GoTo 0
End Function
Private Sub CommandButton1_Click()
Dim SheetName As String
If Personal = True Then
Worksheets("Personal").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then
reponse = (MsgBox(" Invalid facility name (between 1 and 25 characters) !" & Chr(10) & " Try again ?", 4))
End If
If Not (reponse = vbYes) Then Exit Sub
Loop While reponse = vbYes
If FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".PG-" & SheetName) = False Then
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".PG-" & SheetName
ElseIf FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".PG-" & SheetName) = True Then
MsgBox "this sheet already exists !"
Exit Sub
End If
ElseIf TangibleFinancial = True Then Worksheets("Tangible Fi").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then
reponse = (MsgBox(" Invalid facility name (between 1 and 25 characters) !" & Chr(10) & " Try again ?", 4))
End If
If Not (reponse = vbYes) Then Exit Sub
Loop While reponse = vbYes
If FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName) = False Then
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName
ElseIf FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName) = True Then
MsgBox "this sheet already exists !"
Exit Sub
End If
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TF-" & SheetName
ElseIf TangibleNonFinancial = True Then Worksheets("Tangible").Copy After:=Sheets(Worksheets.Count)
Do
SheetName = InputBox("Please name the facility? (25 characters Max)")
If Len(SheetName) > 25 Or SheetName = "" Then
reponse = (MsgBox(" Invalid facility name (between 1 and 25 characters) !" & Chr(10) & " Try again ?", 4))
End If
If Not (reponse = vbYes) Then Exit Sub
Loop While reponse = vbYes
If FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName) = False Then
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName
ElseIf FeuilleExiste(ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName) = True Then
MsgBox "this sheet already exists !"
Exit Sub
End If
ActiveSheet.Name = ThisWorkbook.Worksheets.Count - 4 & ".TNF-" & SheetName
End If
Hide
End Sub
J'ai réussi à trouver une solution à partir de vos idées.
Merci beaucoup pour votre aide!!