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

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour,
    Si tu mettais du code plus explicite ont pourrait peut-être comprendre.
    A+
    1. 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
      1. Contributeur
        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é.
        1. 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!
          1. 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 !
        2. Contributeur
          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+