Passage à la ligne suivante

teostid Messages postés 2 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai créer un procédure qui me permet de colorer une cellule d'une ligne d emon choix:
Sub tests_selection()
'Déclaration des plages
Dim cel
Dim plage As Range
'Selection des plages
Set plage = Range("D2:I11")
For Each cel In plage
    If cel.Text = minimum Then
        cel.Interior.ColorIndex = 7
    End If
Next cel
End Sub


Et ensuite j'ai créer une fonction qui trouve le minimum de la ligne:
Public Function minimum() As Double
    Dim myRange As Range
    Set myRange = Worksheets("RC").Range("D2:I2")
    minimum = Application.WorksheetFunction.Min(myRange)
End Function


Donc la procédure mets en couleur le minimum de la ligne.

Mais le problème c'est que j'arrive à faire faire ça de la ligne 2 à la ligne 11 par exemple.
Je pense qu'il faudrai mettre une boucle dans la fonction. Mais je n'y arrive

Donc si vous avez des idées, conseils, solutions je suis preneur merci bcp!!!

1 réponse

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    L'idéal est de boucler sur chaque ligne de ta plage et de disposer d'une fonction qui te renvoie, non pas la valeur du minimum de cette ligne, mais la colonne ou se situe cette valeur minimale.

    Sub tests_selection()
    'Déclaration des plages
    Dim Ligne As Integer, col As Integer, ws As Worksheet
    
    'Selection de la feuille
    Set ws = Worksheets("Feuil1")
    'remise en "blanc" du range
    ws.Range("D2:I11").Interior.Pattern = xlNone
    'boucle sur les lignes
    For Ligne = 2 To 11
        'calcule de la colonne contenant le minimum
        'en fonction de :
            'la feuille : ws
            'la première colonne : "D"
            'la dernière colonne : "I"
            'le numéro de la ligne : Ligne
        col = Colonne_Min(ws, "D", "I", Ligne)
        '"coloriage"
        Cells(Ligne, col).Interior.ColorIndex = 7
    Next Ligne
    End Sub
    
    Function Colonne_Min(Feuil As Worksheet, FirstCol As String, LastCol As String, lig As Integer) As Integer
    Dim Cel As Range, Colmini As Integer, mini As Double
        'valeur par défaut (contenu de la première colonne)
        mini = Feuil.Range(FirstCol & lig).Value
        'colonne par défaut (1ère)
        Colmini = Feuil.Range(FirstCol & lig).Column
        'boucle sur les cellules de la ligne
        For Each Cel In Feuil.Range(FirstCol & lig & ":" & LastCol & lig)
            'si inférieur au minimum
            If Cel.Value < mini Then
                mini = Cel.Value 'stocke la valeur
                Colmini = Cel.Column 'stocke la colonne
            End If
        Next Cel
        'retourne le numéro de la colonne contenant le minimum
        Colonne_Min = Colmini
    End Function


    Après, ce code est valable pour des petites plages.
    Pour des plages plus importantes (milliers de lignes, centaine de colonne) il faudra en changer.
    0
    1. teostid Messages postés 2 Statut Membre
       
      Merci beaucoup de prendre le temps de m'aider.

      Quand je rendre votre code en remplaçant "feuil" par "RC", qui est le nom de ma feuille.
      Il y a marqué ERREUR D'EXECUTION '13':
      Incompatibilité de type

      Vous savez à quoi cela est du?
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > teostid Messages postés 2 Statut Membre
         
        C'est cette ligne de code que tu dois modifier :
        Set ws = Worksheets("Feuil1")

        à remplacer par :
        Set ws = Worksheets("RC")
        0