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
| Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OB As Worksheet 'déclare la variable OB (Onglet Billettes)
Dim PVD As Range 'déclare la variable PVD (PLage des Validation de Données)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TVU As Variant 'déclare la variable TVU (Tableau des Valeurs Utilisées)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim L As String 'déclare la variable L (Liste)
Dim TEST As Boolean 'définit la variable TEST
Set OB = Worksheets("BILLETTES") 'définit l'onglet OB
Set PVD = Range("B12:B172") 'définit la plage PVD des validations de données
'si la plage PVD est vide lance la macro [Macro1] du module [Module1], sort de la procédure
If Application.WorksheetFunction.CountBlank(PVD) = PVD.Cells.Count Then Module1.Macro1: Exit Sub
'si le changement a lieu ailleurs que dans la plage PVD, sort de la procédure
If Application.Intersect(Target, PVD) Is Nothing Then Exit Sub
TVU = PVD 'définit le tableau TVU des valeurs utilisées
TV = OB.Range("A1").CurrentRegion 'définit les tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle 1 sur toutes les lignes I du tableau des valeurs TV
TEST = False 'réinitialise la variable TEST
For J = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs utilisées TVU
'si la valeur TV(I,1) est déjà utilisée, redéfinit la variable TEST, sort de la boucle 2
If TV(I, 1) = TVU(J, 1) Then TEST = True: Exit For
Next J 'prochaine ligne de la boucle 2
'si TEST est [VRAI] redéfinit la liste L (TV(I,1) si L est vide, sinon L suivie d'une virgule, suivi de TV(I,1))
If TEST = False Then L = IIf(L = "", TV(I, 1), L & "," & TV(I, 1))
Next I 'prochaine ligne de la boucle 1
With PVD.Validation 'prend en compte la validation de données de la plage PVD
.Delete 'supprime une éventuelle ancienne validation de données
.Add xlValidateList, Formula1:=L 'ajoute la liste L comme liste de validation de données
End With 'fin de la prise en compte de la plage PVD
End Sub |
Partager