Bonjour,
Je développe depuis quelque temps en VBA et je me trouve aujourd'hui face à quelque chose qui me déplait ...
Version courte :
VBA m'interdit de déclarer un tableau publique dans le code de mon userform. Quelle solution s'offre à moi, autre que déclarer une variable publique dans le Sub appelant le userform ? (qui me semble être une solution "moche")
Version longue :
Grossomodo, j'ai un Sub ("DeleteColonne") qui doit appeler un userform ("UF_ColonneDelete").
Le userform a besoin (entre autre) d'une variable tableau de dimension 1 en paramètre pour pouvoir se construire et alimenter une listview.
Ce code date d'il y a quelque temps, il fonctionne parfaitement car j'utilise des variables publiques dans mon Sub (DeleteColonne)
Mais le soucis c'est que :
- C'est moche, j'ai la variable de mon Sub appelant qui se balade partout dans mon projet
- Mon userform n'est pas autonome, je lui dis "ha au fait, faut que tu récupères aussi une variable d'une autre module pour pouvoir fonctionner, vas y , va la chercher toi même"
- Si je veux modifier le nom de ma variable publique, je dois balayer tout mon projet pour ne pas oublier d'occurence
J'aimerai donc l'améliorer et effectuer un code propre en rendant le code de mon userform autonome.
J'ai donc opter pour la méthode suivante
Code de mon main :
Code de mon userform :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public sub DeleteColonne() dim paramètre1 as string dim Parametre2() as string ' set de mes 2 variables Call UF_ColonnDelete.UF_Show(Paramètre1, Paramètre2) '... End sub
Cette solution est jolie, mais VBA refuse un tableau comme variable publique d'un userform ....
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 public Parametre1 as string Public Parametre2() as string Public Sub UF_Show(Param1 as string, Param2() as string) parametre2 = param2 UF_ColonneDelete.show Param1=parametre1 End sub public sub userform_initialize() ' code qui se lance lorsque UF_ColonneDelete.show est executé ' construction du userform en fonction de parametre2 ' l'utilisateur va rentrer parametre1, puis à la fermeture l'idée est de renvoyer parametre1 en sortie ' ... End sub
Une solution "élégante" existe-t-elle ? Si oui laquelle ?
J’espère avoir été clair ... Merci de vos réponses !
Partager