Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tableau de paramètres

4 réponses
Avatar
Gloops
Bonjour tout le monde,

Il me semble pourtant avoir d=E9j=E0 fait ce genre de chose il y a quelqu=
es=20
ann=E9es, mais l=E0 je me fais jeter.

Je veux passer un tableau de param=E8tres =E0 une fonction, je m'y prends=
=20
comme suit.

Je m'attends =E0 ce que le MsgBox m'affiche 3, or il m'affiche 0.
En faisant une pause dessus, si je demande P(0), on me r=E9pond erreur 13=
,=20
incompatibilit=E9 de type.
Si je demande P(1), erreur 9, l'indice n'appartient pas =E0 la s=E9lectio=
n.
UBound(P) me retourne 0.

En pas =E0 pas j'avance de deux pas, je me retrouve donc =E0 la fin de la=
=20
proc=E9dure Appel, je retrouve bien :
? UBound(T)
3
? T(0)
Z=E9ro
? T(1)
Un
? T(2)
Deux

M=EAme r=E9sultat si dans l'appel je ne mets pas de paire de parenth=E8se=
s=20
derri=E8re le T.

Aurais-je gaff=E9 ?


Option Compare Database

Public Sub Appel()
Dim T() As String
ReDim T(3)
T(0) =3D "Z=E9ro"
T(1) =3D "Un"
T(2) =3D "Deux"
T(3) =3D "Trois"
Debug.Print FonctionParam("Test", T())
End Sub

Public Function FonctionParam(S As String, ParamArray P() As Variant)
MsgBox UBound(P), , S
End Function

'Message : 0
'Titre : "Test"

' **********************

Pour finir je r=E9ussis =E0 faire l'appel en =E9crivant simplement

Debug.Print FonctionParam("Test", T)

Public Function FonctionParam(S As String, P)

=E7a juste apr=E8s avoir cr=E9=E9 un module de classe pour =E9viter le re=
cours =E0=20
un variant pour une date, =E7a ne va pas vraiment dans la m=EAme directio=
n=20
tout =E7a ...

4 réponses

Avatar
Raymond [mvp]
Bonjour.

ci-dessous un exemple simple qui fonctionne:

Dim T(10) As String

Private Sub Commande1_Click()
T(1) = 5
T(2) = 20
FonctionParam "zz", T
End Sub

Public Function FonctionParam(S As String, ByRef T)
Debug.Print T(1)
Debug.Print T(2)
End Function

c'est surtout le ByRef qui est obligatoire mais qui est la valeur par
défaut.
Public Function FonctionParam(S As String, T) convient très bien.

ça avance ?
--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Gloops" a écrit dans le message de news:
%
Bonjour tout le monde,

Il me semble pourtant avoir déjà fait ce genre de chose il y a quelques
années, mais là je me fais jeter.

Je veux passer un tableau de paramètres à une fonction, je m'y prends
comme suit.

Je m'attends à ce que le MsgBox m'affiche 3, or il m'affiche 0.
En faisant une pause dessus, si je demande P(0), on me répond erreur 13,
incompatibilité de type.
Si je demande P(1), erreur 9, l'indice n'appartient pas à la sélection.
UBound(P) me retourne 0.

En pas à pas j'avance de deux pas, je me retrouve donc à la fin de la
procédure Appel, je retrouve bien :
? UBound(T)
3
? T(0)
Zéro
? T(1)
Un
? T(2)
Deux

Même résultat si dans l'appel je ne mets pas de paire de parenthèses
derrière le T.

Aurais-je gaffé ?


Option Compare Database

Public Sub Appel()
Dim T() As String
ReDim T(3)
T(0) = "Zéro"
T(1) = "Un"
T(2) = "Deux"
T(3) = "Trois"
Debug.Print FonctionParam("Test", T())
End Sub

Public Function FonctionParam(S As String, ParamArray P() As Variant)
MsgBox UBound(P), , S
End Function

'Message : 0
'Titre : "Test"

' **********************

Pour finir je réussis à faire l'appel en écrivant simplement

Debug.Print FonctionParam("Test", T)

Public Function FonctionParam(S As String, P)

ça juste après avoir créé un module de classe pour éviter le recours à
un variant pour une date, ça ne va pas vraiment dans la même direction
tout ça ...
Avatar
Gloops
Raymond [mvp] a écrit, le 11/04/2008 22:03 :
c'est surtout le ByRef qui est obligatoire mais qui est la valeur par
défaut.
Public Function FonctionParam(S As String, T) convient très bien.

ça avance ?


Bon, eh bien si tu dis toi-même que c'est ça qu'il faut faire, pas la
peine de s'embêter :)

J'avais quelques scrupules à ne déclarer aucun type ni à l'appel ni au
début de la fonction.

D'autant qu'on trouve ça et là quelques exemples avec des types plus
précis, je me disais que ces gens-là avaient dû tester.

Bon, eh bien je vais continuer sans type, mon import fonctionne.

Merci.

Avatar
Raymond [mvp]
Bonsoir.

le type est bien déclaré car on met Byref, donc il prend le type du
paramètre passé.

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Gloops" a écrit dans le message de news:
%
Raymond [mvp] a écrit, le 11/04/2008 22:03 :
c'est surtout le ByRef qui est obligatoire mais qui est la valeur par
défaut.
Public Function FonctionParam(S As String, T) convient très bien.

ça avance ?


Bon, eh bien si tu dis toi-même que c'est ça qu'il faut faire, pas la
peine de s'embêter :)

J'avais quelques scrupules à ne déclarer aucun type ni à l'appel ni au
début de la fonction.

D'autant qu'on trouve ça et là quelques exemples avec des types plus
précis, je me disais que ces gens-là avaient dû tester.

Bon, eh bien je vais continuer sans type, mon import fonctionne.

Merci.

Avatar
Gloops
Raymond [mvp] a écrit, le 12/04/2008 20:32 :
Bonsoir.

le type est bien déclaré car on met Byref, donc il prend le type du
paramètre passé.



mais, ledit type peut être n'importe lequel, un peu comme avec un Varia nt.

Alors qu'après avoir déclaré un tableau de champs par exemple, si o n
dérapait à insérer un entier dedans on aurait tout de suite une ale rte,
hep, faut vite réveiller le programmeur.