Problème boucle FOR NEXT

Bonsoir à tous,

je commence tout récemment VBA et j'ai pas mal de problèmes à obtenir ce que je voudrais.

j'aimerais que mon code me permette de parcourir l'ensemble de mon tableau. Si la valeur de ma cellule (i,j) est supérieure à la valeur de I min mais aussi inféieure à l'ensemble des autres valeurs supérieures à Imin, alors elle s'affiche en rouge, si non, on passe à la cellule suivante,...

en gros, je voudrais trouver la plus faible valeur de mon tableau supérieure à I min.

Mon code est sans doute mauvais mais j'espère que vous pourrez m'aider. Merci à vous

Private Sub CommandButton1_Click()

    Dim Imin As Long

    Imin = Cells(13, 9).Value

For i = 5 To 13
For j = 18 To 26

If (Imin < Cells(i, j)) Then
If (Cells(i, j) <= Cells(i, j + 1)) Then

Cells(i, j).Font.Color = RGB(255, 0, 0)
End If
End If
Next j
Next i

End Sub

Personne? :/

Bonsoir,

Voici une proposition en passant par une formule matricielle

J'utilise la cellule I14 ( cells(14,9) )pour noter le résultat de la formule matricielle ( à modifier si cette cellule n'est pas libre )

Sub Macro_jeroff()
Dim cell As Range

With Sheets("Feuil1")
    .Cells(14, 9).FormulaArray = "=SMALL(($R$5:$Z$13>=$I$13)*$R$5:$Z$13,COUNTIF($R$5:$Z$13,""<""&$I$13)+1)"
    .Cells(14, 9).Value = .Cells(14, 9).Value
    For Each cell In .Range("R5:Z13")
        If cell = .Cells(14, 9) Then
            cell.Interior.Color = vbRed
        End If
    Next
End With
End Sub
jeroff a écrit :

Personne? :/

Mois de mai, veille de grand weekend, et surtout pas si simple que ça.

J'ai essayé un truc avec evaluate mais pas réussis.

Si quelqu'un a une solution autre que la mienne, tout vba, je serai assez curieux de voir ce que ça donne

bonsoir,

à tester

Private Sub CommandButton1_Click()

    Dim Imin As Long
    Dim smin As Long

    smin = 1000000000#
    Imin = Cells(13, 9).Value

    For i = 5 To 13
        For j = 18 To 26
            If (Imin < Cells(i, j)) Then
                If Cells(i, j) < smin Then smin = cellis(i, j): mini = i: minj = j
            End If
        Next j
    Next i
    Cells(mini, minj).Font.Color = RGB(255, 0, 0)

End Sub

Merci à vous deux mais a priori je m'orienterais plus vers la solution de h2SO4.

Je comprends juste pas pourquoi tu pose ta variable smin comme étant égale à 1000000000#?

Merci pour votre aide

En fait, je viens de tester ta macro et ça me donne le plus petit nombre de mon tableau alors que je voudrais le plus petit nombre du tableau dont la valeur est supérieure à Imin.

je te joins le fichier excel si ça te tente de regarder, ça serait top!

bonsoir

une faute de frappe dans le code que j'ai fourni, corrigée ci-dessous.

Private Sub CommandButton1_Click()

    Dim Imin As Long
    Dim smin As Long

    smin = 1000000000#
    xmin = Cells( 9,13).Value   ' <-  ligne 9 colonne 13

    For i = 5 To 13
        For j = 18 To 26
            If (xmin < Cells(i, j)) Then
                If Cells(i, j) < smin Then smin = Cells(i, j): mini = i: minj = j
            End If
        Next j
    Next i
    Cells(mini, minj).Font.Color = RGB(255, 0, 0)

End Sub

pour répondre à ta remarque , "la macro affiche la plus petite valeur du tableau". en effet cells(13,9) vaut 5000 (=Imin) et toutes les valeurs de ton tableau sont supérieures à 5000, le résultat est donc logique. je soupçonne que Imin devrait être initialisé à partir d'une autre cellule que cells(13,9) sans doute cells(9,13).

Re,

oui c'est plutôt ça. Par contre ça ne passe pas ils me disent "erreur 1004". je sais pas si tu as testé sur mon fichier excel pour voir ce que ça donnait?

Aussi, pourquoi mettre smin=10000000# ?

Merci

rebonsoir,

1) oui je l'ai essayée sur ton fichier

2) pourquoi 1E9, Pour la recherche d'un minimum, il faut initialiser la variable destinée à contenir le minimum avec une grande valeur qui sera adaptée dès qu'une valeur plus petite sera trouvée. si cela te trouble je peux te fournir un autre code.

Private Sub CommandButton1_Click()

    Dim Imin As Long
    Dim smin As Long

    smin = 0
    xmin = Cells(9, 13).Value   ' <-  ligne 9 colonne 13

    For i = 5 To 13
        For j = 18 To 26
            If (xmin < Cells(i, j)) Then
                If smin = 0 Then smin = Cells(i, j)
                If Cells(i, j) <= smin Then smin = Cells(i, j): mini = i: minj = j
            End If
        Next j
    Next i
    Cells(mini, minj).Font.Color = RGB(255, 0, 0)

End Sub

3) quelle ligne de code est affichée en jaune au moment de l'erreur ?

C'est nickel ça fonctionne même si je ne te suis pas trop pour cette histoire de "très grand nombre" à introduire.

Néanmoins. Ce ne serait pas plus facile de joindre deux condition en disant que le nombre que je recherche doit être plus grand que Imin et une autre condition qui dit de prendre la plus petite valeur. Pourrais tu me faire ça?

Si je cherche un nombre plus grand que Imin, forcément, tous les nombres ayaynt une valeurs plus faible n'entrent plus en ligne de compte, puis si je recherche la valeur la plus petite, ca va forcément être la première valeur supérieure à Imin.

Juste?

Je préfererais ça si c'est possible mais c'est déjà très bien comme cela.

jeroff a écrit :

C'est nickel ça fonctionne même si je ne te suis pas trop pour cette histoire de "très grand nombre" à introduire.

je t'ai donné un code alternatif qui se passe de cette première initialisation à une grande valeur

Néanmoins. Ce ne serait pas plus facile de joindre deux condition en disant que le nombre que je recherche doit être plus grand que Imin et une autre condition qui dit de prendre la plus petite valeur. Pourrais tu me faire ça?

c'est ce que j'ai fait, pour chaque valeur qui est supérieure à lmin, et si elle est inférieure à ma plus petite valeur déjà trouvée je prend cette nouvelle valeur comme plus petite valeur.

Si je cherche un nombre plus grand que Imin, forcément, tous les nombres ayaynt une valeurs plus faible n'entrent plus en ligne de compte, puis si je recherche la valeur la plus petite, ca va forcément être la première valeur supérieure à Imin.

Juste?

oui, mais il faut un algorithme qui permet de trouver cette valeur.

Je préfererais ça si c'est possible mais c'est déjà très bien comme cela.

Ok merci bien en tout cas!

Bonne soirée à toi!

Rechercher des sujets similaires à "probleme boucle next"