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!!

Rechercher des sujets similaires à "numerotation onglet duplique"