Création d'un onglet avec nomination variable

Bonjour,

Je n'arrive pas à trouver de solution pour ce que je souhaite faire :
L'objectif étant que la macro une fois activée crée un onglet avec le nom d'une cellule déterminée (ça j'ai réussi). Par contre si je réactive cette macro, il y a forcément un problème car l'onglet existe déjà. De ce fait je souhaite prévenir par le biais d'un message box pour prévenir l'utilisateur que l'onglet existe déjà et qu'il puisse avoir le choix de pouvoir le remplacer ou de créer une version (2) et là, malheureusement ça devient compliqué pour moi. Quelqu'un peut -il m'aider...

merci d'avance

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. dim i as integer
    dim NomOnglet as String

    nomOnglet = "ManouvelleFeuille"

    for i = 1 to sheets.counter
    if (sheets(i).name == nomOnglet) then
    MSGbox "Le nom que vous proposez existe déjà il sera changé en " & nomOnglet & " (2)"
    nomOblget = nomonglet & "(2)"
    end if
    next i

    Dites moi si ca marche, logiquement il ne devrait pas y avoir d'erreur.
    1. Salut,

      En supposant que le nom de la feuille se trouve en cellule A2 de la feuille active

      Sub InsereFeuille()
      Dim n As Integer, trouve As Boolean
      For n = 1 To Sheets.Count
      If Sheets(n).Name = [A2].Value Then
      trouve = True
      MsgBox "La feuille " & [A2].Value & " existe déjà"
      Exit For
      End If
      Next n
      If Not trouve Then Sheets.Add.Name = [A2].Value
      End Sub
      1. J'ai essayé, mais cela ne fonctionne pas. j'ai noté ci-dessous le code que j'ai fait pour le moment. peut être que ce sera plus explicite.

        Sub Renommer_onglet()

        'avant il faudrait une condition qui ouvre la message box que dans le cas où l'onglet existe déjà
        'ensuite :
        If MsgBox("Cette préparation existe déjà, Voulez vous la remplacer", vbYesNo) = vbYes Then
        Sheets("prepa_type").Select
        Sheets("prepa_type").Copy After:=Sheets("prepa_type")
        ActiveSheet.Name = Sheets("preparation").Range("D1") + " (V" + ")" + 'ici il me manque un code pour créer une numérotation pour chaque onglet identique : V1, V2, V3...
        End If
        Next
        End Sub

        J'espère que cela est assez explicite.
    2. Contributeur
      Bonjour,

      et une 3ème proposition : une fonction.
      Function existSheet(nomFeuille As String) As Long
          On Error Resume Next
          existSheet = Sheets(nomFeuille).Index
      End Function

      retourne 0 (False) si la feuille n'existe pas.

      eric

      1. Bonjour eriiic,

        je n'arrive pas a comprendre ta fonction:

        Dim NomFeuille As String
        NomFeuille = "BDD_valeurs"
        If Not existSheet(NomFeuille) Then
        ActiveSheet.Name = NomFeuille
        End If

        c'est au niveau du code que je n'arrive pas a l'utiliser
        cela me renvoi vrai ou faux et je n'arrive pas a m'en sortir

        merci par avance
      2. nan c'est bon j'ai compris pourquoi ca ne marchait pas :)