Tableau de paramètres

Le
Gloops
Bonjour tout le monde,

Il me semble pourtant avoir déjà fait ce genre de chose il y a quelqu=
es
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électio=
n.
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èse=
s
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 re=
cours à
un variant pour une date, ça ne va pas vraiment dans la même directio=
n
tout ça
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Raymond [mvp]
Le #6350411
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" %
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 ...
Gloops
Le #6350281
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.

Raymond [mvp]
Le #6350261
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" %
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.

Gloops
Le #6350251
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.

Publicité
Poster une réponse
Anonyme