Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

podium

3 réponses
Avatar
David
Salut,

un petit cas :

j'ai un tableau que j'ai trié par région et par % décroissant :

REGION data 2 % Articles data 5
PARIS 65465 87 54654 5654
PARIS 287 78 67543 5354343
PARIS 456546 67 233 65456
PARIS 7676 53 43256 34554
PARIS 67687 21 3256 543543
PARIS 765567 21 55 46565
PARIS 5656 12 254345 6565433
NORMANDIE 65465 87 54654 5654
NORMANDIE 456546 67 546546 65456
NORMANDIE 654654 65 123 455
NORMANDIE 654 45 43555 53454
NORMANDIE 7687 43 654654 6546
NORMANDIE 8765 33 54654 6556665
NORMANDIE 5464576 22 54654 65456
NORMANDIE 765567 21 55 46565
NANTES 287 78 101 5354343
NANTES 7676 53 43256 34554
NANTES 654 45 43555 53454
NANTES 8765 33 54654 6556665
NANTES 5464576 22 54654 65456
NANTES 67687 21 3256 543543
NANTES 765567 21 55 46565
NANTES 5656 12 254345 6565433

...
...
etc

Je voudrais créer un bouton qui me donne un podium (3 meilleurs de la
région) par région sur une autre feuille mais avec un critère (si articles >
300), dans cette exemple ce serait :

PARIS 65465 87 54654 5654
PARIS 287 78 67543 5354343
PARIS 65465 87 54654 5654


Alors je sais que l'on peut utiliser Grande.Valeur mais je ne sais pas
déterminer la plage qui peut être variable, de plus le critère ne serait pas
respecté, mais même si j'utilisée une simple recopie de ligne, je n'arrive
pas à faire en sorte qu'il ne prenne que 3 lignes de la région x si le
critère est respecté et ensuite passe à une autre région, une aide please.

3 réponses

Avatar
Boursicot
Bonjour,

une premiere macro pour definir le nom d'une plage variable:

la macro explore ta base de données à partir de d7 va jusqu'en bas se decale
de 5 à gauche et stocke le nom de ta base

Sub definition_base()
ActiveWorkbook.Names.Add Name:="base", RefersTo:=Range("d7",
Range("d7").End(xlDown).Offset(0, 5).Address)

End Sub

tu tries ensuite avec les clés que tu souhaites et en utilisant le nom
"base"

pour selectionner les 3 premiers de chaque région, tu balayes ta base sur le
critère région ,
A chaque changement de nom tu prends les 3 premiers (en verifiant que la
région n'a pas changée) que tu colles sur ta deuxième feuille.

j'ai fait un truc un peu équivalent, voilà le code tu peux t'en inspirer.

Sub reperage_etreport()
Application.ScreenUpdating = False

Sheets("Classement").Select
' remet à blanc le classement
Range("c7:i100").ClearContents
Sheets("resultats").Select



tri_base

i = 0
j = 0
Do While Cells(8 + i, 7).Value <> ""
If Cells(8 + i, 7) <> Cells(8 + i - 1, 7) And Cells(8 + i, 7) = Cells(8 + i
+ 1, 7) _
And Cells(8 + i, 7) = Cells(8 + i + 2, 7) Then

' colorie les 3 premiers du club en vert
' Cells(8 + i, 7).Resize(3, 1).Select
' With Selection.Interior
' .ColorIndex = 35
' .Pattern = xlSolid
' End With

'se place sur le premier et selectionne son club
'recopie le nom du club
Cells(8 + i, 7).Select
Selection.Copy


Sheets("Classement").Select




Cells(7 + j, 3).Select

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks: _
False, Transpose:úlse

Sheets("resultats").Select

'recopie les noms des 3 premiers


For k = 0 To 2
Cells(8 + i + k, 7).Offset(0, -2).Resize(, 2).Select
'copie sur jieme ligne 1er nom
Selection.Copy
Sheets("Classement").Select
Cells(7 + j, 4 + 2 * k).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks: _
False, Transpose:úlse
Sheets("resultats").Select
Next k
j = j + 1
End If
i = i + 1
Loop
Sheets("Classement").Select
'etablit le classement des clubs
definition_classement_clubs
clt_clubs
Cells(1, 1).Select
clt_individuel
Sheets("Classement").Select

Application.ScreenUpdating = False
End Sub






"David" a écrit dans le message de
news:%
Salut,

un petit cas :

j'ai un tableau que j'ai trié par région et par % décroissant :

REGION data 2 % Articles data 5
PARIS 65465 87 54654 5654
PARIS 287 78 67543 5354343
PARIS 456546 67 233 65456
PARIS 7676 53 43256 34554
PARIS 67687 21 3256 543543
PARIS 765567 21 55 46565
PARIS 5656 12 254345 6565433
NORMANDIE 65465 87 54654 5654
NORMANDIE 456546 67 546546 65456
NORMANDIE 654654 65 123 455
NORMANDIE 654 45 43555 53454
NORMANDIE 7687 43 654654 6546
NORMANDIE 8765 33 54654 6556665
NORMANDIE 5464576 22 54654 65456
NORMANDIE 765567 21 55 46565
NANTES 287 78 101 5354343
NANTES 7676 53 43256 34554
NANTES 654 45 43555 53454
NANTES 8765 33 54654 6556665
NANTES 5464576 22 54654 65456
NANTES 67687 21 3256 543543
NANTES 765567 21 55 46565
NANTES 5656 12 254345 6565433

...
...
etc

Je voudrais créer un bouton qui me donne un podium (3 meilleurs de la
région) par région sur une autre feuille mais avec un critère (si articles

300), dans cette exemple ce serait :

PARIS 65465 87 54654 5654
PARIS 287 78 67543 5354343
PARIS 65465 87 54654 5654


Alors je sais que l'on peut utiliser Grande.Valeur mais je ne sais pas
déterminer la plage qui peut être variable, de plus le critère ne serait
pas

respecté, mais même si j'utilisée une simple recopie de ligne, je n'arrive
pas à faire en sorte qu'il ne prenne que 3 lignes de la région x si le
critère est respecté et ensuite passe à une autre région, une aide please.






Avatar
David
Salut,

Merci pour ton aide, mais cela me paraît compliqué, je pensé à utiliser
l'outil de filtre, d'abord filtrer la colonne région, et ensuite filtré la
colonne % en utilisant Top 3 et ensuite copier le résultat sur une autre
feuille, mais le pb est plus difficile que prévu, car même si il m'affiche
les 3 meilleurs de la première région, il ne le fait pour les suivantes...
galère, galère...


"Boursicot" a écrit dans le message de
news:406f21e7$0$14173$
Bonjour,

une premiere macro pour definir le nom d'une plage variable:

la macro explore ta base de données à partir de d7 va jusqu'en bas se
decale

de 5 à gauche et stocke le nom de ta base

Sub definition_base()
ActiveWorkbook.Names.Add Name:="base", RefersTo:=Range("d7",
Range("d7").End(xlDown).Offset(0, 5).Address)

End Sub

tu tries ensuite avec les clés que tu souhaites et en utilisant le nom
"base"

pour selectionner les 3 premiers de chaque région, tu balayes ta base sur
le

critère région ,
A chaque changement de nom tu prends les 3 premiers (en verifiant que la
région n'a pas changée) que tu colles sur ta deuxième feuille.

j'ai fait un truc un peu équivalent, voilà le code tu peux t'en inspirer.

Sub reperage_etreport()
Application.ScreenUpdating = False

Sheets("Classement").Select
' remet à blanc le classement
Range("c7:i100").ClearContents
Sheets("resultats").Select



tri_base

i = 0
j = 0
Do While Cells(8 + i, 7).Value <> ""
If Cells(8 + i, 7) <> Cells(8 + i - 1, 7) And Cells(8 + i, 7) = Cells(8 +
i

+ 1, 7) _
And Cells(8 + i, 7) = Cells(8 + i + 2, 7) Then

' colorie les 3 premiers du club en vert
' Cells(8 + i, 7).Resize(3, 1).Select
' With Selection.Interior
' .ColorIndex = 35
' .Pattern = xlSolid
' End With

'se place sur le premier et selectionne son club
'recopie le nom du club
Cells(8 + i, 7).Select
Selection.Copy


Sheets("Classement").Select




Cells(7 + j, 3).Select

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks: > _

False, Transpose:úlse

Sheets("resultats").Select

'recopie les noms des 3 premiers


For k = 0 To 2
Cells(8 + i + k, 7).Offset(0, -2).Resize(, 2).Select
'copie sur jieme ligne 1er nom
Selection.Copy
Sheets("Classement").Select
Cells(7 + j, 4 + 2 * k).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks: > _

False, Transpose:úlse
Sheets("resultats").Select
Next k
j = j + 1
End If
i = i + 1
Loop
Sheets("Classement").Select
'etablit le classement des clubs
definition_classement_clubs
clt_clubs
Cells(1, 1).Select
clt_individuel
Sheets("Classement").Select

Application.ScreenUpdating = False
End Sub






"David" a écrit dans le message de
news:%
Salut,

un petit cas :

j'ai un tableau que j'ai trié par région et par % décroissant :

REGION data 2 % Articles data 5
PARIS 65465 87 54654 5654
PARIS 287 78 67543 5354343
PARIS 456546 67 233 65456
PARIS 7676 53 43256 34554
PARIS 67687 21 3256 543543
PARIS 765567 21 55 46565
PARIS 5656 12 254345 6565433
NORMANDIE 65465 87 54654 5654
NORMANDIE 456546 67 546546 65456
NORMANDIE 654654 65 123 455
NORMANDIE 654 45 43555 53454
NORMANDIE 7687 43 654654 6546
NORMANDIE 8765 33 54654 6556665
NORMANDIE 5464576 22 54654 65456
NORMANDIE 765567 21 55 46565
NANTES 287 78 101 5354343
NANTES 7676 53 43256 34554
NANTES 654 45 43555 53454
NANTES 8765 33 54654 6556665
NANTES 5464576 22 54654 65456
NANTES 67687 21 3256 543543
NANTES 765567 21 55 46565
NANTES 5656 12 254345 6565433

...
...
etc

Je voudrais créer un bouton qui me donne un podium (3 meilleurs de la
région) par région sur une autre feuille mais avec un critère (si
articles



300), dans cette exemple ce serait :

PARIS 65465 87 54654 5654
PARIS 287 78 67543 5354343
PARIS 65465 87 54654 5654


Alors je sais que l'on peut utiliser Grande.Valeur mais je ne sais pas
déterminer la plage qui peut être variable, de plus le critère ne serait
pas

respecté, mais même si j'utilisée une simple recopie de ligne, je
n'arrive


pas à faire en sorte qu'il ne prenne que 3 lignes de la région x si le
critère est respecté et ensuite passe à une autre région, une aide
please.












Avatar
FxM
Bonjour,

A tester et adapter :

Sub test()
'copier feuil1 vers feuil2
With Sheets("Feuil1")
.Range("A1:E" & .Range("A65536").End(xlUp).Row).Copy
End With
With Sheets("Feuil2")
.Select
.Range("A1").PasteSpecial xlValues

'garder les valeurs > 300
For a = .Range("A65536").End(xlUp).Row To 2 Step -1
If .Range("D" & a).Value <= 300 Then .Range("d" & a).EntireRow.Delete
Next a

'enlever la région des lignes si nb > 3
For lig = .Range("A65536").End(xlUp).Row To 2 Step -1
region = .Range("A" & lig).Value
nb = Application.WorksheetFunction.CountIf(.Range("A:A"),_
"=" & region)
If nb > 3 Then .Range("A" & lig).Value = ""
Next lig

'enlever les lignes qui ne contiennent plus de région
For lig = .Range("B65536").End(xlUp).Row To 2 Step -1
If .Range("A" & lig).Value = "" Then .Range("A" _
& lig).EntireRow.Delete
Next lig
End With

End Sub

@+
FxM


David wrote:
Salut,

un petit cas :

j'ai un tableau que j'ai trié par région et par % décroissant :

REGION data 2 % Articles data 5
PARIS 65465 87 54654 5654
PARIS 287 78 67543 5354343
PARIS 456546 67 233 65456
PARIS 7676 53 43256 34554
PARIS 67687 21 3256 543543
PARIS 765567 21 55 46565
PARIS 5656 12 254345 6565433
NORMANDIE 65465 87 54654 5654
NORMANDIE 456546 67 546546 65456
NORMANDIE 654654 65 123 455
NORMANDIE 654 45 43555 53454
NORMANDIE 7687 43 654654 6546
NORMANDIE 8765 33 54654 6556665
NORMANDIE 5464576 22 54654 65456
NORMANDIE 765567 21 55 46565
NANTES 287 78 101 5354343
NANTES 7676 53 43256 34554
NANTES 654 45 43555 53454
NANTES 8765 33 54654 6556665
NANTES 5464576 22 54654 65456
NANTES 67687 21 3256 543543
NANTES 765567 21 55 46565
NANTES 5656 12 254345 6565433

....
....
etc

Je voudrais créer un bouton qui me donne un podium (3 meilleurs de la
région) par région sur une autre feuille mais avec un critère (si articles >
300), dans cette exemple ce serait :

PARIS 65465 87 54654 5654
PARIS 287 78 67543 5354343
PARIS 65465 87 54654 5654


Alors je sais que l'on peut utiliser Grande.Valeur mais je ne sais pas
déterminer la plage qui peut être variable, de plus le critère ne serait pas
respecté, mais même si j'utilisée une simple recopie de ligne, je n'arrive
pas à faire en sorte qu'il ne prenne que 3 lignes de la région x si le
critère est respecté et ensuite passe à une autre région, une aide please.