Identifier meilleure valeur dans une liste

louloutte63 -  
 swed -
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. swed
     
    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
  2. louloutte63
     
    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
  3. louloutte63
     
    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. barbouze85
       
      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
  4. louloutte63
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. swed
     
    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