Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim O As Worksheet 'déclare la variable O (Onglet)
Me.ListBox1.ColumnCount = 2 'définit le nombre de colonnes de la ListBox1
Me.ListBox1.ColumnWidths = ";0" 'masque la seconde colonne de la ListBox1
Me.ListBox2.ColumnCount = 2 'définit le nombre de colonnes de la ListBox2
Me.ListBox2.ColumnWidths = ";0" 'masque la seconde colonne de la ListBox2
For Each O In Worksheets 'boucles sur tous les onglets O du classeur
If O.Columns(Application.Columns.Count).Hidden = False Then 'condition : si la dernière colonne de l'onglet O est cachée
Me.ListBox1.AddItem O.Name 'ajoute l'onglet à la ListBox1 (colonne 0)
Me.ListBox1.Column(1, Me.ListBox1.ListCount - 1) = O.Index 'ajoute l'index de l'onglet à la ListBox1 (colonne 1 masquée)
Else 'sinon
Me.ListBox2.AddItem O.Name 'ajoute l'onglet à la ListBox2 (colonne 0)
Me.ListBox2.Column(1, Me.ListBox2.ListCount - 1) = O.Index 'ajoute l'index de l'onglet à la ListBox2 (colonne 1 masquée)
End If 'fin de la condition
Next O 'prochai onglet de la liste
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'au double-clic dans la ListBox1
Dim TMP0 As String 'déclare la variable TMP0 (TeMPoraire 0)
Dim TMP1 As Integer 'déclare la variable TMP1 (TeMPoraire 1)
If Me.ListBox1.ListCount = 1 Then Exit Sub 'si la ListBox1 ne contient qu'un seul élémnent, sort de la procédure
With Me.ListBox2 'prend en compte la ListBox2
.AddItem Me.ListBox1.Value 'ajoute l'onglet double-cliqué (en colonne 0)
.Column(1, .ListCount - 1) = Sheets(Me.ListBox1.Value).Index 'ajoute l'index de l'onglet double-cliqué (en colonne 1 masquée)
If .ListCount > 1 Then 'condition 1 : si la ListBox2 contient plus d'un seul élément
'tri des onglets
For I = 0 To .ListCount - 1 'boucle 1 : sur tous les éléments (onglets) de la ListBox2
For J = 0 To .ListCount - 1 'boucle 2 : sur tous les éléments (Onglets) de la ListBox2
'condition 2 : si l'index de l'onglet de la boucle 1 est inférieur à l'index de l'onglet de la boucle 2
If CInt(.Column(1, I)) < CInt(.Column(1, J)) Then
TMP0 = .Column(0, J) 'récupère dans la variable TMP0 le nom de l'onglet de la boucle 2
TMP1 = CInt(.Column(1, J)) 'récupère dans la variable TMP1 l'index de l'onglet de la boucle 2
.Column(0, J) = .Column(0, I) 'l'onglet J de la ListBox2 devient l'onglet I
.Column(1, J) = CInt(.Column(1, I)) 'lindex J de la ListBox2 devient l'index I
.Column(0, I) = TMP0 'l'onglet I de la ListBox2 devient TMP0
.Column(1, I) = TMP1 'l'index I de la ListBox2 devient TMP1
End If 'fin de la condition 2
Next J 'prochain onglet de la boucle 2
Next I 'prochain onglet de la boucle 1
End If 'fin de la condition 1
End With 'fin de la prise en compte de la ListBox2
'masque la dernière colonne de l'onglet double-cliqué
Worksheets(Me.ListBox1.Value).Columns(Application.Columns.Count).Hidden = True
Me.ListBox1.RemoveItem (Me.ListBox1.ListIndex) 'supprime l'onglet double-cliquée de la listbox1
End Sub
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'au double-clic dans la ListBox1
Dim TMP0 As String 'déclare la variable TMP0 (TeMPoraire 0)
Dim TMP1 As Integer 'déclare la variable TMP1 (TeMPoraire 1)
With Me.ListBox1 'prend en compte la ListBox1
.AddItem Me.ListBox2.Value 'ajoute l'onglet double-cliqué (en colonne 0)
.Column(1, .ListCount - 1) = Sheets(Me.ListBox2.Value).Index 'ajoute l'index de l'onglet double-cliqué (en colonne 1 masquée)
If .ListCount > 1 Then 'condition 1 : si la ListBox1 contient plus d'un seul élément
'tri des onglets
For I = 0 To .ListCount - 1 'boucle 1 : sur tous les éléments (onglets) de la ListBox2
For J = 0 To .ListCount - 1 'boucle 2 : sur tous les éléments (Onglets) de la ListBox2
'condition 2 : si l'index de l'onglet de la boucle 1 est inférieur à l'index de l'onglet de la boucle 2
If CInt(.Column(1, I)) < CInt(.Column(1, J)) Then
TMP0 = .Column(0, J) 'récupère dans la variable TMP0 le nom de l'onglet de la boucle 2
TMP1 = CInt(.Column(1, J)) 'récupère dans la variable TMP1 l'index de l'onglet de la boucle 2
.Column(0, J) = .Column(0, I) 'l'onglet J de la ListBox2 devient l'onglet I
.Column(1, J) = CInt(.Column(1, I)) 'lindex J de la ListBox2 devient l'index I
.Column(0, I) = TMP0 'l'onglet I de la ListBox2 devient TMP0
.Column(1, I) = TMP1 'l'index I de la ListBox2 devient TMP1
End If 'fin de la condition 2
Next J 'prochain onglet de la boucle 2
Next I 'prochain onglet de la boucle 1
End If 'fin de la condition 1
End With 'fin de la prise en compte de la ListBox2
'AFFICHEla dernière colonne de l'onglet double-cliqué
Worksheets(Me.ListBox2.Value).Columns(Application.Columns.Count).Hidden = False
Me.ListBox2.RemoveItem (Me.ListBox2.ListIndex) 'supprime l'onglet double-cliquée de la listbox2
End Sub