Sub Macro1()
Dim TA(1 To 3) As String 'déclare le tableau TA de 3 variables
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TEST As Boolean 'déclare la variable TEST
TA(1) = "Aucune anomalie" 'définit la variable TA(1)
TA(2) = "Absence PJ" 'définit la variable TA(2)
TA(3) = "Absence dossier" 'définit la variable TA(3)
Set O = Worksheets("CONTROLE") 'définit l'onglet O
Set D = CreateObject("Scripting.Dictionary") 'définit le distionnaire D
DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne édité DL de la colonne A de l'onglet O
TV = O.Range("A1:Q" & DL) 'définit la tableau des valeurs TV
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, 12)) = "" 'alimente le dictionnaire D avec les dinnées en colonne 12 (=> colonne L)
If TV(I, 12) <> "Aucune anomalie" Then TEST = True 'si la donnée ligne I colonne 12 est différente de "Aucune anomalie", définit la variable TEST : [Vrai]
Next I 'prochaine ligne de la boucle
'si TEST est [Faux] écrit "DA sans anomalie" dans la cellule Q2 redimensionnée au nombre de ligne de TV moins une, sort de la procédure
If TEST = False Then O.Range("Q2").Resize(UBound(TV, 1) - 1, 1).Value = "DA sans anomalie": Exit Sub
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des élémentds du dictionnaire D sans doublons
TEST = False 'réinitialise la variable TEST
For I = 0 To UBound(TMP) 'boucle sur tous les éléments I du tableau temporaire TMP
'si l'élément de la boucle, converti en majuscules est égal à "ABSENCE PJ" ou à "ABSENCE DOSSIER", redéfinit la variable TEST, sort de la boucle
If UCase(TMP(I)) = "ABSENCE PJ" Or UCase(TMP(I)) = "ABSENCE DOSSIER" Then TEST = True: Exit For
Next I 'prochain élément de la boucle
'si TEST est [VRAI] écrit "DA avec anomalie PJ seule" dans la cellule Q2 redimensionnée au nombre de ligne de TV moins une
If TEST = True Then O.Cells(2, "Q").Resize(UBound(TV, 1) - 1, 1).Value = "DA avec anomalie PJ seule"
TEST = False 'réinitialise la variable TEST
For I = 0 To UBound(TMP) 'boucle sur tous les éléments I du tableau temporaire TMP
If UCase(TMP(I)) <> UCase(TA(1)) Then 'condition 1 : si l'élément I de la boucle converti en majuscules est différent de TA(1) convertie en majuscules
If UCase(TMP(I)) <> UCase(TA(2)) Then 'condition 2 : si l'élément I de la boucle converti en majuscules est différent de TA(2) convertie en majuscules
If UCase(TMP(I)) <> UCase(TA(3)) Then TEST = True 'condition 2 : si l'élément I de la boucle converti en majuscules est différent de TA(3) convertie en majuscules , redéfinit la variable TEST
End If 'fin de la condition 2
End If 'fin de la condition 1
Next I 'prochain élément de la boucle
'si TEST est [VRAI] écrit "DA à expertiser" dans la cellule Q2 redimensionnée au nombre de ligne de TV moins une
If TEST = True Then O.Cells(2, "Q").Resize(UBound(TV, 1) - 1, 1).Value = "DA à expertiser"
End Sub