Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'au changement de sélection
If test = True Then Exit Sub 'si la variable test est vrai, sort de la procédure
On Error GoTo suite1 'si une erreur est générée, va à l'étiquette "suite1"
'si la première variable du tableau de variables tb est vide, attribue à la première variable l'adresse de la cellule active (génère une erreur si le tableau est vide...)
If tb(0) = "" Then tb(0) = ActiveCell.Address
GoTo suite2 'va à l'étiquette "suite2
suite1: 'étiquette (arrive ici si le tableau de variale tb n'a pas e''e initialisé)
ReDim Preserve tb(0) 'redimensionne le tableau de variable tb
tb(0) = ActiveCell.Address 'attribue à la première variable l'adresse de la cellule active
Exit Sub 'sort de la procédure
suite2: 'étiquette (arrive ici si le tableau a été initilisé)
On Error GoTo 0 'annule la gestion des erreurs
If UBound(tb) < 19 Then 'condition : si le tableau contient mois de 20 variables
ReDim Preserve tb(UBound(tb) + 1) 'redimensionne le tableau (ajoute une variable)
tb(UBound(tb)) = ActiveCell.Address 'attribue à la nouvelle variable l'adresse de la cellule active
Else 'sinon (quand le tableau contient 20 variables)
For x = 0 To UBound(tb) - 1 'boucle sur les 19 premières variables
tb(x) = tb(x + 1) 'attribue à la variable la valeur de la variable précédent
Next x 'prochaine variable de la boucle
tb(19) = ActiveCell.Address 'attribue à la dernière variables la valeur de la cellule active
End If
End Sub