Vba: function: le premier argument ne prend pas de valeur

Fermé
bast_dem Messages postés 4 Date d'inscription lundi 8 avril 2013 Statut Membre Dernière intervention 9 avril 2013 - 8 avril 2013 à 16:02
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 9 avril 2013 à 12:56
Bonjour à tous,

J'ai créé une fonction à 3 arguments; Lors de l'appel de la fonction dans une procédure, les arguments de ma fonction prennent les bonnes valeurs. Pour l'instant tout va bien. Puis "erreur d'execution 9: l'indice n'appartient pas à la selection": erreur indirect car en fait le premier argument de ma fonction ne prend pas la valeur demandé lors de l'appel !

Un exemple sera peut etre plus clair:

procedure ()
...
x=fonction(1,2,3)
...
fin de procedure


fonction(vide,2,3)
...

et en changant de place les arguments, c'est toujours le premier argument qui est vide !

merci de votre aide ;)

5 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
8 avril 2013 à 16:44
Bonjour,
Si tu mettais du code plus explicite ont pourrait peut-être comprendre.
A+
0
bast_dem Messages postés 4 Date d'inscription lundi 8 avril 2013 Statut Membre Dernière intervention 9 avril 2013
8 avril 2013 à 17:23
Sub testCompletBras()
[...]
TabRes_bras_VerifContr = VerificationContrainte(NbreNiv1, ligne1, colonne1)
[...]
End Sub

Function VerificationContrainte(ByVal NbreNiv As Integer, ByVal ligne As Integer, ByVal colonne As Integer) as variant
[...]
End Function

Ma procédure appelle la fonction puis erreur:

Quand je mets le pointeur sur NbreNiv1 j'ai une valeur ( ex: 4 ), idem pour ligne1 et colonne1: normal
ligne et colonne repennent les valeurs de ligne1 et colonne1: normal

Mais NbreNiv ne reprend pas la valeur de NbreNiv1 !

Quand je change l'ordre de mes arguments c'est toujours l'argument en première position qui ne récupère pas la valeur de l'argument de l'appel !

Tout se passe dans le même module, les variables sont bien public.

je sais pas si c'est plus clair !?

Merci d'avance
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
8 avril 2013 à 20:45
Tu a fait copier/Coller pour le code ou tu l'a recopier manuellement ?
Parce que normalement, si tu à fais copier/Coller le -> as variant devrait être As Variant, avec des majuscules.

Si tout est bien comme tu dis, l'erreur est forcément ailleurs.
Met un point d'arrêt sur la toute première ligne de code de la fonction.
Et regarde ce que tu à dans NbreNiv

Tu dis.. Erreur ? mais quel genre d'erreur ? ou ? et quel en est le libellé.
0
bast_dem Messages postés 4 Date d'inscription lundi 8 avril 2013 Statut Membre Dernière intervention 9 avril 2013
9 avril 2013 à 08:53
Bonjour !

NbreNiv est vide.
C'est l' "erreur 9: l'indice n'appartient pas à la selection"
Mais comme tu peux le voir dans le reste du code que je te mets en dessous, cette erreur apparait parce que NbreNiv est vide: quand je redimensionne mon tableau, j'ai une des dimensions = (NbreNiv -1) qui donne -1 vu que NbreDiv est vide ! L'erreur apparait à cause du -1, mais pas à cause du NbreDiv vide ...

Je te met le reste du code, bon courage avec mes variables ...

___________________
Public TabResBras() As Variant
Public NbreNiv1 As Integer
Public NbreNivSansEmbase As Integer
Public Nbre_Bras As Integer

___________________
Sub testCompletBras()

Nbre_Bras = Sheets("bras").Range("A6").End(xlDown).Row - 5
Nbre_colonne = Sheets("colonnes").Range("A6").End(xlDown).Row - 1
tabres_bras1_verifContr = VerificationContrainte(NbreNiv1, ligLgBras1, colLgBras1)

[...]

End Sub

___________________
Function VerificationContrainte(ByVal NbreNiv As Integer, ByVal ligLgBras As Integer, ByVal colLgBras As Integer) As Variant

ContrainteElasticite = Sheets("cste").Cells(1, 2)
Nbre_Bras = Sheets("bras").Range("A6").End(xlDown).Row - 5
NbreNivSansEmbase = NbreNiv - 1
ReDim TabResBras(NbreNivSansEmbase, Nbre_Bras)

[...]
End Function

L'erreur apparait à cause du NbreNivSansEmbase=-1
Si j'inverse NbreNiv avec ligLgBras, c'est ligLgBras qui sera vide ... Je comprends pas ^^

Merci de votre aide!
0
bast_dem Messages postés 4 Date d'inscription lundi 8 avril 2013 Statut Membre Dernière intervention 9 avril 2013
9 avril 2013 à 09:14
Après nouveaux tests, si j'inverse NbreNiv avec ligLgBras, ça marche ... J'ai du me planter quand j'ai tenté la première fois! Cela dit ça n'explique pas le problème !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
9 avril 2013 à 12:56
Toujours difficile de cerner le prob avec des bribes de codes.
Ceci dit, je ne vois pas où tu assigne une valeur à NbreNiv ?
Si tu ne trouve pas tu pourrais mettre ton classeur à disposition ? éventuellement en MP ?
A+
0