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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    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
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    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
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    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
    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
    Par défaut
    As-tu essayé en déplaçant ta variable Public en début de module ?

    A+

  8. #8
    Expert éminent


    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
    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

  9. #9
    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
    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 !

  10. #10
    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
    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

  11. #11
    Expert éminent


    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
    Par défaut
    j'ai pas démarré mon portable (avec VB6...) mais en VBA... remplace
    par

  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
    Par défaut
    Exact, Bbil ! Marche sous VB également !
    Autant pour moi

  13. #13
    Membre émérite
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Par défaut
    Citation Envoyé par jmfmarques

    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
    Tu ne confonds pas la notion de tableau et variant? Voici un contre exemple à ton affirmation :

    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
    Private tableau() As String
     
    Private Sub Main()
        ReDim 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(ByRef t() As String)
       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
    1. On peut modifier les valeurs d'un tableau en le passant par référence.
    2. On peut renvoyer un tableau en résultat de fonction. Exemple fonction Split!

  14. #14
    Membre émérite
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Par défaut
    Voilà un exmple de fonction qui renvoie 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
    Private Sub Main()
        Dim tableau() As String
     
        tableau = voila
     
        For i = 0 To 2
          MsgBox tableau(i)
        Next
    End Sub
     
    Private Function voila() As String()
        Dim tmp(3) As String
     
        For i = 0 To 2
          tmp(i) = i
        Next i
     
        voila = tmp
    End Function
    A mon avis, le plus propre est de passer le tableau en paramètre d'une fonction (ou procédure) plutot que de le renvoyer en résultat de fonction. Cela utilise moins de ressource.

    Je préfère d'ailleurs garder le résultat de la fonction pour dire si le tableau s'est créé ou préciser la taille du tableau (par exemple).

  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
    Par défaut
    je ne confonds rien du tout et surtout pas une fonction et une procédure.

    Dans cet exemple, "voila" n'a de "fonction" que le nom. Ce n'en est certes pas une, mais une simple procédure...

    Une fonction retourne SA valeur. Une procédure restitue ses paramètres... et c'est loin d'être la même chose !

    L'enlèvement des parenthèses est suffisant pour que l'on voie qu'il ne s'agissait alors plus d'une fonction

    Voilà donc, comment fonctionne une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command1_Click()
      b = 2
      MsgBox toto(b)
    End Sub
     
    Private Function toto(titi) As Integer
      If titi = 2 Then toto = 3
    End Function
    Et c'est loin d'être pareil.

    Question donc (car la question est là) :
    Une fonction peut-elle RENVOYER un tableau qui lui a été passé en argument (autrement dit : peut-elle devenir elle-même un tableau ?)

    Cà y est ?

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