VBA : dupliquer/nommer feuille :
fr.chaumon
-
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aurais besoin d'un coup de main, je suis novice sous vba excel et je galère un peu.
Voila mon soucis :
J'ai créer une macro qui duplique une feuille, lors de la duplication un userform apparait dans lequel l'utilisateur doit entrer des données (nom du controle, numero de lot, etc...)
Jusque là tout se passe bien c'est la suite qui me pose soucis.
La nouvelle feuille créer prend le nom suivant "CIQ & nom de controle & numero de lot". Le soucis est que si une feuille existante à déjà ce nom j'ai un message d'erreur.
Comment faire pour ajouter un indice au nom de la nouvelle feuille dans ce cas ?
Voici ma macro
Merci à l'avance pour vos coup de mains
J'aurais besoin d'un coup de main, je suis novice sous vba excel et je galère un peu.
Voila mon soucis :
J'ai créer une macro qui duplique une feuille, lors de la duplication un userform apparait dans lequel l'utilisateur doit entrer des données (nom du controle, numero de lot, etc...)
Jusque là tout se passe bien c'est la suite qui me pose soucis.
La nouvelle feuille créer prend le nom suivant "CIQ & nom de controle & numero de lot". Le soucis est que si une feuille existante à déjà ce nom j'ai un message d'erreur.
Comment faire pour ajouter un indice au nom de la nouvelle feuille dans ce cas ?
Voici ma macro
Sub dupliquer_feuilles()
Dim j As Integer
Dim Msg, style, Title, Response
Msg = "Voulez-vous créer un nouveau Lot ?"
style = vbYesNo
Title = "Nouveau Lot ? "
Response = MsgBox(Msg, style, Title)
If Response = vbYes Then
Sheets("Modèle").Visible = 1
Sheets("Modèle").Unprotect (837217)
Sheets("Modèle").Copy after:=Sheets(Sheets.Count)
NEWLOT.Show
Dim identite, nomlot As String
Dim ouverture, peremption As Date
identite = NEWLOT.IdLot.Value
ouverture = NEWLOT.OuvLot.Value
peremption = NEWLOT.PerLot.Value
nomlot = NEWLOT.NomCont.Value
ActiveSheet.Unprotect (837217)
ActiveSheet.Cells(1, 2).Value = identite
ActiveSheet.Cells(2, 1).Value = ouverture
ActiveSheet.Cells(2, 2).Value = peremption
ActiveSheet.Cells(1, 2).Value = nomlot
ActiveSheet.Name = "CIQ " & nomlot & " " & identite
Else
Exit Sub
End If
End Sub
Merci à l'avance pour vos coup de mains
1 réponse
-
Bonjour,
Le plus correct est de tester si la feuille existe et de faire progresser un indice.
Voici ce que je propose pour remplacer la fin du code.
..... ActiveSheet.Cells(1, 2).Value = nomlot Dim NomFeuil As String, Indice As Integer NomFeuil = "CIQ " & nomlot & " " & identite Indice = 0 While ExisteFeuille(NomFeuil) Indice = Indice + 1 NomFeuil = "CIQ " & nomlot & " " & identite & "-" & Indice Wend ActiveSheet.Name = NomFeuil Else Exit Sub End If End Sub Public Function ExisteFeuille(Nfeuil As String) As Boolean Dim Feuille As Worksheet ExisteFeuille = False For Each Feuille In ActiveWorkbook.Worksheets If Feuille.Name = Nfeuil Then ExisteFeuille = True Exit For End If Next End Function
La fonction teste si le nom existe.
La boucle While s'éxécute jusqu'a ce qu'un indice non utilisé soit trouvé
A+
Cordialement,-
-
Re-bonjour,
Un grand merci à vous, ça fonctionne nikel avec le code de pilas31.
Par contre eriiic, quand j'ai remplacé la fonction de pilas par la tienne pour tester j'ai eu le message d'erreur comme quoi la feuille existait déjà. (J'ai pourtant bien changé "ExisteFeuille" par "existsheet" dans le while :(.
fr.c -
-
-
-