[déplacé VB6 -> VB.NET] Probléme tri croissant [Résolu]

Messages postés
45
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
2 avril 2014
- - Dernière réponse : PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 13 janv. 2010 à 16:51
Bonjour ,
Je debute en programmation visual basic et j'aimerai savoir comment est ce que l'on fait pour trier 10 valeurs en ordre croissant , c'est valeur on était saisie via un compteur dans 10 zones differentes et je dois les reportées dans un tableau.
Voila le code que j'ai :

Function fct_chiffre(ByVal pvaleur As Integer) As String

Dim wchemin As String
fct_chiffre = wchemin
If pvaleur = 1 Then
wchemin = 1
End If
If pvaleur = 2 Then
wchemin = 2
End If
If pvaleur = 3 Then
wchemin = 3
End If
If pvaleur = 4 Then
wchemin = 4
End If
If pvaleur = 5 Then
wchemin = 5
End If
If pvaleur = 6 Then
wchemin = 6
End If
If pvaleur = 7 Then
wchemin = 7
End If
If pvaleur = 8 Then
wchemin = 8
End If
If pvaleur = 9 Then
wchemin = 9
End If
If pvaleur = 10 Then
wchemin = 10
End If
End Function
Sub compteur()

Randomize()
cht1.Text = Int(Rnd(1) * 10)
wresult cht1.Text fct_chiffre(cht1.Text)
cht2.Text = Int(Rnd(1) * 10)
wresult cht2.Text fct_chiffre(cht2.Text)
cht3.Text = Int(Rnd(1) * 10)
wresult cht3.Text fct_chiffre(cht3.Text)
cht4.Text = Int(Rnd(1) * 10)
wresult cht4.Text fct_chiffre(cht4.Text)
cht5.Text = Int(Rnd(1) * 10)
wresult cht5.Text fct_chiffre(cht5.Text)
cht6.Text = Int(Rnd(1) * 10)
wresult cht6.Text fct_chiffre(cht6.Text)
cht7.Text = Int(Rnd(1) * 10)
wresult cht7.Text fct_chiffre(cht7.Text)
cht8.Text = Int(Rnd(1) * 10)
wresult cht8.Text fct_chiffre(cht8.Text)
cht9.Text = Int(Rnd(1) * 10)
wresult cht9.Text fct_chiffre(cht9.Text)
cht10.Text = Int(Rnd(1) * 10)
wresult cht10.Text fct_chiffre(cht10.Text)
End Sub
Sub affichage()
Dim montableau(10)
montableau(1) = cht1.Text
'chListBox1.Text = cht1.Text
montableau(2) = cht2.Text
'chListBox1.Text = cht2.Text
montableau(3) = cht3.Text
'chListBox1.Text = cht3.Text
montableau(4) = cht4.Text
'chListBox1.Text = cht4.Text
montableau(5) = cht5.Text
'chListBox1.Text = cht5.Text
montableau(6) = cht6.Text
'chListBox1.Text = cht6.Text
montableau(7) = cht7.Text
'chListBox1.Text = cht7.Text
montableau(8) = cht8.Text
'chListBox1.Text = cht8.Text
montableau(9) = cht9.Text
'chListBox1.Text = cht9.Text
montableau(10) = cht10.Text
'chListBox1.Text = cht10.Text

chListBox1.Items.Add(montableau)

End Sub

Si quelqu'un pouvais m'aider ce serai hyper cool , Merci
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci

Sub compteur()
Randomize()
cht1.Text = Int(Rnd(1) * 10)
(...)


*pourquoi compteur est public?
*randomize est une commande VB6 et non VB.NET
décoche la référence microsoft.visualbasic dans les propriétés de ton projet
*cht1.Text Int... string entier? alors à quoi sert la fonction fct_chiffre, il faut l'utiliser
*int est une commande VB6 et non VB.NET
*rndest une commande VB6 et non VB.NET



Sub affichage()
Dim montableau(10) As UInteger
montableau(10) = cht1.Text
montableau(10) = cht2.Text
montableau(10) = cht3.Text

(....)


*si tu types en uinteger faut mettre des uinteger, pourquoi mettre des string?
soit tu converties (convert.to...), soit tu fais un tableau de string ou même de char
*si seul l'item 10 reçoit une valeur, de 0 à 9 il n'y aura que des NULL


enfin la propriété datasource d'une listbox accepte un tableau.
donc soit :
lalistbox.datasource = montableau()

soit tu boucles sur chaque élément
with lalistbox
  .items.clear
  for i as integer =1 to 10
    .items.add tableau(i)
  next i
end with


NB : pour le RND à refaire, il y a (comme toujours) des exemples sur codyx.org

Merci PCPT 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,

Quel est exactement ton problème ?

S'il est celui d'alimenter un tableau de valeurs, ta question est mal posée.
S'il est celui de trier un tableau de valeurs déjà alimentée ===>> tu as tout ce qu'il faut dans les sources déposées sur ce forum !

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
45
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
2 avril 2014
0
Merci
J'ai 10 Textbox avec un chiffre de 1a10 dedans , et je voudrai ranger c'est 10 valeurs dans un tableau ou une listbox n'importe .
J'aimerai simplement savoir comment on tri 10 valeurs en ordre croissant et comment on les reporte dans un autre module tel qu'un tableau .
Commenter la réponse de kijx
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
salut,

chListBox1.Items.Add(montableau)

çà ressemble à du vb.net, pas du vb6 !

[hr]
Commenter la réponse de PCPT
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Dernière intervention
20 avril 2010
0
Merci
salut
comme ce sont des chiffres tu peut les comparer (<>=) et t'aura un tri croissant ou décroissant
ou les ajouter dans une liste comme tu veut avec le paramètre : sorted = true
si ce sont pas des chiffres tu peut utiliser leur code ascii pour les comparer



Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
Commenter la réponse de Claiyah
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Non...
On envoie d'abord dans un tableau et on trie ce dernier ensuite.
Ceci étant dit : tu viens maintenant d'ajoiuter "ou dans une listbox n'importe"
C'est alors plus simple car une listbox comporte une propriété Sorted (sous VB6 en espérant que tu développes bien sous VB6 - le présent thème - et non sous VBA) à mettre à True ===>> et tes rajouts s'y feront de manière triée, spontanément.
J'appelle par ailleurs ton attention sur le fait qu'une listbox contient des Strings et non des numériques. Or "11" est < "2" alors qu'en numériques, 11 est > 2. Le tri reszte possible, mais en ajoutant alors des "0" ou des espaces devant, de sorte à avoir toujours la même longueur de string (car "011" est alors > "002").... Joue donc avec la fonction Format...
Enfin et surtout, ce que tu nous montres de ton code laisse tranparaître que tu ignores encore ce que sont les groupes de contrôles indexés sous VB6 (n'existent pas soyus VBA).
Reviens en nous montrant un code tenant compte de tout cela.






____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
45
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
2 avril 2014
0
Merci
Merci pour toutes ces infos , c'est vraiment sympa
Et comme je l'ai dit , je debute , ce qui fait que je n'y connais strictement rien .
PCPT tu me demande si c'est du vb.net ou du vb6 , je ne sais meme pas c'est quoi la difference .
Je travaille sous visual studio 2005 avec le programme Microsoft Visual Basic.

Ce que vous m'avez dit pour l'instant je n'y comprend pas grand chose , mais je vais me poser la dessus et essayer .
Quand j'aurai un resultat je reviendrai vous le montrer :)
Commenter la réponse de kijx
Messages postés
45
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
2 avril 2014
0
Merci
Pourquoi mon poste a-t-il était déplacer içi ?
Je travail sous visual basic pourtant , je ne comprends pas .
Commenter la réponse de kijx
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
parce qu'il n'y a pas que les tableaux qu'on doit parfois trier.... les forums aussi

tu est en VB.NET et non VB6, j'ai donc déplacé vers VB.NET

quant à ta question, tape "trier tableau" sur www.codyx.org, tu y trouveras plusieurs exemples

++
Commenter la réponse de PCPT
Messages postés
45
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
2 avril 2014
0
Merci
Mais visual studio 2005 utilise bien du visual basic pourtant
Commenter la réponse de kijx
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
non, du VB2005 !
du vb.net, qui n'est pas du vb6

pas parce qu'il y a "vb" dedans que çà autorise à ne pas choisir une catégorie adéquate

certains hommes portent des vêtement en soie
les araignées font de la soie
donc certains hommes sont des araignées?

bref çà n'a plus aucun rapport et çà fait déjà 12 jours que j'ai "rangé" ton topic dans la bonne catégorie, tu es allé voir sur codyx.org depuis ???

parce que si c'est juste pour danser sur une queue de cerise, on va pas aller bien loin...

(euh... tu danses parfois donc tu es une cerise? )


IMPORTANT : voir le "NB" de ma SIGNATURE

[hr]
Commenter la réponse de PCPT
Messages postés
45
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
2 avril 2014
0
Merci
eh bien , trés acceuillant .
Si tu remballe toujours tout le monde comme ça ( surtout si on DEBUTE, chose que j'ai precisé dans mon premier messages , mais tu ne dois pas lire les messages de debutant.) je crains le pire pour toi ...
et oui je suis allez voir sur codyx , sans succés malheureusement .
J'y comprends absolument rien .

Mais je te remercie tout de meme pour ton aide .
Commenter la réponse de kijx
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
je ne remballe pas, passer 15 jours sur "mais j'fais du vb alors je vois pas le problème" qui avait déjà été corrigé (la catégorie du post) dès le départ, au lieu de se concentrer sur la question réelle, y'a pas grand chose à ajouter

pis codyx, je tape "trier" et je tombe directement sur l'exemple de tri (chaines) croissant et/ou décroissant

http://www.codyx.org/snippet_trier-donnees-tableau-liste-as-string_278.aspx#895
http://www.codyx.org/snippet_trier-donnees-tableau-liste-as-string_278.aspx#912

4 secondes de recherches contre 15 jours d'attente, on parle pas de débutant là, juste d'oisiveté


maintenant que les choses sont recadrées, passons enfin à ton code (enfin, si tu le veux, après tout....)



Function fct_chiffre(ByVal pvaleur As Integer) As String

Dim wchemin As String
fct_chiffre = wchemin
If pvaleur = 1 Then
wchemin = 1

(...)

donc tu fais une fonction qui retourne rien du tout?
fct_chiffre = wchemin alors que wchemin n'est pas attribuée

on la refait :
Function fct_chiffre(ByVal pvaleur As Integer) As String
    if (pvaleur >0) and (pvaleur <11) then return pvaleur.tostring
    return string.empty
end function

rien de plus




Sub compteur()

Randomize()
cht1.Text = Int(Rnd(1) * 10)
wresult cht1.Text fct_chiffre(cht1.Text)
cht2.Text = Int(Rnd(1) * 10)
wresult cht2.Text fct_chiffre(cht2.Text)

(...)

donc tu attribues un INTEGER à un STRING
puis à une variable apparemment non-déclarée tu attribues... un boolean?
cht2.Text fct_chiffre(cht2.Text)> (avec la bonne fonction bien sûr) cht2 va recevoir la chaine de... elle même, dont tu n'as même pas besoin puisque tu lui passes une chaine et non un numérique, pour renvoyer la même chose
en gros tu fais txt = txt

et après, X txt txt, VB interprète X = [expression] (txt = txt ?)

bref, aucun sens. toujours pas le fait de débuter, on ne sait même pas ce que tu peux bien vouloir faire


tout çà pour un tableau? alors pourquoi utiliser des zones de texte...




ensuite

Dim montableau(10)
montableau(1) = cht1.Text
'chListBox1.Text = cht1.Text
montableau(2) = cht2.Text
'chListBox1.Text = cht2.Text
(...)


mais il n'est pas typé ce tableau...
alors des string? des integer? à VB de décider?

tout çà pour mettre dans une listbox? et tu veux trier le tableau alors que, simplement, elle a la propriété SORTED....
donc 0 ligne de code à taper

çà ok, débutant on peut pas deviner
pis c'est pas du tout écrit dans l'aide que tu as bien sûr consulter

et si tu n'as pas l'aide, quand on tape msdn trier listbox sur google on ne tombe pas EN PREMIER LIEN sur la msdn
http://msdn.microsoft.com/fr-fr/library/kh56dwh6(VS.80).aspx

page où il n'est donc pas clairement écrit

Pour trier la liste

*Affectez à la propriété Sorted la valeur true.

Ce paramètre repositionne tous les éléments de liste existants dans l'ordre de tri.




tu as raison, c'est surement pour moi que le pire est à craindre, merci de m'avoir ouvert les yeux




[hr]
Commenter la réponse de PCPT
Messages postés
45
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
2 avril 2014
0
Merci
Ah ben c'est plus sympa comme ça =)
Desoler si je met hyper longtemp a repondre, mais je fais ça au boulot donc quand je suis en cour pendant 15j j'ai pas accés a mes données.

J'ai donc rectifier mon code , qui comme tu la si bien préciser ne voulais rien dire, mais j'y comprenais absolument rien , la ça va déjà un peu mieu.

Alors pour vous montrer mon soucis , voila mon code a présent :

Public Class Form1
    Function fct_chiffre(ByVal pvaleur As Integer) As String
        If (pvaleur > 0) And (pvaleur < 11) Then Return pvaleur.ToString
        Return String.Empty
    End Function

    Sub compteur()
        Randomize()
        cht1.Text = Int(Rnd(1) * 10)
        cht2.Text = Int(Rnd(1) * 10)
        cht3.Text = Int(Rnd(1) * 10)
        cht4.Text = Int(Rnd(1) * 10)
        cht5.Text = Int(Rnd(1) * 10)
        cht6.Text = Int(Rnd(1) * 10)
        cht7.Text = Int(Rnd(1) * 10)
        cht8.Text = Int(Rnd(1) * 10)
        cht9.Text = Int(Rnd(1) * 10)
        cht10.Text = Int(Rnd(1) * 10)
    End Sub
    Sub affichage()
        Dim montableau(10) As UInteger
        montableau(10) = cht1.Text
        montableau(10) = cht2.Text
        montableau(10) = cht3.Text
        montableau(10) = cht4.Text
        montableau(10) = cht5.Text
        montableau(10) = cht6.Text
        montableau(10) = cht7.Text
        montableau(10) = cht8.Text
        montableau(10) = cht9.Text
        montableau(10) = cht10.Text
    End Sub

    Private Sub bt_go_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt_go.Click
        Call compteur()
    End Sub

    Private Sub bt_affichage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt_affichage.Click
        Call affichage()
    End Sub
End Class


Et voiçi ce que je veus faire :

Ma Form.

Je voudrais que mes 10 chiffres que j'ai en haut soit reporter dans la listbox en dessous dans l'ordre croissant.
Et j'ai bien mis l'option sorted de la listbox sur true.
Commenter la réponse de kijx
Messages postés
45
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
2 avril 2014
0
Merci
Genial , j'y suis arriver !!!
Bon certe en mélangeant le vb6 et le vb.net ,car j'ai gardais la fonction int et rnd , pis ma fonction du debut "fct_chiffre" en fait elle ne me sert a rien.

Mais le principal c'est que ça fonctionne .
Avec l'option True sur la listbox , mon tuteur ma dit que c'était trop facile , alor il voulait que je lui fasse le travail avec une boucle.

Voici le résultat :

Public Class Form1
    Function fct_chiffre(ByVal pvaleur As Integer) As String
        If (pvaleur > 0) And (pvaleur < 11) Then Return pvaleur.ToString
        Return String.Empty
    End Function
    Sub compteur()
        Randomize()
        cht1.Text = Int(Rnd(1) * 10)
        cht2.Text = Int(Rnd(1) * 10)
        cht3.Text = Int(Rnd(1) * 10)
        cht4.Text = Int(Rnd(1) * 10)
        cht5.Text = Int(Rnd(1) * 10)
        cht6.Text = Int(Rnd(1) * 10)
        cht7.Text = Int(Rnd(1) * 10)
        cht8.Text = Int(Rnd(1) * 10)
        cht9.Text = Int(Rnd(1) * 10)
        cht10.Text = Int(Rnd(1) * 10)
    End Sub
    Sub affichage()
        Dim montableau(10) As String
        Dim wcpt, wcptelement, wvaleur, wtempo As Integer
        montableau(1) = cht1.Text
        montableau(2) = cht2.Text
        montableau(3) = cht3.Text
        montableau(4) = cht4.Text
        montableau(5) = cht5.Text
        montableau(6) = cht6.Text
        montableau(7) = cht7.Text
        montableau(8) = cht8.Text
        montableau(9) = cht9.Text
        montableau(10) = cht10.Text

        For wcptelement = 1 To 10
            wvaleur = montableau(wcptelement)
            For wcpt = (wcptelement + 1) To 10
                If wvaleur > montableau(wcpt) Then
                    wtempo = montableau(wcpt)
                    montableau(wcpt) = wvaleur
                    wvaleur = wtempo
                End If
            Next wcpt
            chListBox1.Items.Add(wvaleur)
        Next wcptelement

    End Sub

    Private Sub bt_go_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt_go.Click
        Call compteur()
    End Sub

    Private Sub bt_affichage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt_affichage.Click
        Call affichage()
    End Sub
End Class



Et la tout fonctionne , MERCI pour ton aide PCPT .
Commenter la réponse de kijx
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
bien

et pour le fun, le même code en VB2008

    Private Sub SetRandomBoxes()
        'random + affichage
        Dim rd As New Random
        For i As Integer = 1 To 10
            Me.Controls("cht" & i.ToString).Text = rd.Next(0, 9).ToString
        Next
        rd = Nothing
    End Sub

    Private Sub ShowSortedBoxes()
        'récup en tableau
        Dim lsValues As New System.Collections.Generic.List(Of String)
        For i As Integer = 1 To 10
            lsValues.Add(Me.Controls("cht" & i.ToString).Text)
        Next

        'tri, affichage
        lsValues.Sort()
        chListBox1.DataSource = lsValues
        lsValues.Clear()
    End Sub


++
Commenter la réponse de PCPT

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.