Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction et Tri de Tableau

2 réponses
Avatar
Top100
Salutations,

Est-il possible d'envoyer un tableau dans une fonction, de faire un
traitement sur ce tableau (un tri par ex) puis de retourner en sortie
de fonction ce tableau trait=E9 ?

Je m'explique. Je stocke dans un tableau un fichier texte (une ligne =3D
un item) que je souhaite trier alphab=E9tiquement. lorsque j'effectue ce
tri directement dans la procedure principale, pas de soucis, =E7a
marche. Par contre quand je transforme le bout de code qui g=E8re le tri
en fonction, l=E0 =E7a ne marche plus.

Je me plante surement quelque part mais o=F9 ??? si une =E2me charitable
pouvait me porter secours, je lui en serais fort gr=E9. Merci d'avance.
Top100

Le code :

Sub RechercherCodeListe()

Dim Tblo()
Dim j, t, outer_loop, inner_loop as Integer
Dim Temp as String

Open "D:\Dossier de Test\Fichier_Pas_Tri.txt" For Input As #1

'r=E9cup=E8re toutes les valeurs du fichier dans un tableau
Do While Not EOF(1)
j =3D j + 1
ReDim Preserve Tblo(1 To j)
Line Input #1, Tblo(j)
Loop

'Sort de la macro si le fichier est vide ou n'existe pas
If j =3D 0 Then
Exit Sub
End If

'-------------------------------------------------
'Tri du tableau

'Tri par la fonction
' SortList (Tblo)

'Tri directement dans le code
'Boucle sur la liste du haut vers le bas
For outer_loop =3D UBound(Tblo) - 1 To LBound(Tblo) Step
-1

'Boucle sur la liste du bas vers le haut "en
cours"
For inner_loop =3D LBound(Tblo) To outer_loop

'Echange de place si l'element courant est
plus grand que le prochain element
If Tblo(inner_loop) > Tblo(inner_loop + 1)
Then

'Temp reprend l'item +1
Temp =3D Tblo(inner_loop + 1)

'L'item +1 prend la valeur de l'item
courant
Tblo(inner_loop + 1) =3D Tblo(inner_loop)

'L'item courant prend la valeur de temp
(de l item +1)
Tblo(inner_loop) =3D Temp

End If

Next 'inner_loop

Next 'outer_loop

'---------------------------------------------------

Close #1

Open "D:\Dossier de Test\Fichier_Tri.txt" For Output As #1

'r=E9-inscrit les valeurs dans le fichier et referme
For t =3D 1 To UBound(Tblo)
Print #1, Tblo(t)
Debug.Print Tblo(t)
Next t
Close #1

Erase Tblo
t =3D 0

MsgBox ("Que dalle !")

End Sub

Function SortList(ByRef asList)

'Loop through the list from top to bottom
For outer_loop =3D UBound(asList) - 1 To LBound(asList) Step -1

'Loop from bottom of list to current top
For inner_loop =3D LBound(asList) To outer_loop

'If the current element is greater than the next then flip
them in the array
If asList(inner_loop) > asList(inner_loop + 1) Then

'Temp gets the next element in the array
Temp =3D asList(inner_loop + 1)

'Next element gets current value
asList(inner_loop + 1) =3D asList(inner_loop)

'The current element in the array gets the temp.. ie
next
asList(inner_loop) =3D Temp

End If

Next 'inner_loop

Next 'outer_loop


SortList =3D asList

End Function

2 réponses

Avatar
Top100
Bon ok, je vais me flageller à coups d'orties fraîches cul nu sur le
parvis de l'hôtel de ville en chantant du Chantal Goya.

La solution pour la postérité :
j'appellai ma fonction ainsi dans ma procédure principale : SortList
(Tblo)
ce qui est idiot (faut pas avoir peur des mots).

Tblo = SortList (Tblo) est beaucoup plus performant

Attention ça va chauffer !
top100


On 30 juil, 11:08, Top100 wrote:
Salutations,

Est-il possible d'envoyer un tableau dans une fonction, de faire un
traitement sur ce tableau (un tri par ex) puis de retourner en sortie
de fonction ce tableau traité ?

Je m'explique. Je stocke dans un tableau un fichier texte (une ligne =
un item) que je souhaite trier alphabétiquement. lorsque j'effectue ce
tri directement dans la procedure principale, pas de soucis, ça
marche. Par contre quand je transforme le bout de code qui gère le tri
en fonction, là ça ne marche plus.

Je me plante surement quelque part mais où ??? si une âme charitable
pouvait me porter secours, je lui en serais fort gré. Merci d'avance.
Top100

Le code :

Sub RechercherCodeListe()

Dim Tblo()
Dim j, t, outer_loop, inner_loop as Integer
Dim Temp as String

        Open "D:Dossier de TestFichier_Pas_Tri.txt" For Input A s #1

        'récupère toutes les valeurs du fichier dans un table au
        Do While Not EOF(1)
            j = j + 1
            ReDim Preserve Tblo(1 To j)
            Line Input #1, Tblo(j)
        Loop

        'Sort de la macro si le fichier est vide ou n'existe pas
        If j = 0 Then
            Exit Sub
        End If

'-------------------------------------------------
'Tri du tableau

'Tri par la fonction
'               SortList (Tblo)

'Tri directement dans le code
                'Boucle sur la liste du haut vers le bas
                For outer_loop = UBound(Tblo) - 1 To LB ound(Tblo) Step
-1

                    'Boucle sur la liste du bas vers le haut "en
cours"
                    For inner_loop = LBound(Tblo) T o outer_loop

                        'Echange de place si l'el ement courant est
plus grand que le prochain element
                        If Tblo(inner_loop) > Tbl o(inner_loop + 1)
Then

                            'Temp reprend l'i tem +1
                            Temp = Tblo(inn er_loop + 1)

                            'L'item +1 prend la valeur de l'item
courant
                            Tblo(inner_loop + 1) = Tblo(inner_loop)

                            'L'item courant p rend la valeur de temp
(de l item +1)
                            Tblo(inner_loop) = Temp

                        End If

                    Next    'inner_loop

                Next    'outer_loop

'---------------------------------------------------

        Close #1

        Open "D:Dossier de TestFichier_Tri.txt" For Output As # 1

        'ré-inscrit les valeurs dans le fichier et referme
        For t = 1 To UBound(Tblo)
            Print #1, Tblo(t)
            Debug.Print Tblo(t)
        Next t
        Close #1

        Erase Tblo
        t = 0

        MsgBox ("Que dalle !")

End Sub

Function SortList(ByRef asList)

    'Loop through the list from top to bottom
    For outer_loop = UBound(asList) - 1 To LBound(asList) Step -1

        'Loop from bottom of list to current top
        For inner_loop = LBound(asList) To outer_loop

            'If the current element is greater than the next then flip
them in the array
            If asList(inner_loop) > asList(inner_loop + 1) Th en

                'Temp gets the next element in the array
                Temp = asList(inner_loop + 1)

                'Next element gets current value
                asList(inner_loop + 1) = asList(inner_l oop)

                'The current element in the array gets th e temp.. ie
next
                asList(inner_loop) = Temp

            End If

        Next    'inner_loop

    Next    'outer_loop

SortList = asList

End Function


Avatar
milloche
Bonjour
Fais nous une vidéo !
<]:o))

"Top100" a écrit dans le message de news:

Bon ok, je vais me flageller à coups d'orties fraîches cul nu sur le
parvis de l'hôtel de ville en chantant du Chantal Goya.

La solution pour la postérité :
j'appellai ma fonction ainsi dans ma procédure principale : SortList
(Tblo)
ce qui est idiot (faut pas avoir peur des mots).

Tblo = SortList (Tblo) est beaucoup plus performant

Attention ça va chauffer !
top100


On 30 juil, 11:08, Top100 wrote:
Salutations,

Est-il possible d'envoyer un tableau dans une fonction, de faire un
traitement sur ce tableau (un tri par ex) puis de retourner en sortie
de fonction ce tableau traité ?

Je m'explique. Je stocke dans un tableau un fichier texte (une ligne > un item) que je souhaite trier alphabétiquement. lorsque j'effectue ce
tri directement dans la procedure principale, pas de soucis, ça
marche. Par contre quand je transforme le bout de code qui gère le tri
en fonction, là ça ne marche plus.

Je me plante surement quelque part mais où ??? si une âme charitable
pouvait me porter secours, je lui en serais fort gré. Merci d'avance.
Top100

Le code :

Sub RechercherCodeListe()

Dim Tblo()
Dim j, t, outer_loop, inner_loop as Integer
Dim Temp as String

Open "D:Dossier de TestFichier_Pas_Tri.txt" For Input As #1

'récupère toutes les valeurs du fichier dans un tableau
Do While Not EOF(1)
j = j + 1
ReDim Preserve Tblo(1 To j)
Line Input #1, Tblo(j)
Loop

'Sort de la macro si le fichier est vide ou n'existe pas
If j = 0 Then
Exit Sub
End If

'-------------------------------------------------
'Tri du tableau

'Tri par la fonction
' SortList (Tblo)

'Tri directement dans le code
'Boucle sur la liste du haut vers le bas
For outer_loop = UBound(Tblo) - 1 To LBound(Tblo) Step
-1

'Boucle sur la liste du bas vers le haut "en
cours"
For inner_loop = LBound(Tblo) To outer_loop

'Echange de place si l'element courant est
plus grand que le prochain element
If Tblo(inner_loop) > Tblo(inner_loop + 1)
Then

'Temp reprend l'item +1
Temp = Tblo(inner_loop + 1)

'L'item +1 prend la valeur de l'item
courant
Tblo(inner_loop + 1) = Tblo(inner_loop)

'L'item courant prend la valeur de temp
(de l item +1)
Tblo(inner_loop) = Temp

End If

Next 'inner_loop

Next 'outer_loop

'---------------------------------------------------

Close #1

Open "D:Dossier de TestFichier_Tri.txt" For Output As #1

'ré-inscrit les valeurs dans le fichier et referme
For t = 1 To UBound(Tblo)
Print #1, Tblo(t)
Debug.Print Tblo(t)
Next t
Close #1

Erase Tblo
t = 0

MsgBox ("Que dalle !")

End Sub

Function SortList(ByRef asList)

'Loop through the list from top to bottom
For outer_loop = UBound(asList) - 1 To LBound(asList) Step -1

'Loop from bottom of list to current top
For inner_loop = LBound(asList) To outer_loop

'If the current element is greater than the next then flip
them in the array
If asList(inner_loop) > asList(inner_loop + 1) Then

'Temp gets the next element in the array
Temp = asList(inner_loop + 1)

'Next element gets current value
asList(inner_loop + 1) = asList(inner_loop)

'The current element in the array gets the temp.. ie
next
asList(inner_loop) = Temp

End If

Next 'inner_loop

Next 'outer_loop

SortList = asList

End Function