Identifier meilleure valeur dans une liste

Bonjour à tous,

Voilà pour faire court je suis débutant en programmation sous VB et je dois travailler avec ce language pour mon projet de fin d'études. Je vous serai extrêmement reconnaissant si quelqu'un pouvait m'aider car la sa fait pas mal de temps que je cherche et je trouve rien!

Mon problème: j'ai une liste (disons une colonne de 10 valeurs dans donc dix cases) et j'aimerais "checker" cette colonne et identifier dans cette liste la valeur qui est la plus forte (il doit y avoir une fonction existante pour cela mais je ne l'ai pas trouvé!), et également identifier la case où elle se trouve!

ex:
200
324
34
63
145
34
800
...

merci beaucoup pour votre aide!! :)
Configuration: Windows 7 / Internet Explorer 8.0

5 réponses

  1. Bonjour,

    Je pense pas qu'il y ait de fonction existante pour chercher la plus grande valeur dans une liste.
    D'ailleurs ca dépend, c'est quoi cette liste ? Un tableau de données ? Une listBox ? ComboBox ?

    Je pense qu'il te sera nécessaire de faire une boucle, dont voici l'algorithme :

    Initialiser posmax à -1.
    Pour i allant de 1 au nombre d'éléments dans la liste :
    SI posmax = -1 OU ième élément > posmax'ième élément ALORS posmax = i

    Cordialement, M.
    0
    1. ok merci pour ta réponse swed je vais essayer avec ce que tu m'as donné!

      en fait oui la liste est dans un tableau de données.
      0
      1. re bonjour!

        bon en fait j'ai programmé en suivant ton conseil swed, mais sa me dit qu'un tableau est attendu...je ne voit pas trop ce qu'il veut dire par là!

        mon petit programme:

        If a > b Then //condition original: comparaison entre deux autres valeurs du même tableau

        Dim posmax As Integer
        posmax = -1

        For i = 13 To 20

        If posmax = -1 Or Feuil2.Cells(i, y).valor > posmax(i).valor Then //le problème est identifier ici pour posmax(i)

        posmax = i
        End If

        Next i

        MsgBox ("lameilleure valeur est " & Feuil2.Cells(i, y).valor)

        merci encore pour votre aide!
        0
        1. Bonjour
          essaye de mettre "posmax" a la place de i dans : MsgBox ("lameilleure valeur est " & Feuil2.Cells(i, y).valor)
          car posmax sert a mémoriser la position de ta valeur max
          donc faut que tu t'en serves
          sinon pour ton histoire de tableau je sais pas

          tiens moi stp

          barbouze85
          toujours au service de ces dames
          0
      2. ok merci barbouze, mais en fait je crois que c'est de ma faute car je n'ai pas créer de tableau pour recenser les valeurs, car en fait elle sont issues d'un copier/coller d'un autre tableau sur une autre feuille excel!!

        donc est ce que quelqu'un a une autre idée svp?!

        merci d'avance!!
        0
        1. Ton erreur est dû à cette instruction : posmax(i).valor
          Car posmax est un entier, et non un tableau. Il sert à identifier la position du nombre le plus haut dans la liste.

          En gros tu as :
          -posmax = la position de la valeur maximale dans la liste (ou -1 si pas encore trouvée)
          -Feuil2.Cells(posmax, y).valor = la valeur la plus haute dans la liste (sauf si posmax =-1)
          -Feuil2.Cells(i, y).valor = la valeur que tu es entrain de parcourir dans la liste

          Voici le code corrigé (non testé) :

          Dim posmax As Integer
          posmax = -1

          For i = 13 To 20

          If posmax = -1 then
          posmax=i
          elseif Feuil2.Cells(i, y).valor > Feuil2.Cells(posmax, y).valor then
          posmax = i
          End If

          Next i

          MsgBox ("la meilleure valeur est " & Feuil2.Cells(posmax, y).valor)

          NOTE IMPORTANTE :
          Il ne faut pas mettre un test IF... OR ... THEN
          Car dans ce cas, VB va tester les deux conditions, même si la première est vrai (contrairement au C, JAVA ou autre...).
          Et donc quand posmax=-1, ton expression Feuil2.Cells(posmax, y).valor va planter...

          (C'est clair?)

          Cordialement, M.
          0