Problème avec mon premier algo

Résolu
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - 3 oct. 2010 à 19:33
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - 6 oct. 2010 à 18:40
Bonjour, j'ai un souci je dois realiser un algo qui compare trois nombres et les affiches par ordre croissant. Cependant, mon algo n'affiche qu'une comparaison (quand 1>2>3) sinon il n'affiche rien !!!

est ce que queqlqu'un voit ou est mon erreur ? merci d'avance.

Private Sub btncompare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncompare.Click
If IsNumeric(txtnb1.Text) Then
If IsNumeric(txtnb2.Text) Then
If IsNumeric(txtnb3.Text) Then
If txtnb1.Text > txtnb2.Text Then

If txtnb2.Text > txtnb3.Text Then
MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
Exit Sub

If txtnb1.Text > txtnb3.Text Then
MessageBox.Show("Nombre2 > Nombre 3 > Nombre1")
Exit Sub
Else : MessageBox.Show("Nombre2 > Nombre1 > Nombre3")
Exit Sub
End If
End If

If txtnb1.Text > txtnb3.Text Then
MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
Exit Sub

If txtnb3.Text > txtnb2.Text Then
MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
Exit Sub
Else : MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
End If

End If

End If





Else : MessageBox.Show("Veuillez saisir des entiers numériques !!!")
End If
Else : MessageBox.Show("Veuillez saisir des entiers numériques !!!")
End If
Else : MessageBox.Show("Veuillez saisir des entiers numériques !!!")
End If










End Sub

39 réponses

Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
3 oct. 2010 à 20:47
Bonjour,

@nhervagault: ta méthode de comparaison ne marchera pas, elle compare le texte, ce qui veut dire que si par exemple txtnb1 contient "002" et txtnb2 contient "01" (qui sont des valeurs numériques donc passeront le premier test) tu obtiendras "01" > "002" ce qui n'est le résultat attendu numériquement.

@Moundir76: déjà quand on veut saisir des nombres sur une interface il est préférable (sauf besoin spécifique) d'utiliser un NumericUpDown qui est conçu spécifiquement pour ce but (et évite des vérifications et conversions fastidieuses). Mais sinon avec tes TextBox tu peux faire comme ceci (c'est fait vite et par conséquent encore améliorable)

Private Sub btncompare_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btncompare.Click
    Dim numbers(2) As Integer
    Dim message As String = "Only integer values please !"

    If Integer.TryParse(txtnb1.Text, numbers(0)) AndAlso Integer.TryParse(txtnb2.Text, numbers(1)) AndAlso Integer.TryParse(txtnb3.Text, numbers(2)) Then
        Array.Sort(numbers)

        message = numbers(0).ToString

        For i As Integer = 1 To numbers.Count - 1
            message &= " <= " & numbers(i)
        Next
    End If

    MessageBox.Show(message)
End Sub


Cordialement !
3
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
3 oct. 2010 à 21:45
Oki donc voici ta Sub,
elle vérifie si les valeurs sont numériques :
    Private Sub btncompare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncompare.Click

        If IsNumeric(txtnb1.Text) And IsNumeric(txtnb2.Text) And IsNumeric(txtnb3.Text) Then
            '' Toutes les valeurs sont numériques

            Dim s As String = "" '' Déclare s

            For i = 0 To 5000 '' Faire une boucle de 0 à 5000

                If CInt(txtnb1.Text) = i Then s &= "Nombre 1 (" & i & ") <= " '' Si un est égal à i
                If CInt(txtnb2.Text) = i Then s &= "Nombre 2 (" & i & ") <= " ' Nombre 2 (i) <=
                If CInt(txtnb3.Text) = i Then s &= "Nombre 3 (" & i & ") <= " ' Nombre 3 (i) <=

            Next

            Dim resultat As String = s.Substring(0, Len(s) - 4) ' Enlève les 4 derniers caractères
            MessageBox.Show(resultat)
        Else '' Une valeur n'est pas numérique
            MessageBox.Show("Veuillez entrer des valeurs numériques uniquement")
            Exit Sub ''Quitte la Sub
        End If

    End Sub

Seul problème dans la méthode : la limitation à 5000
mais on peux bien entendu modifier 5000 par n'importe quel nombre.
Après, si le nombre est plus grand, cela nécessitera plus de calcul de l'ordinateur.
Je peux te donner la même Sub en utilisant Array.Sort
qui ne sera pas limitée à 5000 et qui marche avec autant de
nombres qu'on veux.
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
5 oct. 2010 à 20:13
Bon bien ton prof, il faut qu'il retourne a l'ecole faire des cours de programmation.
Car si il interdit d'utiliser les conversions, c'est pas une bonne méthode et il ne peut pas entrainer ses etudiants a travailler proprement.

les differents methodes de conversions
sont
* cint
* tryparse
* parse
* convert.toInt32

Si on ne peux utiliser tu ne pourras pas y arriver a résoudre ton problème.

Explications :
Les opérateurs > et < ne fonctionne pas sur les strings.
Ça compile mais ca donnes pas le bon résultat.

Exemple
si 1 - 3 - 40 --> nb3>nb2>nb1
si 1 - 9 - 40 --> nb2>nb3>nb1
 If nb2 > nb3 Then '--> true


C'est que le premier caractère qui est pris en compte dans la conversion.

Voila le pourquoi
3
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
5 oct. 2010 à 20:23
Effectivement, nhervagault,
je ne le savais pas
Donc voici le code avec le Val qui va bien
@Moundir76 Val convertit les
String en Double (Double -> Nombre à virgule flottante
double précision...)
 If Val(nb1.Text) > Val(nb2.Text) And Val(nb2.Text) > Val(nb3.Text) Then
            MsgBox("nb1>nb2>nb3")
        End If
        If Val(nb3.Text) > Val(nb1.Text) And Val(nb1.Text) > Val(nb2.Text) Then
            MsgBox("nb3>nb1>nb2")
        End If
        If Val(nb2.Text) > Val(nb1.Text) And Val(nb1.Text) > Val(nb3.Text) Then
            MsgBox("nb2>nb1>nb3")
        End If
        If Val(nb3.Text) > Val(nb2.Text) And Val(nb2.Text) > Val(nb1.Text) Then
            MsgBox("nb3>nb2>nb1")
        End If
        If Val(nb1.Text) > Val(nb3.Text) And Val(nb3.Text) > Val(nb2.Text) Then
            MsgBox("nb1>nb3>nb2")
        End If
        If Val(nb2.Text) > Val(nb3.Text) And Val(nb3.Text) > Val(nb1.Text) Then
            MsgBox("nb2>nb3>nb1")
        End If
        Exit Sub
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
3 oct. 2010 à 20:05
Salut,

Simplifies le code
Il est possible de regrouper si tu veux le premier test
pour des raisons de performances
mais pour de meilleures performances il faut eviter les conversions implicites
de string vers integer dans tous les tests de >

Private Sub btncompare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncompare.Click
    If IsNumeric(txtnb1.Text) or IsNumeric(txtnb2.Text) or IsNumeric(txtnb3.Text) Then
       MessageBox.Show("Veuillez saisir des entiers numériques !!!")
      exit sub
  end if

If txtnb1.Text > txtnb2.Text and txtnb2.Text > txtnb3.Text Then
  MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
  Exit Sub
end if

If txtnb2.Text > txtnb3.Text and txtnb3.Text > txtnb1.Text Then
  MessageBox.Show("Nombre2 > Nombre 3 > Nombre1")
  Exit Sub
end if

If txtnb2.Text > txtnb1.Text and txtnb1.Text > txtnb3.Text Then
  MessageBox.Show("Nombre2 > Nombre1 > Nombre3")
   Exit Sub
End If

If txtnb3.Text > txtnb1.Text and txtnb1.Text > txtnb2.Text Then
   MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
   Exit Sub
end if

If txtnb1.Text > txtnb2.Text and txtnb2.Text > txtnb3.Text Then
  MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
  Exit Sub
end if

End Sub
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
3 oct. 2010 à 20:38
Salut
une autre idée :
    Sub algo3(ByVal un As Integer, ByVal deux As Integer, ByVal trois As Integer)

        Dim t(2) As Integer

        t(0) = un
        t(1) = deux
        t(2) = trois

        Dim resultat(2) As String
        Dim s As String = ""

        For i = 0 To 5000
            If un = i Then s &= "Nombre 1 = " & i & " "

            If trois = i Then s &= "Nombre 3 = " & i & " "

            If deux = i Then s &= "Nombre 2 = " & i & " "

        Next

        MessageBox.Show(s)

    End Sub
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
3 oct. 2010 à 20:46
Merci de cette réponse rapide, en effet je comprends le regroupement lors du premier test, je n'y avait pas pensé.
En effet a la lecture je comprends ce code mais en l’exécutant même en pas à pas, je ne comprends pas :

Si on entre aucune valeur => Il ne se passe rien
Si on entre des entiers numériques => affichage de la boite "veuillez saisir des entiers numériques!!!"

J'avoue que je suis perdu !
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
3 oct. 2010 à 20:53
Merci Sehnsucht, le code fonctionne à merveille mais je ne le comprends pas, je suis en BTS info et donc débutant. il ne me reste plus qu'a le comprendre
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
3 oct. 2010 à 21:03
Resalut
j'ai oublié de dire l'utilisation de ma sub ...
La voici :
algo3(txtnb1.Text,txtnb2.Text,txtnb2.Text)

Mais elle ne vérifie pas si les valeures entrée dans les TextBox
sont des nombres, si ce n'est pas le cas, il y aura une erreur.
Et aussi la valeur maximale des 3 nombres est de 5000 + 1 sinon
ma méthode ne marche pas.
Mais Array.Sort que je ne connaissais pas est plus approprié. bonsoir
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
3 oct. 2010 à 21:13
Merci raffika mais je ne comprends pas, le code ne fonctionne pas
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
3 oct. 2010 à 21:26
Alors essayes celui ci :
Sub algo3(ByVal un As Integer, ByVal deux As Integer, ByVal trois As Integer)

        Dim t(2) As Integer '' Déclare un tableau t de longeur 3 (base 0)

        t(0) = un '' met les éléments envoyés à la Sub algo3
        t(1) = deux
        t(2) = trois '' Dans le tableau t

        Dim s As String = "" '' Déclare s

        For i = 0 To 5000 '' Faire une boucle de 0 à 5000

            If un = i Then s &= "Nombre 1 ( " & i & "<= " '' Si un est égal à i
            '' ajoute à la chaine de caratères s : Nombre 1 (i) <If deux i Then s &= "Nombre 2 ( " & i & "<= " ' Nombre 2 (i) <=
            If trois = i Then s &= "Nombre 3 ( " & i & "<= " ' Nombre 3 (i) <=

        Next

        Dim resultat As String = s.Substring(0, Len(s) - 4) '' Enlève les 4 derniers caratères
        '' dans s car comme on ne connait pas l'ordre
        '' il y a un <= à la fin

        MessageBox.Show(resultat)

    End Sub
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
3 oct. 2010 à 21:29
J'ai omis quelques chose dans la boucle For,
remplacer l'ancien code par :
If un = i Then s &= "Nombre 1 (" & i & ") <= " '' Si un est égal à i
'' ajoute à la chaine de caratères s : Nombre 1 (i) <If deux i Then s &= "Nombre 2 (" & i & ") <= " ' Nombre 2 (i) <=
If trois = i Then s &= "Nombre 3 (" & i & ") <= " ' Nombre 3 (i) <=

Ca devrai marcher mieux
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
3 oct. 2010 à 21:32
Merci raffika pour ta patience !!! Aucune erreur mais le programme reste inerte et quoi que l'on fasse aucun message n’apparaît. Comme je débute, pour le premier projet je dois utiliser la structure suivante même si à vos yeux elle doit vous paraître trop chargée et inutile, en fait j'aimerais comprendre ou sont mes erreurs, sans chercher a simplifier le code, juste en le faisant fonctionner :
  Private Sub btncompare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncompare.Click
        If IsNumeric(txtnb1.Text) Then
            If IsNumeric(txtnb2.Text) Then
                If IsNumeric(txtnb3.Text) Then
                    If txtnb1.Text > txtnb2.Text Then

                        If txtnb2.Text > txtnb3.Text Then
                            MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
                            Exit Sub

                            If txtnb1.Text > txtnb3.Text Then
                                MessageBox.Show("Nombre2 > Nombre 3 > Nombre1")
                                Exit Sub
                            Else : MessageBox.Show("Nombre2 > Nombre1 > Nombre3")
                                Exit Sub
                            End If
                        End If

                        If txtnb1.Text > txtnb3.Text Then
                            MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
                            Exit Sub

                            If txtnb3.Text > txtnb2.Text Then
                                MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
                                Exit Sub
                            Else : MessageBox.Show("Nombre1 > Nombre2 > Nombre3")

                            End If
                        End If
                    End If

                Else : MessageBox.Show("Veuillez saisir des entiers numériques !!!")
                End If
            Else : MessageBox.Show("Veuillez saisir des entiers numériques !!!")
            End If
        Else : MessageBox.Show("Veuillez saisir des entiers numériques !!!")
        End If

    End Sub
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
3 oct. 2010 à 21:52
Ps : en te relisant tu dis que
tu veux savoir d'ou vient le problème ^^'
Déjà tu utilises plusieurs If
pour vérifier que les valeurs sont numériques
alors que dans min code ci dessus, on vérifie
directment les 3 valeurs
le code n'est pas très clair
pense à arranger un peu en faisant des espaces
et en utilisant le : à bon escient pour
pouvoir déjà t'y retrouver dans le code.
Je vais regarder ton code et voir si
je trouve d'ou vient le problème.
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
3 oct. 2010 à 21:54
Encore merci, l'algo fonctionne aussi à merveille !

Mais actuellement je n'ai pas vu les structures telles que "If CInt(txtnb1.Text) = i Then s &= "Nombre 1 (" & i & ")" ou encore "Dim resultat As String = s.Substring(0, Len(s) - 4)" .

Mon projet doit comporter des structures simples que j'ai déjà vu en cours

Saurais tu me dire pourquoi mon code precedemment posté ne permet que d'afficher les boites suivantes : nombre1>nombre2>nombre3 et nombre1>nombre3>nombre2
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
3 oct. 2010 à 21:57
Oui c'est sur mon code n'est pas très clair ^^
Mon prof nous a seulement dit de ne pas utiliser de Else If. Quand aux " : ", je ne sais pas à quoi ils servent, après un Else, intellisense me les place tout seul !!!

Enfait le but du projet est d'adapter un algo ecrit sur papier en delphi en programme VB mais avec en plus les contraintes de vérification d'entiers
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
3 oct. 2010 à 22:46
Bonsoir,

Commençons par décortiquer ton code et pourquoi il ne donne pas les résultats escomptés: (je n'ai pris que la partie sans les vérifications car cette partie là semble comprise)

If txtnb1.Text > txtnb2.Text Then
    ' Ici on peut déjà dire Nombre1 > Nombre2
    If txtnb2.Text > txtnb3.Text Then
        MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
        Exit Sub
        ' Cette partie du code ne sera jamais atteinte à cause du Exit Sub juste avant
        ' Je mets donc cette partie en commentaire
        'If txtnb1.Text > txtnb3.Text Then
        '    MessageBox.Show("Nombre2 > Nombre 3 > Nombre1")
        '    Exit Sub
        'Else : MessageBox.Show("Nombre2 > Nombre1 > Nombre3")
        '    Exit Sub
        'End If
    End If
    If txtnb1.Text > txtnb3.Text Then
        ' Ici on peut dire que Nombre1 > Nombre3
        ' Mais on ne sait pas si Nombre2 > Nombre3 ou le contraire
        MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
        Exit Sub
        ' Comme précédemment cette partie ne sera jamais atteinte
        ' je commente donc la zone
        'If txtnb3.Text > txtnb2.Text Then
        '    MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
        '    Exit Sub
        'Else : MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
        'End If
    End If
End If

'Ici je remets le code sans les commentaires
If txtnb1.Text > txtnb2.Text Then
    If txtnb2.Text > txtnb3.Text Then
        MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
        Exit Sub
    End If
    If txtnb1.Text > txtnb3.Text Then
        MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
        Exit Sub
    End If
End If


On comprend déjà mieux pourquoi certains cas ne se produisent jamais ; en ce qui concerne les : ils servent à écrire deux instructions sur la même ligne Else étant considéré comme une instruction pour pouvoir écrire MessageBox... derrière les : sont nécessaires exemples:
If True Then
    DoSomething()
Else : SomethingElse()
End If
'ou
If True Then
    DoSomething()
Else ' plus besoin des : ici
    SomethingElse()
End If
' de même on peut écrire (même si c'est peu lisible et non recommandé)
Dim i As Integer : Dim s As String : i 42 : s "Une Chaine " : MessageBox.Show(s & i.ToString())


Une manière correcte d'écrire le code d'origine correctement (et en conservant les instructions utilisées étant donné qu'elles semblent t'être imposées):
Private Sub btncompare_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btncompare.Click
    Dim message As String = "Veuillez saisir des entiers numériques !!!"

    If IsNumeric(txtnb1.Text) Then
        MessageBox.Show(message)
        Exit Sub
    End If
    If IsNumeric(txtnb2.Text) Then
        MessageBox.Show(message)
        Exit Sub
    End If
    If IsNumeric(txtnb3.Text) Then
        MessageBox.Show(message)
        Exit Sub
    End If

    'À partir d'ici on est sûrs que toutes les valeurs sont bien numériques

    If txtnb1.Text > txtnb2.Text Then
        'Nombre1 > Nombre2
        If txtnb1.Text > txtnb3.Text Then
            'Nombre1 > Nombre3 mais on ne sait pas encore si c'est 1-2-3 ou 1-3-2
            If txtnb2.Text > txtnb3.Text Then
                'Nombre2 > Nombre3
                message = "Nombre1 > Nombre2 > Nombre3"
            Else
                'Nombre3 > Nombre2
                message = "Nombre1 > Nombre3 > Nombre2"
            End If
        Else
            'Nombre3 > Nombre1
            message = "Nombre3 > Nombre1 > Nombre2"
        End If
    Else
        'Nombre2 > Nombre1
        If txtnb1.Text > txtnb3.Text Then
            'Nombre1 > Nombre3
            message = "Nombre2 > Nombre1 > Nombre3
        Else
            'Nombre3 > Nombre1 mais on ne sait toujours si c'est 2-3-1 ou 3-2-1
            If txtnb2.Text > txtnb3.Text Then
                'Nombre2 > Nombre3
                message = "Nombre2 > Nombre3 > Nombre1"
            Else
                'Nombre3 > Nombre2
                message = "Nombre3 > Nombre2 > Nombre1"
            End If
        End If
    End If

    MessageBox.Show(message)            

End Sub


Voilà j'espère que c'est un peu plus clair (vérifier si je n'ai pas commis une erreur de syntaxe, comme j'ai codé directement ici et que je n'ai pas l'habitude de programmer de cette manière).

Cordialement !
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
4 oct. 2010 à 09:41
Salut,
le : sert à séparer plusieurs lignes
d'instructions différentes, par exemple :
MessageBox.Show("Salut") : MessageBox.Show(" !! ") : MessageBox.Show("")
Quand à ton code, pourquoi tu encastre plusieurs If
les un dans les autres (ça sert dans certains cas
mais dans le cas de 5 conditions différentes à vérifier
ça ne s'applique pas)
? Il faut que tu fasse à la suite
plusieurs vérification distinctes à la suite
comme dans le code de nhervagault ou dans
celui de Sehnsucht (je n'ai pas tout lu tout son code).
Je remet le code pour que tu voie bien :

If txtnb1.Text > txtnb2.Text and txtnb2.Text > txtnb3.Text Then
MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
Exit Sub
end if

If txtnb2.Text > txtnb3.Text and txtnb3.Text > txtnb1.Text Then
MessageBox.Show("Nombre2 > Nombre 3 > Nombre1")
Exit Sub
end if

If txtnb2.Text > txtnb1.Text and txtnb1.Text > txtnb3.Text Then
MessageBox.Show("Nombre2 > Nombre1 > Nombre3")
Exit Sub
End If

If txtnb3.Text > txtnb1.Text and txtnb1.Text > txtnb2.Text Then
MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
Exit Sub
end if

If txtnb1.Text > txtnb2.Text and txtnb2.Text > txtnb3.Text Then
MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
Exit Sub
end if

Quant à l'erreur que tu as fait dans le code
elle est dès le départ :
        If txtnb1.Text > txtnb2.Text Then '' Ici tu vérifie si Nombre1 > Nombre2
'' Donc le code ci dssous ne s'execute que si cette condition est vraie
            If txtnb2.Text > txtnb3.Text Then
                MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
                Exit Sub
                If txtnb1.Text > txtnb3.Text Then
                    MessageBox.Show("Nombre2 > Nombre 3 > Nombre1")
                    Exit Sub
                Else
                    MessageBox.Show("Nombre2 > Nombre1 > Nombre3")
                    Exit Sub
                End If
            End If

            If txtnb1.Text > txtnb3.Text Then
                MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
                Exit Sub
                If txtnb3.Text > txtnb2.Text Then
                    MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
                    Exit Sub
                Else
                    MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
                End If
            End If
        End If '' C'est sur cette ligne que tu arrives si Nombre1 < Nombre2
'' Donc dans ce cas, pas de MessageBox, rien ne se passeras.
0
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
4 oct. 2010 à 16:27
Bonjour

@raffika:

Quel est l'intérêt de répéter une grande partie de ce que j'ai dit (l'histoire des : et "l'explication" de la non apparition de certaines MessageBox) ? l'aurais-je mal expliqué ?
Fais juste attention à ce que tu écris sinon
If txtnb1.Text > txtnb2.Text and txtnb2.Text > txtnb3.Text Then
    MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
    Exit Sub
end if

If txtnb2.Text > txtnb3.Text and txtnb3.Text > txtnb1.Text Then
    MessageBox.Show("Nombre2 > Nombre 3 > Nombre1")
    Exit Sub
end if

If txtnb2.Text > txtnb1.Text and txtnb1.Text > txtnb3.Text Then
    MessageBox.Show("Nombre2 > Nombre1 > Nombre3")
    Exit Sub
End If

If txtnb3.Text > txtnb1.Text and txtnb1.Text > txtnb2.Text Then
    MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
    Exit Sub
end if

If txtnb1.Text > txtnb2.Text and txtnb2.Text > txtnb3.Text Then
    MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
    Exit Sub
end if


Il y a deux fois la même chose (Pour Nombre1 > Nombre2 < Nombre3) et il manque 2 combinaisons sur les 6 possibles (tu en as écris 5 - 1 (le doublon)): il manque Nombre1 > Nombre3 > Nombre2 et Nombre3 > Nombre2 > Nombre1.

Quant à la source de l'erreur de Moundir76 ce n'était pas l'imbrication de multiple If (même si j'en conviens c'est une pratique à éviter dans la mesure du possible); l'erreur provenait réellement d'une mauvaise utilisation de Exit Sub qui empêchait certaines parties du code d'être atteintes et atteignables surtout.

Cordialement !
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
4 oct. 2010 à 16:44
Avec Visual Basic 2010, on voit clairement que :
If IsNumeric(txtnb1.Text) Then
            If IsNumeric(txtnb2.Text) Then
                If IsNumeric(txtnb3.Text) Then
If txtnb1.Text > txtnb2.Text Then '' Ce premier If

                        If txtnb2.Text > txtnb3.Text Then
                            MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
                            Exit Sub

                            If txtnb1.Text > txtnb3.Text Then
                                MessageBox.Show("Nombre2 > Nombre 3 > Nombre1")
                                Exit Sub
                            Else : MessageBox.Show("Nombre2 > Nombre1 > Nombre3")
                                Exit Sub
                            End If
                        End If

                        If txtnb1.Text > txtnb3.Text Then
                            MessageBox.Show("Nombre3 > Nombre1 > Nombre2")
                            Exit Sub

                            If txtnb3.Text > txtnb2.Text Then
                                MessageBox.Show("Nombre1 > Nombre2 > Nombre3")
                                Exit Sub
                            Else : MessageBox.Show("Nombre1 > Nombre2 > Nombre3")

                            End If
                        End If
                    End If '' renvoie ICI

                Else : MessageBox.Show("Veuillez saisir des entiers numériques !!!")
                End If
            Else : MessageBox.Show("Veuillez saisir des entiers numériques !!!")
            End If

Et pour le code dans mon dernier post, je n'ai que fait un
copié-collé du code de nhervagault.
Sinon pour les : j'ai juste mis un exemple personnel. Excuse moi
j'ai tendance à lire un peu trop vite.
Sinon je ne vois pas ou dans le code de Moundir76, un Exit Sub
est placé avant un MessageBox. Si le MessageBox est affiché,
le résultat est trouvé donc on peux quitter la Sub.
Salutations.
0
Rejoignez-nous