Toujours un probl=E8me de science politique :
Soit un fichier avec en colonne A, le nom du candidat, en colonne B
son canton, et en colonne C son score au second tour. Comment inscrire
pour chaque candidat en "Elu" ou "Battu" en colonne D ? Est elu, celui
qui obtient le plus de voix, c'est-=E0-dire la majorit=E9 relative. En
sachant =E9videmment qu'il peut y avaoir 1, 2, 3 candidats ou plus par
canton.
Voici mon code. j'utilise la fonction Find Max. Mais =E7a ne me semble
pas tr=E8s fiable.
Des id=E9es ?
Merci par avance.
Sub EluT2()
'Ins=E8re une ligne blanche avant chaque canton
Dim d As Double
For d =3D Range("B65536").End(xlUp).Row To 1
If Range("B" & d).Value =3D Range("B" & d - 1).Value Then Rows(d +
1).Insert Shift:=3DxlDown
Next
'Inscrit "Elu"
Dim cold As Range
Dim Plage As Range
Dim Ctr As Integer
Ctr =3D 3
Range("C65536").End(xlUp).Offset(1, 0).Select
Set cold =3D Selection
Do Until cold =3D Null Or cold.Value =3D Cells(1, Ctr)
Set cold =3D cold.End(xlUp)
Set hot =3D cold.End(xlUp)
Set Plage =3D Range(cold.Address & ":" & hot.Address)
If IsEmpty(cold.Offset(1, 0)) Then Plage.Select
Dim Max As Double
Max =3D Application.WorksheetFunction.Max(Plage)
On Error Resume Next
Selection.Find(Max).Select
ActiveCell.Offset(0, 1).Value =3D "Elu"
Loop
'Inscrit "Battu"
Range("D65536").End(xlUp).Offset(1, 0).Select
For V =3D Range("D65536").End(xlUp).Row To 1
If Range("D" & V) =3D 0 Then
Range("D" & V).Value =3D "Battu"
End If
Next
'Supprime les lignes blanches
derni=E8re_ligne =3D ActiveCell.SpecialCells(xlLastCell).Row
For Z =3D derni=E8re_ligne To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(Z)) =3D 0 Then
Rows(Z).Delete
Next Z
sans passer par une macro, entre la formule suivante qui me semble fonctionner en colonne D2, =SI(C2=MAX(SI(B$2:B$65536²;C$2:C$65536;0));"Elu";"Perdu") puis valide en tapant Controle + Shift + entrée, enfin recopie la cellule sur toutes ta colonne D
Billy Bob
On 18 mar, 18:30, "Sylvain P." wrote:
Bonjour à tous,
Toujours un problème de science politique : Soit un fichier avec en colonne A, le nom du candidat, en colonne B son canton, et en colonne C son score au second tour. Comment inscrire pour chaque candidat en "Elu" ou "Battu" en colonne D ? Est elu, celui qui obtient le plus de voix, c'est-à-dire la majorité relative. En sachant évidemment qu'il peut y avaoir 1, 2, 3 candidats ou plus par canton.
Voici mon code. j'utilise la fonction Find Max. Mais ça ne me semble pas très fiable.
Des idées ? Merci par avance.
Sub EluT2()
'Insère une ligne blanche avant chaque canton
Dim d As Double For d = Range("B65536").End(xlUp).Row To 1 If Range("B" & d).Value = Range("B" & d - 1).Value Then Rows(d + 1).Insert Shift:=xlDown Next
'Inscrit "Elu"
Dim cold As Range Dim Plage As Range Dim Ctr As Integer Ctr = 3 Range("C65536").End(xlUp).Offset(1, 0).Select Set cold = Selection
Do Until cold = Null Or cold.Value = Cells(1, Ctr) Set cold = cold.End(xlUp) Set hot = cold.End(xlUp) Set Plage = Range(cold.Address & ":" & hot.Address) If IsEmpty(cold.Offset(1, 0)) Then Plage.Select Dim Max As Double Max = Application.WorksheetFunction.Max(Plage) On Error Resume Next Selection.Find(Max).Select ActiveCell.Offset(0, 1).Value = "Elu" Loop
'Inscrit "Battu"
Range("D65536").End(xlUp).Offset(1, 0).Select For V = Range("D65536").End(xlUp).Row To 1 If Range("D" & V) = 0 Then Range("D" & V).Value = "Battu" End If Next
'Supprime les lignes blanches
dernière_ligne = ActiveCell.SpecialCells(xlLastCell).Row For Z = dernière_ligne To 1 Step -1 If Application.WorksheetFunction.CountA(Rows(Z)) = 0 Then Rows(Z).Delete Next Z
End Sub
Bonjour,
sans passer par une macro,
entre la formule suivante qui me semble fonctionner en colonne D2,
=SI(C2=MAX(SI(B$2:B$65536=B2;C$2:C$65536;0));"Elu";"Perdu")
puis valide en tapant Controle + Shift + entrée,
enfin recopie la cellule sur toutes ta colonne D
Billy Bob
On 18 mar, 18:30, "Sylvain P." <sylvainpelllet...@gmail.com> wrote:
Bonjour à tous,
Toujours un problème de science politique :
Soit un fichier avec en colonne A, le nom du candidat, en colonne B
son canton, et en colonne C son score au second tour. Comment inscrire
pour chaque candidat en "Elu" ou "Battu" en colonne D ? Est elu, celui
qui obtient le plus de voix, c'est-à-dire la majorité relative. En
sachant évidemment qu'il peut y avaoir 1, 2, 3 candidats ou plus par
canton.
Voici mon code. j'utilise la fonction Find Max. Mais ça ne me semble
pas très fiable.
Des idées ?
Merci par avance.
Sub EluT2()
'Insère une ligne blanche avant chaque canton
Dim d As Double
For d = Range("B65536").End(xlUp).Row To 1
If Range("B" & d).Value = Range("B" & d - 1).Value Then Rows(d +
1).Insert Shift:=xlDown
Next
'Inscrit "Elu"
Dim cold As Range
Dim Plage As Range
Dim Ctr As Integer
Ctr = 3
Range("C65536").End(xlUp).Offset(1, 0).Select
Set cold = Selection
Do Until cold = Null Or cold.Value = Cells(1, Ctr)
Set cold = cold.End(xlUp)
Set hot = cold.End(xlUp)
Set Plage = Range(cold.Address & ":" & hot.Address)
If IsEmpty(cold.Offset(1, 0)) Then Plage.Select
Dim Max As Double
Max = Application.WorksheetFunction.Max(Plage)
On Error Resume Next
Selection.Find(Max).Select
ActiveCell.Offset(0, 1).Value = "Elu"
Loop
'Inscrit "Battu"
Range("D65536").End(xlUp).Offset(1, 0).Select
For V = Range("D65536").End(xlUp).Row To 1
If Range("D" & V) = 0 Then
Range("D" & V).Value = "Battu"
End If
Next
'Supprime les lignes blanches
dernière_ligne = ActiveCell.SpecialCells(xlLastCell).Row
For Z = dernière_ligne To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(Z)) = 0 Then
Rows(Z).Delete
Next Z
sans passer par une macro, entre la formule suivante qui me semble fonctionner en colonne D2, =SI(C2=MAX(SI(B$2:B$65536²;C$2:C$65536;0));"Elu";"Perdu") puis valide en tapant Controle + Shift + entrée, enfin recopie la cellule sur toutes ta colonne D
Billy Bob
On 18 mar, 18:30, "Sylvain P." wrote:
Bonjour à tous,
Toujours un problème de science politique : Soit un fichier avec en colonne A, le nom du candidat, en colonne B son canton, et en colonne C son score au second tour. Comment inscrire pour chaque candidat en "Elu" ou "Battu" en colonne D ? Est elu, celui qui obtient le plus de voix, c'est-à-dire la majorité relative. En sachant évidemment qu'il peut y avaoir 1, 2, 3 candidats ou plus par canton.
Voici mon code. j'utilise la fonction Find Max. Mais ça ne me semble pas très fiable.
Des idées ? Merci par avance.
Sub EluT2()
'Insère une ligne blanche avant chaque canton
Dim d As Double For d = Range("B65536").End(xlUp).Row To 1 If Range("B" & d).Value = Range("B" & d - 1).Value Then Rows(d + 1).Insert Shift:=xlDown Next
'Inscrit "Elu"
Dim cold As Range Dim Plage As Range Dim Ctr As Integer Ctr = 3 Range("C65536").End(xlUp).Offset(1, 0).Select Set cold = Selection
Do Until cold = Null Or cold.Value = Cells(1, Ctr) Set cold = cold.End(xlUp) Set hot = cold.End(xlUp) Set Plage = Range(cold.Address & ":" & hot.Address) If IsEmpty(cold.Offset(1, 0)) Then Plage.Select Dim Max As Double Max = Application.WorksheetFunction.Max(Plage) On Error Resume Next Selection.Find(Max).Select ActiveCell.Offset(0, 1).Value = "Elu" Loop
'Inscrit "Battu"
Range("D65536").End(xlUp).Offset(1, 0).Select For V = Range("D65536").End(xlUp).Row To 1 If Range("D" & V) = 0 Then Range("D" & V).Value = "Battu" End If Next
'Supprime les lignes blanches
dernière_ligne = ActiveCell.SpecialCells(xlLastCell).Row For Z = dernière_ligne To 1 Step -1 If Application.WorksheetFunction.CountA(Rows(Z)) = 0 Then Rows(Z).Delete Next Z
End Sub
Sylvain P.
Merci Billy Bob. ça pourrait donctionner si on avait toujours le même nombre de candidats par cantons. Or ce n'est pas le cas.
Merci Billy Bob.
ça pourrait donctionner si on avait toujours le même nombre de
candidats par cantons. Or ce n'est pas le cas.
Merci Billy Bob. ça pourrait donctionner si on avait toujours le même nombre de candidats par cantons. Or ce n'est pas le cas.
billy bob
Re;
Je ne comprend pas ta réserve : le résultat donné par cette formule ne prend pas en compte et n'est pas limité par le nombre de candidat dans chaque canton,
voir fichier exemple : http://www.cijoint.fr/cjlink.php?file=cj200803/cijMSLpodR.xls
Ou j'ai mal compris
Re;
Je ne comprend pas ta réserve : le résultat donné par cette formule ne
prend pas en compte et n'est pas limité par le nombre de candidat dans
chaque canton,
voir fichier exemple :
http://www.cijoint.fr/cjlink.php?file=cj200803/cijMSLpodR.xls
Je ne comprend pas ta réserve : le résultat donné par cette formule ne prend pas en compte et n'est pas limité par le nombre de candidat dans chaque canton,
voir fichier exemple : http://www.cijoint.fr/cjlink.php?file=cj200803/cijMSLpodR.xls
Ou j'ai mal compris
francois.forcet
On 18 mar, 18:54, "Sylvain P." wrote:
Merci Billy Bob. ça pourrait donctionner si on avait toujours le même nombre de candidats par cantons. Or ce n'est pas le cas.
Salut Sylvain
Je te propose ce code :
Columns("D:D").Clear Range("A2", "C" & Range("A65535").End(xlUp).Row).Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal i = 2 Score = Range("C" & i) Vainqueur = Range("D" & i).Address Do While Range("A" & i) <> "" If Range("B" & i) = Range("B" & i + 1) Then If Score > Range("C" & i + 1) Then Range("D" & i + 1) = "Battu" Else Range(Vainqueur) = "Battu" Score = Range("C" & i + 1) Vainqueur = Range("D" & i + 1).Address End If i = i + 1 Else If Score > Range("C" & i) Then Range("D" & i) = "Battu" Else Vainqueur = Range("D" & i).Address End If Range(Vainqueur) = "Elu" Score = Range("C" & i + 1) Vainqueur = Range("D" & i + 1).Address i = i + 1 End If Loop
Celà devrait faire Dis moi !!!!
On 18 mar, 18:54, "Sylvain P." <sylvainpelllet...@gmail.com> wrote:
Merci Billy Bob.
ça pourrait donctionner si on avait toujours le même nombre de
candidats par cantons. Or ce n'est pas le cas.
Salut Sylvain
Je te propose ce code :
Columns("D:D").Clear
Range("A2", "C" & Range("A65535").End(xlUp).Row).Sort
Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
i = 2
Score = Range("C" & i)
Vainqueur = Range("D" & i).Address
Do While Range("A" & i) <> ""
If Range("B" & i) = Range("B" & i + 1) Then
If Score > Range("C" & i + 1) Then
Range("D" & i + 1) = "Battu"
Else
Range(Vainqueur) = "Battu"
Score = Range("C" & i + 1)
Vainqueur = Range("D" & i + 1).Address
End If
i = i + 1
Else
If Score > Range("C" & i) Then
Range("D" & i) = "Battu"
Else
Vainqueur = Range("D" & i).Address
End If
Range(Vainqueur) = "Elu"
Score = Range("C" & i + 1)
Vainqueur = Range("D" & i + 1).Address
i = i + 1
End If
Loop