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()
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
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.
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 .
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
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.
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 :)
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 .
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
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
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...
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
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.
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 .
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