1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| Option Explicit
'**************************************************************************************************
' NAME : Worksheet_Change (EVENT)
' INPUT : Target (Représente la cellule où la valeur a été modifié)
' DESCRIPTION : Le processus va, à partir d'une base de donnée (Table) définisant les niveaux
' d'approbation par type de document, reporter ces niveaux à chaque document créé. Pour que le
' processus renvoi un résultat, il faut que le document est un type.
' L'évenement s'activera uniquement si le type de document est changé dans le Résultat Final
'**************************************************************************************************
Private Sub Worksheet_Change(ByVal Target As Range)
Dim oSheetTypeDoc As Excel.Worksheet 'Feuille contenant la liste des Types
Dim oRangeTypeDoc As Excel.Range 'Cellule contenant le type de doucment
Dim lColumnTypeDoc As Long 'Colonne contenant le type de document
Dim lLastColumn As Long 'Dernière colonne de la feuille contenant les types
Dim lColumn As Long 'Compteur de colonne
Dim lColorApproval As Long 'Couleur pour les documents a approuver
Dim lColorUnapproval As Long 'Couleur pour les documents a ne pas approuver
Dim aApproval() As Variant 'Array contenant les "X"
'Si multi selection de cellule on sort
If VBA.VarType(Target) >= VBA.vbArray Then Exit Sub
'Paramétrage des couleurs. Possibilité des référence RGB
lColorApproval = VBA.vbWhite
lColorUnapproval = VBA.vbBlack
'L'event ne s'applique que pour la colonne Type de document de la feuille Résultat
'Valeur à modifier si besoin
If Target.Column <> 2 Or Target.Value = VBA.vbNullString Then Exit Sub
'Identification de la Table des Types par le nom. A adapter au besoin
Set oSheetTypeDoc = ThisWorkbook.Worksheets("Table")
With oSheetTypeDoc
lColumnTypeDoc = 1 'Numéro de colonne contenant les types de document
'On recherche le type de document
Set oRangeTypeDoc = .Columns(lColumnTypeDoc).Find(Target.Value)
'Si l'on trouve une correspondance
If Not oRangeTypeDoc Is Nothing Then
'Dernière colonne de la feuille Table
lLastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
'On récupère les différents niveaux d'approbation
aApproval = .Range(.Cells(oRangeTypeDoc.Row, lColumnTypeDoc + 1), _
.Cells(oRangeTypeDoc.Row, lLastColumn))
'On affecte les niveaux d'approbation au document
With Target.Parent
For lColumn = LBound(aApproval, 2) To UBound(aApproval, 2)
'Si il y a une valeur alors le document est à approuver
If aApproval(1, lColumn) = VBA.vbNullString Then
.Cells(Target.Row, Target.Column + lColumn).Interior.Color = CLng(lColorUnapproval)
Else
.Cells(Target.Row, Target.Column + lColumn).Interior.Color = CLng(lColorApproval)
End If
Next lColumn
End With
Erase aApproval 'Vidange
Else
VBA.MsgBox "Le type de document n'existe pas", vbCritical, "Information"
End If
Set oRangeTypeDoc = Nothing 'Vidange
End With
End Sub |
Partager