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

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

  • Classeur1.xlsx
    12.2 KB · Affichages: 8

M12

XLDnaute Accro
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
 

menal

XLDnaute Nouveau
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
 

Robert

XLDnaute Barbatruc
Repose en paix
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
 

menal

XLDnaute Nouveau
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

  • Classeur1.xlsx
    12.1 KB · Affichages: 4

TooFatBoy

XLDnaute Barbatruc
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:

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000