Test si nom onglet existant
Bonjour à tous,
je me tourne vers vous car j'ai un soucis pour coder dans cette commande:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not IsEmpty(Range("F5")) Then
End Sub
Je souhaiterai ajouter un test, qui après copie de la feuille "modele ex" vérifie avant de le renommer que la variable Expe1 ne soit pas déjà attribuée à un autre onglet. Si c'est bon ça continue, si ce n'est pas bon une msgbox s'ouvre et la boucle s'arrete.
Vous avez le fichier en PJ. pour l'utiliser, entre un mot dans la case trigramme, un onglet se genere automatiquement sur le modele de l'onglet "modele ex".
J'espere avoir été clair,
je vous remercie par avance pour votre aide.
Bonjour et bienvenue sur le forum
Essaie ce code, bien qu'il y ait sûrement plus simple :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not IsEmpty(Range("F5")) Then
If Not Application.Intersect(Target, Range("F5")) Is Nothing Then
Dim Expe1 As String
Expe1 = Range("F5")
On Error GoTo suite
Sheets(Expe1).Select
On Error GoTo 0
Application.Undo
MsgBox "La feuille " & Expe1 & " existe déjà.", 16
Application.EnableEvents = True
Exit Sub
suite:
Sheets("modele ex").Select
Sheets("modele ex").Copy Before:=Sheets(1)
ActiveSheet.Name = Expe1
ActiveSheet.Tab.ColorIndex = 46
Sheets("Inventaire General").Select
Range("F5").ClearContents
End If
End If
Application.EnableEvents = True
End Sub
Bonjour et bonne année,
Bonjour gmb,
Une alternative à la proposition de gmb.
Cdlt.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$5" And Not IsEmpty([F5]) Then
If Not IsWorksheet(Target.Value) Then
ActiveWorkbook.Worksheets("modele ex").Copy before:=ActiveWorkbook.Worksheets(3)
With ActiveSheet
.Name = Target.Value
.Tab.ColorIndex = 46
End With
Else
MsgBox "La feuille " & Target.Value & " est déjà présente dans le classur.", vbOKOnly + vbInformation
End If
End If
Application.EnableEvents = False
Me.[F5].ClearContents
Application.EnableEvents = True
End Sub
Private Function IsWorksheet(strName As String) As Boolean
Dim ws As Worksheet
IsWorksheet = False
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = strName Then
IsWorksheet = True
End If
Next
End Function
Merci a vous 2,
C'est exactement ce que je voulais. J'ai opté pour la solution de gmb, première que j'ai testé et qui me convenait trés bien.
Bonne journée et encore merci!