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 qui renvoie un vecteur (ou un tableau)


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Par défaut Fonction qui renvoie un vecteur (ou un tableau)
    Bonjour,

    je débute en VBA (j'ai des petites notions dans d'autres langages, mais je programme en VBA pour la première fois). Je cherche à programmer une fonction qui renvoie un vecteur (ou un tableau). La fonction va chercher les données dans une plage de cellules, les stocke dans un tableau et les renvoie. Voici ce que j'ai tenté :

    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
    Private Function VecteurRangs123(numeroLigne)
        Dim VecteurRangs(1 To 9) As Integer
        For i = 1 To 9
            VecteurRangs(i) = Sheets("Trame").Range(Cells(numeroLigne, 19 + i)).Text
        Next i
        VecteurRangs123 = VecteurRangs
    End Function
     
    Private Sub test2()
        Dim Tableau
        Tableau = VecteurRangs123(185)
        For i = 1 To 9
            MsgBox Tableau(i)
        Next i
    End Sub
    Lorsque le tente d'exécuter ce code, j'ai le message d'erreur suivant :

    Erreur d'exécution '1004'. Erreur définie par l'application ou par l'objet
    Mes questions sont les suivantes :

    1-Est il possible de programmer une fonction qui renvoie un vecteur ?
    2-Si oui, pourquoi mon programme ne fonctionne t-il pas ?

    Je vous remercie par avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 51
    Par défaut
    Je ne sais pas si tu peux, mais ce que tu peux faire, c'est déclarer ton tableau en public et après l'utiliser partout

  3. #3
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Change comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VecteurRangs(i) = Sheets("Trame").Cells(numeroLigne, 19 + i).Value

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Par défaut
    Je vous remercie tous les deux.

    @Minick : J'ai essayé le bout de code que tu m'as suggéré Minick, mais malheureusement, j'obtiens exactement la même erreur.

    @Tempas : Cela doit fonctionner effectivement. Je vais essayer cela dépannera. Ceci étant dit, je préfèrerais réussir à faire une fonction qui renvoie un tableau. Cela simplifierait mon code. Donc si quelqu'un a une suggestion.

  5. #5
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Re,

    Le changement que je t'ai propose a ete teste et fonctionne sans probleme....

    Il faut evidemment que les valeurs soient des entiers et pas du texte (VecteurRangs declare en Interger)

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    pour mieux saisir ce qu'on te propose, vois ce Tuto :

    Passer un tableau en argument de Silkyroad


    cordialement,

    Didier

  7. #7
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour ANOVA, à tous,

    je préfèrerais réussir à faire une fonction qui renvoie un tableau. Cela simplifierait mon code. Donc si quelqu'un a une suggestion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'je n 'ai pas mits de type à VecteurRangs, donc variant par default
    'et peut accepter des nombres et du texte
    'la variable est declarée au niveau module (haut du module) pour etre accessible dans la macro test
    Dim VecteurRangs(0 To 8)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Function VecteurRangs123(numeroLigne)
        For i = 0 To 8
            VecteurRangs(i) = Sheets("Trame").Cells(numeroLigne, 19 + i)
        Next i
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub test3()
    VecteurRangs123 (185)
    'le tableau sera transcrit dans la plage A1:A9
    Range("A1").Resize(UBound(VecteurRangs, 1) + 1) = Application.Transpose(VecteurRangs)
    'pour le tableau soit transcrit dans la plage A1:I1
    'Range("A1:I1") = VecteurRangs
    End Sub

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Par défaut
    Effectivement, ce que tu m'as proposé fonctionne Minick. Je ne sais pas pourquoi ça n'a pas marché lorsque je l'ai testé hier (j'ai dû me planter en faisant le copier coller).

    Merci à tous.

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

Discussions similaires

  1. Créer une fonction qui renvoie un vecteur
    Par Avatar36 dans le forum Langage
    Réponses: 22
    Dernier message: 15/05/2014, 12h59
  2. Fonction qui renvoie un vecteur
    Par Ladgalen dans le forum Fortran
    Réponses: 7
    Dernier message: 17/03/2010, 14h50
  3. fonction qui renvoie un tableau
    Par toto2022 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/01/2007, 16h11
  4. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  5. Fonction qui renvoie un tableau?
    Par elm dans le forum C
    Réponses: 23
    Dernier message: 21/12/2005, 12h44

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