IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Passage de paramètre différents dans une procedure / fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 26
    Par défaut Passage de paramètre différents dans une procedure / fonction
    Bonjour a tous

    j'ai écris le code suivant qui me permet de tester si un tableau de structure est déjà instancié ou non et de le redimentionner sinon mais ce code me génère une erreur (voir plus bas)

    si quelqu'un voit l'erreur et comment je peux la résoudre sans avoir à créer n procédure différente en fonction des types !

    J'ai également cherché pour créer un module d'objet public mais je n'y suis pas arrivé

    Cordialement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Option Explicit
     
     Type t1
      i As Integer
      c As Characters
    End Type
     
     Type t2
      i As Integer
      c As Characters
      s As String
      t() As t1
    End Type
     
    Public sub proc (v as variant)
    Dim i As Integer
     
    On Error GoTo traitErr
     
    i = UBound(v) + 1
    ReDim Preserve v(i)
     
    exit sub
     
    traitErr:
       i = 0
       Resume Next
    End Sub
     
     
    Public Sub test_Passage_params()
    Dim v1() As t1
    Dim v2() As t2
     
    proc v1
    proc v2
     
    End Sub
    erreur générée:
    Images attachées Images attachées  

  2. #2
    Membre très actif
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 383
    Par défaut
    Bonjour,

    Les variables définies par vos types ne sont pas des variables tableau et on ne voit pas à quel moment vous chargez vos matrices.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Sub test_Passage_params()
     
    Dim I As Integer
    Dim v1(1) As Variant ' t1
    Dim v2(2) As Variant ' t2
    Dim V3(1) As Variant ' Correspond à la variable tableau dans t2
     
        ' Les valeurs sont à adapter.
        v1(0) = 1: v1(1) = "X"
        v2(0) = 2: v2(1) = "Y": v2(2) = "Z"
        V3(0) = 1: V3(1) = "X"
     
        ' Exemple de restitution
        For I = LBound(v2) To UBound(v2)
            Debug.Print I & " : " & v2(I)
        Next I
     
     
    End Sub


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        ' Si la dimension des matrices doit évoluer par la suite, il vous faut passer en deux dimensions tout de suite
        ' On aurait écrit à l'initialisation
        ReDim v1(1, 0) '....
     
        ' Et dans le cours du programme
        ReDim Preserve v1(1, I) ' Preserve n'agit que sur la dernière dimension de la matrice
        ' Chargement des valeurs
        '...
        ' Exemple de restitution
        For I = LBound(v2, 2) To UBound(v2, 2)
            Debug.Print I & " : " & v2(0, I) & ", " & v2(1, I) & ", " & v2(3, I)
        Next I
    Nb : Les modules sont publics par défaut.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 26
    Par défaut Explication:
    en fait j'ai 2 tableaux de structure

    ils sont au départ déclarés à Nothing:

    Dim v1() As t1
    Dim v2() As t2

    Avec t1 une structure de type:
    Type t1
    i As Integer
    c As Characters
    End Type

    Et t2 une structure de type:
    Type t2
    i As Integer
    c As Characters
    s As String
    t() As t1
    End Type

    La première fois si je fais ubound(v) , comme l'élément est encore à Nothing j'ai un message d'erreur et donc je voulais créer une fonction dans laquelle je passais en paramètre soit v1 soit v2 et qui teste si la variable était déjà dimensionnée si oui me renvoyait la dimension + 1 sinon me renvoyé 1.

    n'ayant pas trouvé la solution (mais je serais intéressé si quelqu'un a la solution) je l'ai fait par une gestion des erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    sub proc()
    dim b()
    dim i as integer
     
    On Error GoTo Err
     
      i = UBound(b) ' Si b n'est pas instancier va sur le traitement Err
    On Error Goto 0' redesactive le traitement des erreurs
      ReDim Preserve b(i+1)
     
      Exit sub
    Err:
      i = 0
      Resume Next' Revient à l'instruction suivant le ubound
    End sub

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 26
    Par défaut surcharge
    en fait je cherche surtout à savoir comment sous vba on peut surcharger des fonctions ou procédures

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    Les surcharges sont une notion qui n'existe pas en VBA.

    Les seuls moyen de s'en approcher est de définir des paramètres optionnels
    ou d'utiliser un nombre de paramètres variables (ParamArray).
    Attention, ce dernier étant faiblement typé, je conseille d'accompagner avec une documentation explicite en commentaires.

Discussions similaires

  1. Problème de passage de paramètres à une procedure
    Par momo62 dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 22/12/2005, 15h22
  2. procedures/fonctions stockees : renvoi de plusieurs parametr
    Par Spoutnik dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/05/2004, 11h53
  3. passage de tableau 2D a une fonction
    Par watashinoitadakimasu dans le forum C
    Réponses: 2
    Dernier message: 11/09/2003, 02h33
  4. passage d'argument à la procédure main ()
    Par Zazeglu dans le forum C
    Réponses: 5
    Dernier message: 01/09/2003, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo