VBA: Passer en paramètre de fonction une ligne d'un tableau (listbox) bidimensionnel

Guy_M

XLDnaute Occasionnel
Bonjour,

Je voudrais passer en paramètre une ligne d'une listbox à une fonction.
La déclaration de la fonction est de ce type
Code:
Function Mafonction(Montab() as string...
Je n'ai pas trouvé de moyen simple pour passer une ligne d'une listbox de n colonnes lors de l'appel de la fonction
Code:
Resultat=Mafonction(MaListBox.list(i)...)
génère une erreur à la compilation
J'ai trouvé une solution qui ne me satisfait pas en utilisant un tableau intermédiaire
Code:
dim TabInter(0,n-1) as string
'TabInter(0)=MaListBox.list(i) génère une erreur
For j=0 to n-1
  TabInter(0,j)=MaListBox.list(i,j))
next j
Resultat=Mafonction(TabInter...)
Quelqu'un aurait-il une solution plus élégante ?
Par avance, je vous remercie de vos réponses.
Guy
 

Dranreb

XLDnaute Barbatruc
Re : VBA: Passer en paramètre de fonction une ligne d'un tableau (listbox) bidimensio

Bonjour.

Personnellement je passerais sans doute carrément la ListBox en paramètre de la fonction, surtout si la ligne à en exploiter est son ListIndex.
VB:
Private Function MaFonction(ByVal Lbx As MSForms.ListBox)
 

Guy_M

XLDnaute Occasionnel
Re : VBA: Passer en paramètre de fonction une ligne d'un tableau (listbox) bidimensio

Bonjour Dranreb,

Merci pour cette réponse.

Si je passe la listbox à ma fonction, la fonction va travailler sur toute la listbox alors que je ne veux qu'elle ne travaille que sur une ligne de la lisbox.

De plus, ma fonction travaille sur le contenu d'un tableau pas celui d'une listbox.

Salutations
Guy Marty
 

Guy_M

XLDnaute Occasionnel
Re : VBA: Passer en paramètre de fonction une ligne d'un tableau (listbox) bidimensio

Bonjour,

Après plusieurs test, il est impossible de passer MaListbox.list en paramètre de la MaFonction, je doit passer par un tableau intermédiaire.

Heureusement que quand je dois passer MaListbox.list en entier je peux faire une affectation directe.

Code:
Dim TabInter() as variant
TabInter=MaListBox.list
Resultat=Mafonction(TabInter...)

Une chose me chagrine : je n'ai pas encore réussi l'affectation directe pour une ligne
Code:
dim TabInter(0,n-1) as Variant
TabInter(0)=MaListBox.list(i)
retourne l'erreur "nombre de dimensions incorrecte".

A bientôt
Guy
 

Paf

XLDnaute Barbatruc
Re : VBA: Passer en paramètre de fonction une ligne d'un tableau (listbox) bidimensio

Bonjour

Même si l'indice de tableau débute à 0 par défaut, il faut quand même lui allouer au moins une 'place' dans chaque dimension.

dim TabInter(0,n-1) as Variant

dim TabInter(1,n-1) as Variant

A+
 

Guy_M

XLDnaute Occasionnel
Re : VBA: Passer en paramètre de fonction une ligne d'un tableau (listbox) bidimensio

Bonjour Paf,

C'est ce que je pensais, jusqu'à ce que j'ai constaté à mes dépends que c'est faux.

Alors qu'intuitivement on pense que la déclaration donne la taille du tableau, elle définit le plus grand indice soit la taille+1 avec "Option base 0" (c'est Utiliser les variables tableaux en VBA Excel qui m'a mis la puce à l'oreille)

La documentation de Microsoft est très claire la dessus dans Ce lien n'existe plus

Dim, instruction (Visual Basic)
Déclare et alloue de l'espace de stockage pour une ou plusieurs variables.
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist

(...)

variablelist
Requis. Liste des variables qui sont déclarées dans cette instruction.
variable [ , variable ... ]
Chaque variable emploie la syntaxe et les paramètres suivants :
variablename [ ( [ boundslist ] ) ](...)

boundslist Optionnel. Liste des limites de chaque dimension d'une variable tableau.

La limite n'est pas la taille, la taille est limite supérieure - limite inférieure +1

A bientôt
Guy
 

Paf

XLDnaute Barbatruc
Re : VBA: Passer en paramètre de fonction une ligne d'un tableau (listbox) bidimensio

Re,

Dans le cas de l'affectation directe d'une ligne, TabInter est déclaré comme Tableau à 2 dimensions.

Or dans TabInter(0)=MaListBox.list(i) il n'y en a qu'une de précisée.

A+
 

Guy_M

XLDnaute Occasionnel
Re : VBA: Passer en paramètre de fonction une ligne d'un tableau (listbox) bidimensio

reBonjour Paf,

Comme TabInter=MaListBox.list fonctionne, naïvement, je me suis dit que cela pouvait fonctionner pour une des dimensions.

Moralité, ne pas utiliser l'intuition pour les tableaux.

A bientôt
Guy
 

Discussions similaires

Statistiques des forums

Discussions
314 630
Messages
2 111 384
Membres
111 118
dernier inscrit
gmc