Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim O As Worksheet 'déclare la variable O (Onglet)
Set OS = Worksheets("FEUILLE TEST") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 4)) = "" 'alimente le dictionnaire D avec les données en colonne 4 de TV (Ressources)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon (les clés)
Call Tri(TMP, LBound(TMP), UBound(TMP)) 'lance la procédure de tri alphabétiques du tableau TMP
For I = 0 To UBound(TMP) 'boucle sur tous les éléments I du tableau temporaire TMP
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set O = Worksheets(TMP(I)) 'définit l'onglet O (génère une erreur si cet onglet n'existe pas)
    If Err > 0 Then 'condition : si une erreur a été généré
        Err.Clear 'supprime l'erreur
        Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute l'onglet de la boucle en dernière position
        ActiveSheet.Name = TMP(I) 'renomme l'onglet
        Set O = ActiveSheet 'définit l'onglet O
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
Next I 'prochain élément de la boucle
End Sub
Sub Tri(a, gauc, droi) ' Quick sort ---> tiré du site de Jacques Boisgontier : http://boisgontierj.free.fr/
ref = a((gauc + droi) \ 2)
g = gauc: D = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(D): D = D - 1: Loop
    If g <= D Then
        TMP = a(g): a(g) = a(D): a(D) = TMP
        g = g + 1: D = D - 1
    End If
Loop While g <= D
If g < droi Then Call Tri(a, g, droi)
If gauc < D Then Call Tri(a, gauc, D)
End Sub