Passage à la ligne suivante

Fermé
teostid Messages postés 2 Date d'inscription mercredi 6 avril 2016 Statut Membre Dernière intervention 6 avril 2016 - Modifié par pijaku le 6/04/2016 à 09:20
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 6 avril 2016 à 10:15
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 avril 2016 à 09:54
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
teostid Messages postés 2 Date d'inscription mercredi 6 avril 2016 Statut Membre Dernière intervention 6 avril 2016
6 avril 2016 à 10:10
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > teostid Messages postés 2 Date d'inscription mercredi 6 avril 2016 Statut Membre Dernière intervention 6 avril 2016
6 avril 2016 à 10:15
C'est cette ligne de code que tu dois modifier :
Set ws = Worksheets("Feuil1")

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