VBA : dupliquer/nommer feuille :

fr.chaumon -  
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


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

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    2. fr.chaumon
       
      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
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    4. fr.chaumon
       
      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
    5. fr.chaumon
       
      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