Indice sur Nom onglet s'il existe déja

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

CelluleVide

XLDnaute Occasionnel
Bonjour,

J'ai écrit une macro qui créer un onglet pour chaque ligne d'une liste présene sur le premier onglet.
Tout allait bien (et là j'étais plutot fier de moi car, pour une fois, je n'avais pas copier le code de quelqu'un d'autre!!!) sauf que si le nom que je donne a l'onglet est présent plusieurs fois dans la liste car cela provoque une errreur.
Je voudrais que si l'onglet a créer existe déja celui ci soit indicé (si Nom "TOTO" existe then NOM = TOTO & "(2)"

Voir le fichier.
A+
 

Pièces jointes

Re : Indice sur Nom onglet s'il existe déja

Bonsoir CelluleVide,
Voici mon aide et bravo pour ta ténacité.
Bruno
Ce qu'il faut ajouter dans la macro, tu trouveras facile ou le mettre
Code:
'Copier La page Vierge a la fin
    Sheets("Vierge").Copy After:=Sheets(Sheets.Count)
'Renommer la feuille:

'a partir de là



On Error Resume Next ' on gère les erreurs possible
    ActiveSheet.Name = NomFeuille
If Err > 0 Then
 For k = 1 To 100
  Err.Clear 'efface l'error
   ActiveSheet.Name = NomFeuille & "(" & k & ")"
    If Err = 0 Then Exit For 'on sort du For si pas d'erreur
 Next
End If
'Si le nom exise deja: lui ajouter un indice:
 
Dernière édition:
Re : Indice sur Nom onglet s'il existe déja

Bonjour le fil, bonjour le forum,

Peut-être comme ça :
Code:
Sub Creation_Fiches()
Dim li As Integer
Dim NumCmde, NomFeuille, NomFrs As String
Dim Montant As Long
Dim DateLiv As Date
Dim i As Byte


With Sheets("Commandes") 'prend en compte l'onglet "Commandes"
    i = 1 'définit la variable i
    For li = 2 To .Cells(Application.Rows.Count, 1).End(xlUp).Row 'boucle de la ligne 2 à la dernière ligne éditée de la colonne 1 (=A)
        NomFeuille = .Cells(li, 3).Value 'définit la variable
        NumCmde = .Cells(li, 1).Value 'définit la variable
        NomFrs = .Cells(li, 3).Value 'définit la variable
        Montant = .Cells(li, 5).Value 'définit la variable
        DateLiv = .Cells(li, 6).Value 'définit la variable
        Sheets("Vierge").Copy After:=Sheets(Sheets.Count) 'copie l'onglet en dernière position
        On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
        ActiveSheet.Name = NomFeuille 'définit le nom de l'onglet (génère une erreur si ce nom existe déjà)
        If Err <> 0 Then 'condition : si une erreur a été générée
            Err = 0 'annule l'erreur
            NomFeuille = NomFeuille & "(" & i & ")" 'redéfinit le nom de l'onglet
            ActiveSheet.Name = NomFeuille 'définit le nom de l'onglet
            i = i + 1 'incrémente i
        End If 'fin de la condition
        On Error GoTo 0 'annule la gestion des erreurs
        Sheets(NomFeuille).Range("H12").Value = NumCmde
        Sheets(NomFeuille).Range("H18").Value = NomFrs
        Sheets(NomFeuille).Range("H24").Value = Montant
        Sheets(NomFeuille).Range("H28").Value = DateLiv
    Next li 'prochaine ligne de la boucle
End With 'fin de la prise en compte de l'onglet "Commandes"
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
26
Affichages
3 K
Retour