Erreur ByRef et tableau [Résolu]

Signaler
Messages postés
359
Date d'inscription
mardi 14 octobre 2003
Statut
Membre
Dernière intervention
7 septembre 2009
-
Messages postés
359
Date d'inscription
mardi 14 octobre 2003
Statut
Membre
Dernière intervention
7 septembre 2009
-
Bonjour,
J'ai un tableau dynamique Tableau(), et je souhaiterai utiliser la donnée de Tableau(1) dans une fonction.
Sauf qu'au niveau de :
Variable = Fonction(Tableau(1)) : j'obtient un message d'erreur qui me dit que le type ByRef est incompatible.

Si, au niveau de la déclaration de la fonction, j'ajoute "ByVal" juste devant le nom de la varible pour l'argument ; je n'ai plus d'erreur.
Mais si je n'ai pas accès à la déclaration de la variable, comme pour par exemple :

List1.list(Tableau(1)) : j'ai la même erreur.

La seule solution que j'ai trouvé est de placer le contenu de Tableau(1) dans une variable intermédiaire, mais ce n'est pas pratique.
Quelqu'un aurait il une solution ?

Merci d'avance

8 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Alors donc dans
Variable = Fonction(Tableau(1))
--> Variable doit être de type Integer

Et sinon, c'est logique que tu aies une erreur, ContactVersNum  (dans ta fonction ici présente) n'est pas déclarée, et qui dit ByRef, dit que nom devrait (logiquement) récupérer une autre valeur.
Sinon, faut mettre ByVal.

Et pour finir, si la fonction est placée hors du Module de la Form où se trouve ta List1, il faut, devant List1 dans le code de ta fonction, placer le nom de la Form.

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Salut, pour te répondre, j'aimerais bien connaître le code de ta function.

Par ailleurs, si Tableau(1) contient un integer, je ne vois pas pourquoi List1.list(Tableau(1)) te renverrait une erreur si Tableau(1) contient de l'integer et que ce nombre est < List1.ListCount.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

je confirme, il nous faut ta fonction pour te répondre.
Les types de données doivent être correspondant.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
359
Date d'inscription
mardi 14 octobre 2003
Statut
Membre
Dernière intervention
7 septembre 2009

Function NumContact(Nom As String) As Integer

For i = 0 To (List1.ListCount - 1)
If Nom = List1.List(i) Then
ContactVersNum = i
Exit Function
End If
Next i

End Function

Voilà une des fonctions
Messages postés
359
Date d'inscription
mardi 14 octobre 2003
Statut
Membre
Dernière intervention
7 septembre 2009

"Et pour finir, si la fonction est placée hors du Module de la Form où se trouve ta List1, il faut, devant List1 dans le code de ta fonction, placer le nom de la Form."

Oui, ça je sais bien :P

Après avoir re-testé quelques fois, il y a des trucs qui ne marchaient pas avant et qui marchent maintenant, sans même avoir remarqué ce que j'ai modifié entre temps lol.
Bref, le problème a l'air résolu..

Merci de vos réponses
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
De rien,

et  "Oui, ça je sais bien :P"  >> c'était au cas où  :$

bonne prog

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
En plus de ce que Mortalino t'a expliqué, une Function doit retourner
une valeur, ici un Integer. Peut-être est-ce une faute d'inattention,
peut-être que la Function a été modifiée avec le temps et que tu as
oublié de changer le nom de la Function de retour,... Et possiblement
que tu n'as pas Option Explicit déclaré en haut de la page de code....


Function NumContact(Nom As String) As Integer


For i = 0 To (List1.ListCount - 1)

  If Nom = List1.List(i) Then

'<strike>  ContactVersNum = i</strike>

  NumContact = i  ' ici, ce doit être le nom de la Function, en principe.

  Exit Function

  End If

Next i


End Function

MPi
Messages postés
359
Date d'inscription
mardi 14 octobre 2003
Statut
Membre
Dernière intervention
7 septembre 2009

Effectivement j'ai modifié le nom de la fonction pour l'afficher ici ; le nom de départ de la fonction est bien ContactVersNum :). Donc il n'y avais pas de problème à ce niveau là

Mais bonne remarque