XL 2010 Trouver l'indice de la ligne qui contient la valeur maximal

  • Initiateur de la discussion Initiateur de la discussion menal
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

menal

XLDnaute Nouveau
Bonjour,
Je cherche à trouver l'indice de la ligne qui contient la valeur maximal afin de l’utiliser dans un calcul mais je n'arrive pas à la faire.
A titre d'exemple voici le code que j'ai fait et mon fichier excel
Je vous remercie d'avance
VB:
Sub seq()
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Seq"
Sheets("Seq").Range("A1").Value = "NumT"
Sheets("Seq").Range("B1").Value = "NumSeq"
Sheets("Seq").Range("C1").Value = "NumPass"
Sheets("Seq").Range("D1").Value = "TempfinSeq"
DernLigne = Sheets("Em").Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To DernLigne
If (Sheets("Em").Range("B" & i + 1).Value = Sheets("Em").Range("B" & i).Value) Then
If (Sheets("Em").Range("C" & i).Value = 1) Then
ml = WorksheetFunction.max(Sheets("Em").Range("C2:C" & DernLigne))
ligne = ml.Row
Sheets("Seq").Range("A" & j).Value = Sheets("Em").Range("A" & ligne).Value
Sheets("Seq").Range("B" & j).Value = Sheets("Em").Range("B" & ligne).Value
Sheets("Seq").Range("C" & j).Value = Sheets("Em").Range("C" & ligne).Value
Sheets("Seq").Range("C" & j).Value = Sheets("Em").Range("D" & ligne).Value
j = j + 1
End If
End If
Next
End Sub
 

Pièces jointes

Bonjour

Teste comme ceci
VB:
Sub seq()
  Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Seq"
  Sheets("Seq").Range("A1").Value = "NumT"
  Sheets("Seq").Range("B1").Value = "NumSeq"
  Sheets("Seq").Range("C1").Value = "NumPass"
  Sheets("Seq").Range("D1").Value = "TempfinSeq"
  DernLigne = Sheets("Em").Range("A" & Rows.Count).End(xlUp).Row
  j = 2
    For i = 2 To DernLigne
      If (Sheets("Em").Range("B" & i + 1).Value = Sheets("Em").Range("B" & i).Value) Then
        If (Sheets("Em").Range("C" & i).Value = 1) Then
          ml = WorksheetFunction.Max(Sheets("Em").Range("C2:C" & DernLigne))
          ligne = ml
          Sheets("Seq").Range("A" & j).Value = Sheets("Em").Range("A" & ligne).Value
          Sheets("Seq").Range("B" & j).Value = Sheets("Em").Range("B" & ligne).Value
          Sheets("Seq").Range("C" & j).Value = Sheets("Em").Range("C" & ligne).Value
          Sheets("Seq").Range("D" & j).Value = Sheets("Em").Range("D" & ligne).Value
          j = j + 1
        End If
      End If
    Next
 
Bonjour

Teste comme ceci
VB:
Sub seq()
  Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Seq"
  Sheets("Seq").Range("A1").Value = "NumT"
  Sheets("Seq").Range("B1").Value = "NumSeq"
  Sheets("Seq").Range("C1").Value = "NumPass"
  Sheets("Seq").Range("D1").Value = "TempfinSeq"
  DernLigne = Sheets("Em").Range("A" & Rows.Count).End(xlUp).Row
  j = 2
    For i = 2 To DernLigne
      If (Sheets("Em").Range("B" & i + 1).Value = Sheets("Em").Range("B" & i).Value) Then
        If (Sheets("Em").Range("C" & i).Value = 1) Then
          ml = WorksheetFunction.Max(Sheets("Em").Range("C2:C" & DernLigne))
          ligne = ml
          Sheets("Seq").Range("A" & j).Value = Sheets("Em").Range("A" & ligne).Value
          Sheets("Seq").Range("B" & j).Value = Sheets("Em").Range("B" & ligne).Value
          Sheets("Seq").Range("C" & j).Value = Sheets("Em").Range("C" & ligne).Value
          Sheets("Seq").Range("D" & j).Value = Sheets("Em").Range("D" & ligne).Value
          j = j + 1
        End If
      End If
    Next
Merci, mais moi je veux aussi que la valeur de ligne change pour chaque valeur de la boucle
 
Bonjour le fil, bonjour le forum,

Ton code modifié. Comme je ne sais pas exactement ce que tu veux faire j'ai juste adapté mais il me semple que les J sont inutiles puisqu'il n'y a qu'une seule valeur max...

VB:
Sub seq()
Dim OS As Worksheet
Dim OD As Worksheet

Set OS = Worksheets("Em")
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Seq"
Set OD = ActiveSheet
OD.Range("A1").Value = "NumT"
OD.Range("B1").Value = "NumSeq"
OD.Range("C1").Value = "NumPass"
OD.Range("D1").Value = "TempfinSeq"
DernLigne = OS.Range("A" & Rows.Count).End(xlUp).Row
j = 2
For i = 2 To DernLigne
    If OS.Range("B" & i + 1).Value = OS.Range("B" & i).Value Then
        If OS.Range("C" & i).Value = 1 Then
            ml = WorksheetFunction.Max(OS.Range("C2:C" & DernLigne))
            ligne = OS.Columns(3).Find(ml, , xlValues, xlWhole).Row
            Sheets("Seq").Range("A" & j).Value = Sheets("Em").Range("A" & ligne).Value
            Sheets("Seq").Range("B" & j).Value = Sheets("Em").Range("B" & ligne).Value
            Sheets("Seq").Range("C" & j).Value = Sheets("Em").Range("C" & ligne).Value
            Sheets("Seq").Range("C" & j).Value = Sheets("Em").Range("D" & ligne).Value
            j = j + 1
        End If
    End If
Next i
End Sub
 
Bonjour le fil, bonjour le forum,

Ton code modifié. Comme je ne sais pas exactement ce que tu veux faire j'ai juste adapté mais il me semple que les J sont inutiles puisqu'il n'y a qu'une seule valeur max...

VB:
Sub seq()
Dim OS As Worksheet
Dim OD As Worksheet

Set OS = Worksheets("Em")
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Seq"
Set OD = ActiveSheet
OD.Range("A1").Value = "NumT"
OD.Range("B1").Value = "NumSeq"
OD.Range("C1").Value = "NumPass"
OD.Range("D1").Value = "TempfinSeq"
DernLigne = OS.Range("A" & Rows.Count).End(xlUp).Row
j = 2
For i = 2 To DernLigne
    If OS.Range("B" & i + 1).Value = OS.Range("B" & i).Value Then
        If OS.Range("C" & i).Value = 1 Then
            ml = WorksheetFunction.Max(OS.Range("C2:C" & DernLigne))
            ligne = OS.Columns(3).Find(ml, , xlValues, xlWhole).Row
            Sheets("Seq").Range("A" & j).Value = Sheets("Em").Range("A" & ligne).Value
            Sheets("Seq").Range("B" & j).Value = Sheets("Em").Range("B" & ligne).Value
            Sheets("Seq").Range("C" & j).Value = Sheets("Em").Range("C" & ligne).Value
            Sheets("Seq").Range("C" & j).Value = Sheets("Em").Range("D" & ligne).Value
            j = j + 1
        End If
    End If
Next i
End Sub
Merci, mais peut être j'ai mal écrit l'algorithme, mon idée c'est de récupérer pour chaque valeur de i le maximum qui lui correspond après récupérer le numéro de ligne de ce maximum afin de remplir ma nouvelle feuil 🙁
La sortie ça devrait semble au fichier en PJ
 

Pièces jointes

Bonjour,

Peut-être ceci :
ml = Sheets("Em").Range("C:C").Find(Application.WorksheetFunction.Max(Sheets("Em").Range("C2:C" & DernLigne)), LookIn:=xlValues, lookat:=xlWhole).Row

[edit]
mon idée c'est de récupérer pour chaque valeur de i le maximum qui lui correspond après récupérer le numéro de ligne de ce maximum
Alors ce que j'ai écrit ne doit pas être bon... 🙁
[/edit]
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
467
Réponses
3
Affichages
589
Retour