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

VB 6 et antérieur Discussion :

Fonction qui retourne un tableau ou 2 variables ? possible ou non


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Points : 33
    Points
    33
    Par défaut Fonction qui retourne un tableau ou 2 variables ? possible ou non
    Salut , je fais un programme avec des procédures et des fonctions et je voudrais savoir s'il est possible de retourner un tableau dans une fonction ? ou encore 2 varaibles passées en paramètres ?

    Voilà ma procédure que je voudrais transformer en fonction :
    Celle-ci par dans un fichier texte pour faire des stats

    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
    Public Sub CalculStats()
    Public TabStats(1 To 49) As Integer
    'on initialise le tableau à 0
    For i = 1 To 49
    TabStats(i) = 0
    Next
     
    Open "archives.txt" For Input As #1
     
    Do
    ' on lit les lignes une par une
    Input #1, Bo.Bdate, Bo.Bheure, Bo.Bnb1, Bo.Bnb2, Bo.Bnb3, Bo.Bnb4, Bo.Bnb5, Bo.Bnb6, Bo.Bnb7
      For p = 1 To 49 ' Le nombre de boules
         ' Si un numéro correspond à une boule du fichier alors...
         If p = Bo.Bnb1 Or p = Bo.Bnb2 Or p = Bo.Bnb3 Or p = Bo.Bnb4 Or p = Bo.Bnb5 Or p = Bo.Bnb6 Or p = Bo.Bnb7 Then
         ' le tableau prend + 1
         TabStats(p) = TabStats(p) + 1
         End If
      Next
     
    Loop Until EOF(1)
    Close #1
    End Sub

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Par contre tu peux peut-être concaténer les résultats à retourner avec un séparateur de ton choix et recréer le tableau avec Split

    Juste une idée

    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    en fait, j'ai un fichier texte qui contient 7 numéros sur chaques lignes et ke voudrais faire des stats
    C'est à dire qu'il y a un tableau de 49 élèments. Le chiffre max qu'on peut trouver dans les lignes est 49. Dés qu'on trouve un numéros, on ajoute 1 au compteur à l'indice du numéro correspondant.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ce qui m'intrigue c'est que tu as 9 variables par ligne alors que tu dis n'avoir que 7 numéros par ligne
    j'ai un fichier texte qui contient 7 numéros sur chaques lignes
    Le résultat étant que tu provoques une erreur en relisant ton fichier
    Soit tu as 7 lignes de 7 numéros = 49, soit tu as 7 lignes de 9 numéros = 63

    Tu dis

    A+

    NB - La déclaration d'une variable Public se fait en début de module (en VBA 97)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    oui mais en fait

    Bo.Bdate, Bo.Bheure me servent à rien pour mes stats.
    C'est la date et l'heure où les boules ont été tirées.
    Donc je passe au 3eme champ directement du fichier.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    C'est ce qu'il me semblait et donc tu as 9 données par ligne, non 7
    C'est bien ça ?

    Pour tester, il est necessaire de le savoir

    A+

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    As-tu essayé en déplaçant ta variable Public en début de module ?

    A+

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    c'est à dire ?

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu mets

    Public Sub CalculStats()
    Public TabStats(1 To 49) As Integer
    'on initialise le tableau à 0
    Au lieu de ça, tu déclares TabStats en Public en tout début de module, avant toutes tes sub. Ainsi tu pourrais récupérer ses valeurs où que tu sois.

    Mais ce serait bien que tu précises VB ou VBA dans ton sujet en t'inspirant du TAG des autres gentils membres

    A+

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par jiojio
    Salut , je fais un programme avec des procédures et des fonctions et je voudrais savoir s'il est possible de retourner un tableau dans une fonction ? ou encore 2 varaibles passées en paramètres ?
    ...
    oui on peu retourner un taleau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function CalculStats()
    Dim TabStats(1 To 49) As Integer
    For i = 1 To 49
    TabStats(i) = i
    Next
    CalculStats = TabStats
     
    End Function
    Sub test()
     MsgBox CalculStats(12)
    End Sub
    et pour récupérer 2 variables :*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub DeuxPAram(MaVar1 As Integer, MaVar2 As Integer)
     MaVar1 = 100
     MaVar2 = 200
    End Sub
    Sub Test2()
      Dim i As Integer
      Dim j As Integer
      i = 1
      j = 2
      MsgBox "Avant i = " & i & " .. j = " & j
      DeuxPAram i, j
      MsgBox "Aprés i = " & i & " .. j = " & j
    End Sub

  11. #11
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Ouille !
    Jmf va signer ici d'un FAUX !

    On peut passer un tableau à une fonction ou à une prtocédure sans aucun problème et se servir de ce tableau pour, dans la fonction ou la procédure, faire des calculs à retourner.

    On ne peut par contre définitivement pas modifier les valeurs du tableau dans la fonction ou la procédure et retrouver ces modifications au retour de la fonction ou de la procédure

    Seul moyen : Enum ou un type, mais il faut alors définir ce type et en retrouver les valeurs individuelles en les appelant par leur nom !

    S'il faut vraiment en faire la démonstration, je reviens avec cette démonstration ! Il n'y a qu'à demander !

  12. #12
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Illustration :
    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
    Private tableau, t  'pour que l'on voie bien que globale ou non, celà n'a rien à voir dans le résultat
    Private Sub Command1_Click()
      Dim tableau(3)
      For i = 0 To 2
        tableau(i) = i
      Next
    voila (tableau)
    For i = 0 To 2
      MsgBox tableau(i) ' et l'on voit que le modif sans voila n'a rien fait finalement
    Next
    End Sub
     
    Private Function voila(t)
       For i = 0 To 2
         t(i) = t(i) & "a" ' expres pour que l'on voie que tableau est bien considéré ici
         MsgBox t(i)
        Next i
    End Function

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    j'ai pas démarré mon portable (avec VB6...) mais en VBA... remplace
    par

  14. #14
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Exact, Bbil ! Marche sous VB également !
    Autant pour moi

  15. #15
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Salut Ousk,

    Tu te trompes
    ... sans te tromper !

    La fonction ne RENVOIE en effet PAS le tableau, mais elle permet de le retrouver, au besoin modifié, dans sa globalité...

    Le distinguo est toutefois à faire, en effet, entre RENVOI et RECUPERATION.. mais bon...

    Pour être tout à fait précis, elle agit là non comme Fonction mais comme une simple procédure.

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    un seul appel ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub testE()
     Dim EncoreUnTableau() As Integer
     EncoreUnTableau = CalculStats
     For i = 1 To 49
      Debug.Print EncoreUnTableau(i)
     Next
    End Sub

  17. #17
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Avant d'aller faire dodo :

    L'enlèvement des parenthèses montre bien qu'il ne s'agit que d'une procédure (on pourrait d'ailleurs remplacer le mot Function par Sub... et le résultat serait le même !

    Une fonction acceptant et retournant un tableau serait une chose différente et serait capable de se terminer par voila = t puis serait capable, ailleurs, re restituer par exemple msgbox voilà(t)(n) !!! ce qui ne sera jamais possible !
    Bonne nuit..

  18. #18
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    VOILA !
    La, nous sommes on ne peut plus d'accord !

  19. #19
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par ouskel'n'or
    Quand je parle de sub faisant appel à une fonction qui renvoie un tableau, je parle de ça
    ...
    enléve la ligne :


  20. #20
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par ouskel'n'or
    Effectivement, DIm Fonction(5) n'a pas lieu d'être et n'est qu'un relicat des différents essais que j'ai faits. Mais cela ne change rien et ne fait que déplacer le problème.

    A+
    ? tu as testé ?

Discussions similaires

  1. [Tableaux] Fonction qui retourne un tableau
    Par benooiit dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 01h50
  2. Réponses: 8
    Dernier message: 24/10/2006, 16h50
  3. Réponses: 6
    Dernier message: 22/09/2006, 18h17
  4. [VB] Fonction qui retourne un tableau
    Par ptitsoleil87 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/12/2005, 10h52
  5. Fonction qui retourne un tableau
    Par _lara_ dans le forum ASP
    Réponses: 6
    Dernier message: 24/05/2004, 15h06

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