Bonjour,

J'ai un formulaire avec cette listbox qui liste les 3 premières colonnes de mon tableau Excel.

J'aimerai lister une 4ᵉ colonne, la colonne N°45 de mon fichier Excel contenant des sommes en CHF, mais je n'arrive pas à adapter le code d'initialisation.

Dans un deuxième temps, lors de la recherche avec TextBox1_Change, j'aimerai additionner les valeurs de la colonne N°45 des lignes trouvées par la recherche et afficher l'addition dans un label

Est-ce possible ?

Merci et meilleures salutations
Philippe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Private Sub UserForm_Initialize()
Dim LargeurCol()
    'TextBox1 est une ComboBox pour éviter de remplacer le texte
    Me.TextBox1.List = Array( _
    "A_planifier_dépannage", _
    "A_planifier_réparations", _
    "A_planifier En ville", _
    "A_planifier Zone-1", _
    "A_planifier Zone-2", _
    "A_planifier Zone-3", _
    "A_planifier Zone-4", _
    "A_planifier_livraison_1_tech.", _
    "A_planifier_livraison_2_tech.", _
    "A_planifier", _
    "Livraison", _
    "Dépannage", _
    "Devis_en_cours", _
    "En_commande", _
    "Réparations_client", _
    "Réparations_atelier", _
    "A_facturer", _
    "Terminer")
    Set f = Sheets("DATA_Interventions")
    Set Rng = f.Range("A3:E" & f.[A65000].End(xlUp).Row) 'Dernière colonne, indiquer au minimum la colonne suivante : pour afficher F indiquer E
    Me.ListBox1.ColumnCount = 3
    colVisu = Array(1, 2, 3) 'Numéros des colonnes à afficher
    LargeurCol = Array(0, 0, 1700) 'largeur des colonnes, 0 pour masquer l'ID et l'adresse de la ligne Data
    Me.ListBox1.ColumnWidths = Join(LargeurCol, ";")
    colInterro = Array(3) 'Numéros des colonnes de la feuille DATA dans lesquels rechercher
    Decal = Rng.Row - 1 'Début de la base de donnée
    BD = Rng.Value
    Col = UBound(BD, 2): For i = LBound(BD) To UBound(BD): BD(i, Col) = i + Decal: Next i 'no enreg
    NcolInt = UBound(colInterro) + 1
    Ncol = UBound(colVisu) + 1 'ReDim ancien(1 To 1, 1 To Ncol)
    'Génération de choix()
    ReDim choix(1 To UBound(BD))
    Col = UBound(BD, 2)
    For i = LBound(BD) To UBound(BD)
        For Each k In colInterro
            choix(i) = choix(i) & BD(i, k) & "|"
        Next k
        choix(i) = choix(i) & BD(i, Col) & "|" 'no enreg
    Next i
        TriS choix, 1, UBound(choix)
        'Valeurs initiales dans ListBox
        Dim Tbl(): ReDim Tbl(1 To UBound(BD), 1 To Ncol + 1)
        For i = 1 To UBound(BD)
        c = 0
            For Each k In colVisu
                c = c + 1: Tbl(i, c) = BD(i, k)
            Next k
        c = c + 1: Tbl(i, c) = i + Decal
    Next i
    TriMultiCol Tbl, 1, LBound(Tbl), UBound(Tbl)
    Me.ListBox1.List = Tbl
    Me.ListBox1.ListIndex = -1
    Me.TextBox1 = " " 'Initialisation avec un espace pour déclencher le tri de la colonne 3 du USF
    'Exemple : Ci-dessous l'espace est situé entre les 2 ComboBox
    'Me.TextBox1 = USF_Intervention.ComboBox_Interv_Nom & " " & USF_Intervention.ComboBox_Interv_Prenom
    Me.TextBox1.SetFocus 'Placer le curseur dans la recherche
End Sub
Private Sub TextBox1_Change()
    If Me.TextBox1 <> "" Then
        Mots = Split(Trim(Me.TextBox1), " ")
        Tbl = choix
        For i = LBound(Mots) To UBound(Mots)
            Tbl = Filter(Tbl, Mots(i), True, vbTextCompare)
        Next i
        If UBound(Tbl) > -1 Then
            Dim b(): ReDim b(1 To UBound(Tbl) + 1, 1 To Ncol + 1)
            For i = LBound(Tbl) To UBound(Tbl)
                a = Split(Tbl(i), "|")
                j = a(NcolInt) - 1 - Decal + 1
                For k = 1 To Ncol
                    kk = colVisu(k - 1)
                    xx = UBound(BD)
                    b(i + 1, k) = BD(j, kk)
                Next k
                b(i + 1, k) = j + 1
            Next i
            Me.ListBox1.List = b
        Else
            Me.ListBox1.Clear
        End If
        Me.Label_Nombre_trouve.Caption = "Trouvé : " & UBound(Tbl) + 1
    Else
        UserForm_Initialize 'Ne pas initializer si textbox vide car recharge les données du nom et du prénom
    End If
End Sub
Sub TriMultiCol(a, ColTri, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2, ColTri)
  g = gauc: d = droi
  Do
    Do While a(g, ColTri) < ref: g = g + 1: Loop
    Do While ref < a(d, ColTri): d = d - 1: Loop
    If g <= d Then
      For k = LBound(a, 2) To UBound(a, 2)
        temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
      Next k
      g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call TriMultiCol(a, ColTri, g, droi)
  If gauc < d Then Call TriMultiCol(a, ColTri, gauc, d)
End Sub
Sub TriS(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
        temp = a(g): a(g) = a(d): a(d) = temp
        g = g + 1: d = d - 1
     End If
   Loop While g <= d
   If g < droi Then Call TriS(a, g, droi)
   If gauc < d Then Call TriS(a, gauc, d)
End Sub