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 :

Fonction ayant un tableau en argument


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut Fonction ayant un tableau en argument
    Bonjour.

    Je cherche à construire une fonction qui prend un tableau et 2 entier en paramètre et qui retourne des message.

    Dans l'idéal, je souhaite mettre les 3 objets ci-dessous dans 3 modules différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public tabReq1 As String
    tabReq1 = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
     
    Public tabReq2 As String
    tabReq2 = Array("A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1", "K1", "L1", "M1", "N1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Function AffLignesTab(tbl As Variant, deb As Integer, fin As Integer) As String
     
    For i = deb To fin
        MsgBox (tbl(i))
    Next
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub premiereMacro()
     
    AffLignesTab "tabReq1", 2, 4
     
    End Sub
    Pour l'instant, rien ne fonctionne.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour l'instant, rien ne fonctionne.
    Le problème c'est que vous ne dites pas ce qui ne fonctionne pas or si vous avez essayé de lancer votre procédure vous avez certainement reçu un message d'alerte qui aurait pu déjà vous éclairer.

    Il y a plusieurs erreurs
    1. On n'affecte pas de valeur à une variable en dehors d'une procédure
    2. Vous déclarez deux variables tabReq1 et tabReq2 comme type String alors que vous les utilisez comme tableau (Array)
    3. Lorsque l'on passe une variable comme argument à une procédure, on donne son nom directement sans les guillemets

      et enfin, je vous conseille de déclarer toutes vos variables (cf Option Explicit)


    Ceci fonctionnera mieux
    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
    Option Explicit
    Public tabReq1 As Variant
    Public tabReq2 As Variant
     
    Function AffLignesTab(tbl As Variant, deb As Integer, fin As Integer) As String
     Dim i As Integer
     For i = deb To fin
         MsgBox (tbl(i))
     Next
    End Function
     
    Sub premiereMacro()
     tabReq1 = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
     tabReq2 = Array("A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1", "K1", "L1", "M1", "N1")
     AffLignesTab tabReq1, 2, 4
    End Sub

    Quelques tutoriels à lire éventuellement
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Merci Philippe.

    Oui, comme cela, ça fonctionne mais comment faire pour que les 3 objets (array, fonction et lancement de la fonction) soient dans 3 modules différents.

    En séparant ces 3 objets, j'ai une erreur d’exécution 13 (incompatibilité de type) dans la fonction AffLignesTab (ligne MsgBox (tbl(i)))

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    comment faire pour que les 3 objets (array, fonction et lancement de la fonction) soient dans 3 modules différents.
    Pour moi, ce ne sont pas des objets. Un classeur, une feuille, une cellule, un tableau croisé dynamique, etc. sont des objets mais une Sub ou une Function sont des procédures et une variable reste une variable même si c'est une variable tableau.
    Une variable publique peut être déclarée dans n'importe quel module, si vous aviez lu le premier tutoriel que je vous ai suggéré de lire vous l'auriez vu, et les procédures peuvent également être placées dans des modules différents, à condition bien entendu d'être publique.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une fonction avec un tableau en argument
    Par greggg dans le forum Général VBA
    Réponses: 13
    Dernier message: 27/12/2013, 12h30
  2. Réponses: 7
    Dernier message: 04/05/2007, 12h20
  3. Réponses: 1
    Dernier message: 03/05/2007, 07h49
  4. Réponses: 1
    Dernier message: 02/05/2007, 15h08
  5. fonction renvoyant un tableau en argument
    Par Jones dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2002, 18h20

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