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 :

[VBA-E] Fonction renvoyant un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 51
    Points : 34
    Points
    34
    Par défaut [VBA-E] Fonction renvoyant un tableau
    Bonjour à tous!
    Voila, j'essaye d'ecrire une fontion en VBA qui est censé renoyer un tableau.
    Cepedant quand je recupere la variable de cette fontion, le compilateur exel me dis "impossible d'affecter à un tableau cette variable".

    voila mon code:

    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
    Public Function ListerRep(CheminRepertoire As String) As String()
     
    Dim tableau(100) As String
     
     
    With Application.FileSearch
     
    .LookIn = CheminRepertoire
    .Filename = "*.sce"
    If .Execute > 0 Then
    MsgBox "There were " & .FoundFiles.Count & _
    " file(s) found."
    For i = 1 To .FoundFiles.Count
    Debug.Print .FoundFiles(i)
    Next i
    Else
    MsgBox "There were no files found."
    End If
    End With
     
    ListerRep = tableau
    End Function
    Apres quelques recherches dans les forums, j'ai pu ecrire ca, mais je pense que j'ai du faire une grosse erreur.....

    Quelqu'un aurai une idée?
    Merci!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    Bonjour,

    je crois qu'il est tout simplement impossible de retourner un tableau sous VBA

    Ce que je te conseillerais de faire pour pallier à çà

    Tu renvois une chaine de caractère qui serait en fait toutes les valeurs de ton tableau séparé apr un "_" par exemple

    Ensuite, dans la sub ou tu récupère ces valeurs du tableau, tu fait un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tontableau = Split(taChaine,"_")
    TaChaine est lavaleur retrouné par ta fonction
    tontableau est le tableau dans lequel sera stocké l'ensemble des tes fichier

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Ok merci j'essai ca!

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Où mets-tu quelque chose dans ton tableau "tableau" dans ta fonction ??? Parce que ce que l'on voit là dans le code que tu nous propose, c'est seulement une déclaration. A moins que je sois myro

    Et Excel plante à quelle ligne exactement ? Dans ta fonction ou dans la variable qui prend le retour de ta fonction ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    Elle a juste déclarer la variable tableau mais ne l'a aps alimenté...
    C'est juste un test pour voir si elle pouvair retourner un tableau

    Dès fois en programmation, quand on s'aventure dans l'inconnu, vaut mieux y aller â tatons et une fois le chemin ouvert, remplir les vrais variables avec les bonnes données

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Arf oui c'est malin ça !!!

    Mais je me suis déjà fait avoir par le comportement (lunaire ?!!!) d'Excel entre variables déclarées et variables affectées c'est pour ça !

    Je réfléchirais la prochaine fois !

  7. #7
    Membre régulier Avatar de doringen
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par helios77
    je crois qu'il est tout simplement impossible de retourner un tableau sous VBA
    on ne peut pas utiliser un "Array" dans un tel cas ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    doringen a écrit :
    on ne peut pas utiliser un "Array" dans un tel cas ?
    Bah moi j'en utilise effectivement alors je dirais que l'on peux passer des tableaux par VBA mais je crois que dans ce cas, j'utilise des types variant dans la décalaration de ma fonction. Comme c'est un type un peu "refuge", il fait lui même sa sauce avec ça mais c'est certain que de l'autre coté tu récupères un tableau...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private TableauDate() As Date
     
     
    Public Function GetTableau() As Variant
        GetTableau = TableauDate
    End Function
    ce code étant dans une classe ...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    le Variant est très gourmand en mémoire par rapport à un type plus précis genre string, integer ou autres

  10. #10
    Membre habitué
    Avatar de martinbrait
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 85
    Points : 135
    Points
    135
    Par défaut RETURN AN ARRAY OF VALUES WITH VBA
    FONCTION RETURN ARRAY
    Parfaitement possible en vba

    Réponse la plus proche possible de la demande
    de glycérine
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
    '(COLLER DANS UN MODULE VBA .bas, jusqu'à la version MSOFFICE 2003)
     
    Otion Explicit
     
    Public Function ListerRep(CheminRepertoire As String) As Variant
    Dim Temp_TableauDynamique() As Variant
    Dim x, d, i As Integer
     
     
     
    With Application.FileSearch
     
    .LookIn = CheminRepertoire
    .fileName = "*.txt"
     
       'Initialise la première case à 0
       'NbFoundFiles
       ReDim Temp_TableauDynamique(1)
       Temp_TableauDynamique(0) = 0
       If .Execute > 0 Then
    MsgBox "There were " & .FoundFiles.Count & _
    " file(s) found with the extension " & .fileName
     
       x = .FoundFiles.Count
       'Debug.Print "Nombre de fichiers: " & x
     
       'Redimensionne le tableau
       ReDim Temp_TableauDynamique(0 To x)
          'InfoNbFilesInThisArray
       Temp_TableauDynamique(0) = x
          'Remplissage du tableau avec le nom des fichiers txt
       For d = 1 To x
       Temp_TableauDynamique(d) = CStr(.FoundFiles(d))
       'Debug.Print Temp_TableauDynamique(d)
       Next d
     
    Else
       MsgBox "There were no files found."
    End If
    End With
     
    ListerRep = Temp_TableauDynamique
     
    End Function
     
     
     
    Sub TesterListerRep()
       Dim InfoUtilisateur As Variant
       Dim Elem1 As Variant
       Dim k As Integer
          Elem1 = ListerRep("C:\")
       'Debug.Print "NbDeFichiersRetournés: " & Elem1(0)
          If Elem1(0) > 0 Then
           For k = 1 To Elem1(0)
              InfoUtilisateur = MsgBox("FichierTrouvé: " & Elem1(k), vbInformation, "LISTE DES FICHIERS")
           Next
       End If
       End Sub
    Bonne journée!

  11. #11
    Membre régulier
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 56
    Points : 88
    Points
    88
    Par défaut
    Bonsoir,

    Une fonction matricielle peut renvoyer un tableau.

    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
     
    Function RechvMult2(clé As Range, champ As Range, colResult)
      Application.Volatile
      ncol = Application.Caller.Columns.Count
      Set d = CreateObject("Scripting.Dictionary")
      a = champ.Value
      b = clé.Value
      For i = LBound(a) To UBound(a)
        If d.exists(a(i, 1)) Then
          d(a(i, 1)) = d(a(i, 1)) & " : " & a(i, colResult)
        Else
          d(a(i, 1)) = a(i, colResult)
        End If
      Next i
      Dim temp()
      ReDim temp(LBound(b) To UBound(b), 1 To ncol)
      For i = LBound(b) To UBound(b)
        tmp = d(b(i, 1))
        x = Split(tmp, ":")
        For k = LBound(x) To UBound(x)
          temp(i, k + 1) = x(k)
        Next k
      Next i
      If ncol > 1 Then RechvMult2 = temp Else RechvMult2 = Application.Transpose(temp)
    End Function
    Ceuzin
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Une fonction renvoyant un tableau
    Par Touffe54 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/12/2010, 21h21
  2. Fonction renvoyant un tableau VB5
    Par jaymzwise dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/08/2007, 15h01
  3. Fonction renvoyant un tableau :
    Par spyk dans le forum Delphi
    Réponses: 3
    Dernier message: 01/09/2006, 15h32
  4. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33
  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