VBA : dupliquer/nommer feuille :

Fermé
fr.chaumon - 4 juil. 2012 à 10:48
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 4 juil. 2012 à 17:19
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



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

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
Modifié par pilas31 le 4/07/2012 à 11:50
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,
2
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié par eriiic le 4/07/2012 à 11:54
Bonjour à tous,

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 Function 

eric
0
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
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
4 juil. 2012 à 14:34
Re,

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
0
Re...

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.
0
C'est tout bon j'ai réussi.

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.
0