XL 2013 VBA - Ajouter onglet nommé en dernière position

AntoineM

XLDnaute Junior
Bonjour le forum,

J'ai créer une macro qui crée des onglets en fonction d'une plage de cellule. Pour chaque cellule renseignée dans la colonne A, un onglet est crée. Ensuite la même macro contrôle si chaque onglet correspond bien à une cellule de la plage, et si non, elle le supprime.

La macro fonctionne (elle n'est peut-être pas optimisé ou esthétique), mais j'aimerais que les onglets soient ajoutés en dernière position. Et je ne vois pas ou mettre le After:=Sheets(Sheets.Count).

VB:
Sub MAJ_Onglets()
Dim Sh As Worksheet
Dim Ws As Worksheet
Dim LastLig As Long
Dim i As Integer
Dim j As Integer

j = 2

For Each Ws In Application.Worksheets
    If Ws.Name = Sheets("Feuil1").Range("A" & j) Then
    j = j + 1
    Else
    Application.DisplayAlerts = False
        If Ws.Name <> "Feuil1" Then
    Ws.Delete
    j = j + 1
        End If
    Application.DisplayAlerts = True
    End If

Next Ws
 
With Sheets("Feuil1")
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    For i = LastLig To 2 Step -1
        On Error Resume Next
        Set Sh = Sheets(CStr(.Range("A" & i).Value))
        On Error GoTo 0
        If Sh Is Nothing Then
            ThisWorkbook.Sheets.Add.Name = CStr(.Range("A" & i).Value)
        Else
            Set Sh = Nothing
        End If
    Next i
End With

End Sub
 

jpb388

XLDnaute Accro
Re : VBA - Ajouter onglet nommé en dernière position

Bonjour à tous
essayes
VB:
Sub MAJ_Onglets()
Dim Sh As Worksheet
Dim Ws As Worksheet
Dim LastLig As Long
Dim i As Integer
Dim j As Integer

j = 2

For Each Ws In Application.Worksheets
    If Ws.Name = Sheets("Feuil1").Range("A" & j) Then
    j = j + 1
    Else
    Application.DisplayAlerts = False
        If Ws.Name <> "Feuil1" Then
    Ws.Delete
    j = j + 1
        End If
    Application.DisplayAlerts = True
    End If

Next Ws
 
With Sheets("Feuil1")
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    For i = LastLig To 2 Step -1
        On Error Resume Next
        Set Sh = Sheets(CStr(.Range("A" & i).Value))
        On Error GoTo 0
        If Sh Is Nothing Then
            ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
            ActiveSheet.Name = CStr(.Range("A" & i).Value)
        Else
            Set Sh = Nothing
        End If
    Next i
End With

End Sub
 

Discussions similaires

Réponses
11
Affichages
296
Réponses
7
Affichages
328

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote