Tri et choix de valeurs [VBA]

Bonjour à tous!

Débutante en programmation, je suis entrain de réaliser un programme sous VBA-Excel avec des macros et je rencontre un petit problème pour l'un de mes modules. Si vous pouvez m'aider ce serait super!

Je tenais aussi à dire que ma programmation n'est sûrement pas optimisée mais étant débutante, tant que ça marche, je suis contente!

Explication de la situation et ce qui est réalisé :

Dans un de mes modules, je réalise un calcul nommé Vcopi(m,p) où les indices m et p sont respectivement lignes et colonnes par rapport au calcul qui réalise. A partir de cela les valeurs calculées sont donc stockées dans mon tableau "virtuel" Vcopi(m,p).

Pour la suite, je veux trouver la valeur maximale de Vcopi(m,p). J'ai réussi à le faire grâce à une boucle et même à récupérer pour quel m et p c'est.

Je fais ensuite avec cette valeur maximale d'autres calculs mais si les résultats de ces calculs ne remplissent pas certaines conditions (par exemple dépasse une valeur), alors je remonte un peu plus haut dans mon programme et refait la boucle avec la deuxième valeur maximale et ainsi de suite tant que je n'ai pas la valeur qui remplit toutes les conditions.

Problème à résoudre :

Mon problème est que je n'arrive pas à récupérer la deuxième valeur maximale ou troisième ou etc.. tout en récupérant pour quel m et p c'est.

Ce que j'ai actuellement :

Récupérer la valeur max:

vecteur_max = Vcopf(1, 1)

For m = 1 To 400

For p = 1 To 13

If Vcopf(m, p) > vecteur_max Then

vecteur_max = Vcopf(m, p)

indexp = p

indexm = m

End If

Next p

Next m

Ensuite je fais des calculs grâce à cette valeur et les index m et p puis je rentre cette valeur dans des boucles par rapport à des calculs :

If N <= Nmax Then

If aptotal <= apmax(indexp) Then

P = calcul_P(Vcopi(indexm, indexp), Kc, aptotal, avance(indexm, indexp))

Else

MsgBox "Pas bon ap"

End If

Else

MsgBox "Pas bon N"

End If

Pour l'instant j'ai mis des MsgBox quand la condition n'était pas respectée mais à la place il faut revenir à la recherche de la valeur maximale et obtenir la deuxième valeur maximale, troisième, etc..

Merci de votre aide!

Bonjour,

Sans fichier, on voit difficilement. Cependant compte tenu de la problématique que tu annonces, tu aurais peut-être intérêt à un tableau listant toutes les valeurs de 1 à n, n étant nb lignes * nb colonnes

Pour chaque valeur tu enregistres : valeur, ligne, colonne.

Soit un tableau : NomTableau(n, 2)

Une fois constitué tu le tries par valeurs décroissantes, donc tes valeurs max 1, 2, 3... seront dans l'ordre.

(J'ai laissé l'élément 0 de la 1re dimension inutilisé, je m'en sers habituellement pour "switcher" lors de routine de tri...)

Cordialement.

BONJOUR

Regarder ca peut etre va vous aider

Option Base 1
Sub maxx()
Dim i As Integer, P As Integer, m As Integer, c As Integer, posi As Integer
Dim L As Integer, ww As Integer, vecteur_max, indexp As Integer, indexm As Integer
Dim tabtemps(), ArrayName()

ReDim tabtemps(400 * 13, 3)
ReDim ArrayName(400 * 13, 3)

nb = 400 * 13
c = 0

For m = 1 To 400
For P = 1 To 13
c = c + 1
tabtemps(c, 1) = Vcopf(m, P)
tabtemps(c, 2) = m
tabtemps(c, 3) = P

Next P
Next m

  For i = 1 To nb

       posi = 1

       For L = 1 To nb
            If tabtemps(i, 1) < tabtemps(L, 1) And i <> L Then
                posi = posi + 1
            End If
        Next

        For ww = 1 To 1
            If ArrayName(posi, 1) = "" Then
               ArrayName(posi, 1) = tabtemps(i, 1)
               ArrayName(posi, 2) = tabtemps(i, 2)
               ArrayName(posi, 3) = tabtemps(i, 3)
           Else
               posi = posi + 1
               ww = ww - 1
            End If
        Next

   Next

 '#################################################################

For x = 1 To nb
If n <= Nmax Then

If aptotal <= apmax(ArrayName(x, 3)) Then
P = calcul_P(Vcopi(ArrayName(x, 2), ArrayName(x, 3)), Kc, aptotal, avance(ArrayName(x, 2), ArrayName(x, 3)))

Next x

End Sub

Je tenais aussi à dire que ma programmation n'est sûrement pas optimisée mais étant débutant, tant que ça marche, je suis content!

BONJOUR

Regarder ca peut etre va vous aider jai change > par <

    Option Base 1
    Sub maxx()
    Dim i As Integer, P As Integer, m As Integer, c As Integer, posi As Integer
    Dim L As Integer, ww As Integer, vecteur_max, indexp As Integer, indexm As Integer
    Dim tabtemps(), ArrayName()

    ReDim tabtemps(400 * 13, 3)
    ReDim ArrayName(400 * 13, 3)

    nb = 400 * 13
    c = 0

    For m = 1 To 400
    For P = 1 To 13
    c = c + 1
    tabtemps(c, 1) = Vcopf(m, P)
    tabtemps(c, 2) = m
    tabtemps(c, 3) = P

    Next P
    Next m

      For i = 1 To nb

           posi = 1

           For L = 1 To nb
                If tabtemps(i, 1) < tabtemps(L, 1) And i <> L Then
                    posi = posi + 1
                End If
            Next

            For ww = 1 To 1
                If ArrayName(posi, 1) = "" Then
                   ArrayName(posi, 1) = tabtemps(i, 1)
                   ArrayName(posi, 2) = tabtemps(i, 2)
                   ArrayName(posi, 3) = tabtemps(i, 3)
               Else
                   posi = posi + 1
                   ww = ww - 1
                End If
            Next

       Next

     '#################################################################

    For x = 1 To nb
    If n <= Nmax Then

    If aptotal <= apmax(ArrayName(x, 3)) Then
    P = calcul_P(Vcopi(ArrayName(x, 2), ArrayName(x, 3)), Kc, aptotal, avance(ArrayName(x, 2), ArrayName(x, 3)))

    Next x

    End Sub
     

Merci beaucoup pour les réponses! Je vais essayer tout ça et je vous tiens au courant!

Bonjour AMIR,

Par rapport à votre programme, est-ce que vous pouvez me dire à quoi correspond ww?

Je ne vois pas à quoi sert cette boucle surtout qu'elle va de 1 à 1, j'ai du mal à me la représenter..

Merci!

BONJOUR

Bien sur est une partie interissante de mecanisme, mais seulement dit moi es vous pouvez palcer mon code quelque part dans ta macros

Rechercher des sujets similaires à "tri choix valeurs vba"