XL 2019 test dossier pour renvoi valeur

Ydr79

XLDnaute Nouveau
bonjour le forum

cela fait longtemps que j'ai pas eu besoin de vos lumières. j'ai des notions en VBA basique mais là je bloque sur un problème.

je dois contrôler des dossiers et les classer en fonction des contrôles effectués en 3 critères.

j'ai mis un fichier à dispo avec mes contraintes et des explications claires ( enfin j’espère) sur les attendus.

En vous remerciant par avance de vos lumières sur ce problème.

cordialement
 

Pièces jointes

  • test sur colonne.xlsm
    59.4 KB · Affichages: 13

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Ydr et bienvenu, bonsoir e forum,

Un peu extravagant mais je n'ai pas mieux :

VB:
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
 

Discussions similaires

Réponses
18
Affichages
621

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16