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 :

Definition des arguments d'une fonction


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut Definition des arguments d'une fonction
    Bonjour !!

    Etant complètement novice en matière de programmation, je cherche désespéremment des infos basiques introuvables dans l'aide de VB !

    Voilà mon problème : j'ai plusieurs Listbox qui doivent subir le même traitement, les unes apres les autres. je veux donc créer une fonction "traitement" que je pourrai appeler chaque fois que j'en aurai besoin, pour ne pas avoir à tout réécrire au niveau du code.

    je joins ici le code de la fonction déjà pret, en notant les points "durs" :

    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
    If test7 Then
        longlist = ListX.ListCount
        num = longlist - 1
        While num >= 0
            nomfichier = ListX.List(num, 0)
            a = False
            For i = 0 To ListX2.ListCount - 1
                If ListX2.List(i, 0) = nomfichier Then a = True
            Next i
            If ListX.Selected(num) = True Then
                If Not a Then
                    ChangeFileOpenDirectory (cheminX.Text)
                    Selection.InsertFile nomfichier, Range:="", _
                    ConfirmConversions:=False, Link:=True, Attachment:=False
                End If
                indice = Selection.PreviousField.Index
                While InStr(1, ActiveDocument.Fields(indice).Code.Text, "INCLUDETEXT", 1) = 0
                    indice = Selection.PreviousField.Index
                Wend
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
            End If
            If a And ListX.Selected(num) = False Then
                indice = Selection.PreviousField.Index
                While InStr(1, ActiveDocument.Fields(indice).Code.Text, "INCLUDETEXT", 1) = 0
                    indice = Selection.PreviousField.Index
                Wend
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
            End If
            num = num - 1
            DoEvents
        Wend
        a = False
        For i = 0 To ListX2.ListCount - 1
            If ListX2.List(i, 0) = "00-1.doc" Then a = True
        Next i
        If Not a Then
            ChangeFileOpenDirectory (cheminXx.Text)
            Selection.InsertFile FileName:="00-1.doc", Range:="", _
            ConfirmConversions:=False, Link:=True, Attachment:=False
            DoEvents
        End If
        indice = Selection.PreviousField.Index
        While InStr(1, ActiveDocument.Fields(indice).Code.Text, "INCLUDETEXT", 1) = 0
            indice = Selection.PreviousField.Index
        Wend
        Selection.MoveLeft Unit:=wdCharacter, Count:=1
    DoEvents
    End If

    En gros ce code sert à compiler des fichiers words les uns à la suite des autres une fois qu'ils sont sélectionné dans la ListX.

    Je voudrai que le X soit un argument de la fonction, sachant qu'a chaque fois il est à remplacer par un nom du type "annex", "planning", etc...
    j'ai également un soucis avec les cheminYn puisque dans certains cas particuliers, le seul remplacement du X ne suffit pas, il faut rajouter un complément (à la main) du type \dossier1\.

    Résultat attendu :

    Fonction(annex,annex & "\dossier1\)

    ListX --> Listannex
    CheminY --> Cheminannex\dossier1\

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Tu peux ajouter un paramètre (ou argument) de type objet, ou même d'un type d'objet en particulier dans une fonction (ou une procédure sub). Ce qu'il faut que tu garde en tête, c'est que ton paramètre pointe directement sur ton objet (ByRef) et que si tu fais une manipulation dans ta liste au cours de cette fonction, celle-ci sera automatiquement appliquée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Function TraiterListe(uneListe as ListBox) As Integer
        ' la valeur de retour permet de gérer certaines erreurs... Si tu y tient
        ' tu ajoutes le code de ta fonction
        ' et à la fin
        TraiterListe = valeur_quelconque  ' selon la réussite des opération
    End Function
    Si tu ne veux pas avoir à gérer une valeur de retour, alors il te faut créer un simple procédure Sub:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private SubTraiterListe(uneListe as ListBox) As Integer
        ' tu mets ici le code de ta procédure
    End Sub

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Merci pour ce premier élément de réponse, mais j'ai un nouveau soucis, lié à la définition de ma procédure Compil :

    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
    62
    63
    64
    65
    66
    67
    68
    69
     
     
    Private Sub compilation_Click()
     
        If test Then
     
            Compil Listannex, adresseannex
     
        End If
     
    End Sub
     
    ------------------------------------------------
    Private Sub Compil(ListX As Listbox, CheminX As Variant)
     
    Dim nomficher As String
    Dim longlist As Integer, num As Integer
     
    D = ListX & "2"
     
        longlist = ListX.ListCount
        num = longlist - 1
        While num >= 0
            nomfichier = ListX.List(num, 0)
            a = False
            For i = 0 To D.ListCount - 1
                If D.List(i, 0) = nomfichier Then a = True
                        Next i
            If ListX.Selected(num) = True Then
                If Not a Then
                    ChangeFileOpenDirectory (CheminX)
                    Selection.InsertFile nomfichier, Range:="", _
                    ConfirmConversions:=False, Link:=True, Attachment:=False
                End If
                indice = Selection.PreviousField.Index
                While InStr(1, ActiveDocument.Fields(indice).Code.Text, "INCLUDETEXT", 1) = 0
                    indice = Selection.PreviousField.Index
                Wend
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
            End If
            If a And ListX.Selected(num) = False Then
                indice = Selection.PreviousField.Index
                While InStr(1, ActiveDocument.Fields(indice).Code.Text, "INCLUDETEXT", 1) = 0
                    indice = Selection.PreviousField.Index
                Wend
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
            End If
            num = num - 1
            DoEvents
        Wend
     
        a = False
            For i = 0 To Listannex2.ListCount - 1
                If Listannex2.List(i, 0) = "00-1.doc" Then a = True
            Next i
            If Not a Then
                ChangeFileOpenDirectory (cheminannex.Text)
                Selection.InsertFile FileName:="00-1.doc", Range:="", _
                ConfirmConversions:=False, Link:=True, Attachment:=False
                DoEvents
            End If
            indice = Selection.PreviousField.Index
            While InStr(1, ActiveDocument.Fields(indice).Code.Text, "INCLUDETEXT", 1) = 0
                indice = Selection.PreviousField.Index
            Wend
        Selection.MoveLeft Unit:=wdCharacter, Count:=1
        DoEvents
     
    End Sub
    En gros, j'ai défini la procédure qui réagit quand un certain test est VRAI : lorsqu'on lui indique le nom de la listbox à prendre en compte et le chemin d'acces du dossier associé, elle effectue toutes les opérations listées et se termine.

    Le problème est que le nom de la listBox qu'on entre n'est pas pris en compte ! Quand j'exécute la procédure, j'ai toujours la valeur NULL pour ListX (il va pas chercher le listannex demandé...). Du coup, ca plante

    Osicour !

  4. #4
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 626
    Points
    16 626
    Par défaut
    En gros, j'ai défini la procédure qui réagit quand un certain test est VRAI : lorsqu'on lui indique le nom de la listbox à prendre en compte et le chemin d'acces du dossier associé, elle effectue toutes les opérations listées et se termine.
    tu as essayé cette procedure ? Blizard, blizard
    moi j'ai une premiere erreur a la ligne, D = ListX.List & "2", manque l'argument ListIndex
    a quoi devrait correspondre D = ListX & "2", D = ListX.List(2) ?

    une autre a la ligne, nomfichier = ListX.List(num, 0), 2 arguments, 1 de trop

    je ne continu pas plus, reviens pour expliqué

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Alors :

    Pour la ligne D = ListX & "2", elle me sert à indexer le chiffre 2 au now de la ListBox X.

    En gros, je travaille avec une ListBox et une ListBox2. je dois donc, à chaque fois, changer uniquement le "ListBox".

    Cette procédure fonctionne correctement. Le truc c'est qu'elle est répétée autant de fois qu'il y a une ListBox portant un nom différent de la précédente, d'ou la volonté de créer une procédure pour alléger le tout.

    Le problème c'est que le ListX ne revoit rien du tout, (quand la procédure tourne, il a la valeur "Null", au lieu de prendre le nom de la Listbox que je veux qu'il traite...)

  6. #6
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Tu ne peux pas concaténer un bout d'un nom d'un composant. Ça ne marchera pas! Tu devrais donner le même nom à tes deux ListBox et leur mettre une propriété Index à 0 (zéro) pour la première et à 1 pour la seconde. Ensuite il est faclie de les appeler par leur Index.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maListBox(0).List(3) = "Toto"  ' par exemple

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Ceci explique le fait que la valeur du ListX dans la procédure soit "Null" ?

  8. #8
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 626
    Points
    16 626
    Par défaut
    zazaraignée a raison, mais ....

    Private Sub Compil(ListX As Listbox, CheminX As Variant)
    ListX, est l'image du control passé en parametre, donc pas besoin de gérer des index ou reconstituer le nom de la ListBox
    petit demo
    sur un Form, 2 listboxs non indexé, 2 CommandButtons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Dim adresseannex As String
    Private Sub compilation1_Click()
    adresseannex = "un truc"
    Compil List1, adresseannex
    End Sub
    Private Sub compilation2_Click()
    adresseannex = "un autre machin"
    Compil List2, adresseannex
    End Sub
    Private Sub Compil(ListX As ListBox, CheminX As Variant)
    MsgBox ListX.Name & " de " & CheminX, vbInformation
    ListX.AddItem "Même sub " & ListX.Name
    End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/02/2011, 17h03
  2. Nom des arguments d'une fonction
    Par jo_dalton dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 26/09/2008, 13h25
  3. [Débutant] Utiliser des listes en argument d'une fonction
    Par erkenbrand dans le forum Windows Forms
    Réponses: 10
    Dernier message: 29/05/2008, 12h56
  4. Généricité des Input Arguments dans une fonction
    Par RaphTIM dans le forum MATLAB
    Réponses: 5
    Dernier message: 06/06/2007, 16h28
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

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