VBA : dupliquer/nommer feuille :
fr.chaumon
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 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
A voir également:
- VBA : dupliquer/nommer feuille :
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Find vba - Astuces et Solutions
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
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.
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,
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,
une autre fonction qui évite une boucle pour tester l'existence d'une feuille :
Function existSheet(nomFeuille As String) As Boolean On Error Resume Next existSheet = Sheets(nomFeuille).Index End Functioneric
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
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à.
La fonction fonctionne (!) très bien, mais pas grave :-)
eric
Vivi je te crois sur parole, je n'y connais rien en VBA :(
Pourrais tu me dire quel code je dois insérer dans ma macro pour faire appel correctement à ta fonction.
Histoire que je me cultive un peu.
Je te remercie.
fr.
Si je comprend bien Eriiic, ta fonction dit que si la feuille existe il l'a renomme en ajoutant l'index.
ensuite le while renomme la feuille comme je le désire.
C'est ça ?
fr.