Bonjour,

J'ai cherché plusieurs heures sur différents forums et ai testé différentes solutions proposées mais cela ne fonctionne pas.
Je m'en remets donc a vous en espérant que quelqu'un pourra m'aider.

Sous Excel, je veux écrire une fonction en VBA, et l’exécuter a l'aide d'un bouton a partir de différents formulaires.
Cette fonction aura pour objectif de capter les informations d'une listbox pour la stocker dans un tableau multidimensionnel, puis de faire des opérations dans ce tableau (tri selon une colonne, suppression des doublons, ...) et enfin d'alimenter une listbox avec le résultat du tableau.

Ainsi, les paramètres de ma fonction sont entre autre le nom de la listbox initiale, la listbox finale, mais aussi le nom des formulaires contenants les listbox. Ceci afin de pouvoir utiliser ultérieurement ma fonction dans différentes situations.

Dans le code j'utilise donc la syntaxe Controls(MaListe) pour faire référence a la listbox.
Mais concernant le formulaire, je ne trouve pas la bonne syntaxe.
J'ai essayé : Forms(xxxx), Userforms(xxxx), VBA.Forms(xxxx), .... rien ne passe.

Si je code en dur le nom du formulaire, cela fonctionne, mais en variable, cela me renvoie l'erreur
Sub ou fonction non définie
sur la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Tableau(J, i) = Forms(Form_Ini).Controls(Liste_Ini).Column(J - 1, i - 1)
En dur le code Tableau(J, i) = Test_Fonction.Controls(Liste_Ini).Column(J - 1, i - 1) fonctionne correctement, mais je ne peux pas m'en satisfaire car ma fonction doit fonctionner dans tous les formulaires.

L'utilisation de Me.Controls(.......) ne fonctionne pas non plus.

Voici le code complet de ma fonction.
J'utilise un formulaire de test pour lancer ma fonction, il se nomme "Test_Fonction".


Voila, j’espère avoir été suffisamment clair.
Merci par avance de vos avis et conseils.

Rodolphe

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
Function Tri_Doublon_Liste_String(Form_Ini, Liste_Ini, Form_Final, Liste_Final, C, L, Index_Col_Tri, Col_Doublon, Sens)
 
'**************************************************************************
'   COL_TRI         : si pas de tri "SANS"
'   COL_DOUBLON     : si pas de suppression doublons "SANS"
'   SENS            : "ASC" ou "DESC" ou "SANS"
'   C               : Nb Colonnes
'   L               : Nb Lignes
'**************************************************************************
 
Dim i As Integer, J As Integer, T As Variant, Tableau() As Variant, Tableau2() As Variant
ReDim Tableau(1 To C, A To L)
ReDim Tableau2(1 To L, 1 To C)
 
'**************************************************************************
'                      REMPLISSAGE TABLEAU
'**************************************************************************
 
For i = 1 To UBound(Tableau, 2)
    For J = 1 To UBound(Tableau, 1)
    'Tableau(J, i) = Test_Fonction.Controls(Liste_Ini).Column(J - 1, i - 1)
    Tableau(J, i) = Forms(Form_Ini).Controls(Liste_Ini).Column(J - 1, i - 1)
    Next J
Next i
 
'**************************************************************************
'                      TRI TABLEAU
'**************************************************************************
 
For i = 1 To UBound(Tableau, 1)
     For J = 1 To UBound(Tableau, 2) - 1
        If Tableau(Index_Col_Tri, J) > Tableau(Index_Col_Tri, J + 1) Then
            For y = 1 To UBound(Tableau, 1)
                T = Tableau(y, J)
                Tableau(y, J) = Tableau(y, J + 1)
                Tableau(y, J + 1) = T
            Next y
        End If
    Next J
Next i
 
'**************************************************************************
'                            INVERSION TABLEAU
'**************************************************************************
 
For i = 1 To UBound(Tableau, 2)
     For J = 1 To UBound(Tableau, 1)
Tableau2(i, J) = Tableau(J, i)
    Next J
Next i
 
'**************************************************************************
'                            MAJ LISTE
'**************************************************************************
 
Forms(Form_Final).Controls(Liste_Final).List() = Tableau2
 
End Function