XL 2016 top 5 selon une plage de date

ta grand mere

XLDnaute Nouveau
Bonjour à tous,

je ne suis pas expert en Excel et aujourd'hui je m'en remets à vous en espérant trouver enfin une solution qui j'en suis sur sera simple. j'ai une table de données ou j'y inscrit le nombre d'erreur pas opérateur. le problème est que c'est données peuvent variée selon la date et le nombre d'opérateur.

sur ma feuille de stockage en colonne A j'ai des dates (je peux avoir 5 lignes avec la même date et cela varie en fonction du nombre d'opérateur). en colonne B j'ai le nom de mes opérateurs et en colonne F le nombre d'erreur. je souhaiterai sur l'onglet top 5 avoir les 5 opérateurs qui auront fait le plus d'erreur pour une date sélectionné en D2 en rapport avec ma plage de date qui ce trouvent dans l'onglet stockage.

j'ai déjà essayé (nb si ens avec index equiv) grande valeur et je pense que la solution est la mais je n'arrive pas à les associés correctement.

pour moi c'est hyper simple alors j'espère avoir été clair dans mes explications. je vous transmet le fichier en PJ.


merci aux âmes charitables qui seront me sortir de ce bourbier :)
 

Pièces jointes

  • test top 5.xlsm
    316.2 KB · Affichages: 12

chris

XLDnaute Barbatruc
Bonjour

Une proposition avec des tableaux structurés et des TCD

J'ai aussi
  • repris tes listes de références Opérateurs, Problèmes, Services et adapter les liste déroulantes
  • corriger tes MFC : certaines faisaient double emploi et la portée doit être celle du tableau (cela s'ajuste automatiquement quant on ajoute des lignes)
Attention à la colonne H de Stockage : des formules multilingues non uniformes est déconseillé. Il te faut une identification du volume par une autre solution qu'une sélection manuelle.
 

Pièces jointes

  • top 5_TCD.xlsx
    32.4 KB · Affichages: 7

chris

XLDnaute Barbatruc
RE

La présentation du TCD peut être ajustée

1640080572725.png


Un tableau annexe au look voulu à base de LIREDONNEESTABCROISDYNAMIQUE peut aussi être utilisé.

Mais si le cosmétique justifie une usine à gaz et l'abandon total des bonne pratiques : pas de MFC ni validations sur des colonnes entières entre autres, qui plus est avec comme source des colonnes entières également, je passe la main.
 

ta grand mere

XLDnaute Nouveau
Bonjour à tous,
Bonjour chris,

Un essai avec des plages nommées pour ne pas travailler sur des colonnes sans données.
Basé sur les dates.

JHA
Super c'est exactement ce que je souhaitais. comme je l'ai expliqué je ne connais pas les standards sur excel donc si je comprend bien je ne doit pas inclure des cases vides ?

pour tous le reste merci à vous deux d'avoir pris du temps et je suis sincère cela parais anodin peut être pour certains, mais j'apprécie sincèrement le geste. je vous souhaite de bonnes fêtes de fin d'année et je ne vous dis pas adieu mais à bientôt :) encore merci !
 

job75

XLDnaute Barbatruc
Bonjour le forum,

J'ai mis un peu d'ordre dans ce fichier (2) :

- les formules de la feuille TOP5 ont été revues, la concaténation avec les dates n'était pas nécessaire

- la MFC des colonnes G et H en 1ère feuille a été revue

- la liaison intempestive a été supprimée.

A+
 

Pièces jointes

  • test top 5 (2).xlsm
    173.4 KB · Affichages: 1

job75

XLDnaute Barbatruc
Vous vous êtes peut-être demandé pourquoi la modification de la date en D2 prenait autant de temps.

Ce n'était pas dû aux formules, en fait la feuille était corrompue.

Dans ce fichier (3) j'ai entièrement refait la feuille TOP5, la modification de D2 est immédiate.
 

Pièces jointes

  • test top 5 (3).xlsm
    170.5 KB · Affichages: 2
Dernière édition:

job75

XLDnaute Barbatruc
Pour terminer voici une solution VBA avec ce code dans la feuille TOP5 :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dat As Range, resu(), n&, i&
Set dat = [D2]
ReDim resu(1 To 5, 1 To 2)
With Sheets("STOCKAGE").[A1].CurrentRegion.Resize(, 6)
    .Sort .Columns(1), xlAscending, .Columns(6), , xlDescending, Header:=xlYes 'tri sur les colonnes A et F
    n = Application.CountIf(.Columns(1), dat)
    If n Then
        i = Application.Match(dat.Value2, .Columns(1), 0)
        With .Rows(i).Resize(n)
            For i = 1 To IIf(n > 5, 5, n)
                resu(i, 1) = .Cells(i, 2)
                resu(i, 2) = .Cells(i, 6)
            Next
        End With
    End If
End With
'---restitution---
Application.EnableEvents = False 'désactive les évènements
[B11:C15] = resu
Application.EnableEvents = True 'réactive les évènements
End Sub
Lez tableau est mis à jour quand on modifie une cellule quelconque ou qu'on active la feuille.

Notez que j'ai reconstruit la feuille STOCKAGE qui elle aussi était corrompue : le tri prenait trop de temps.
 

Pièces jointes

  • Top 5 VBA(1).xlsm
    157.1 KB · Affichages: 2

ta grand mere

XLDnaute Nouveau
Pour terminer voici une solution VBA avec ce code dans la feuille TOP5 :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dat As Range, resu(), n&, i&
Set dat = [D2]
ReDim resu(1 To 5, 1 To 2)
With Sheets("STOCKAGE").[A1].CurrentRegion.Resize(, 6)
    .Sort .Columns(1), xlAscending, .Columns(6), , xlDescending, Header:=xlYes 'tri sur les colonnes A et F
    n = Application.CountIf(.Columns(1), dat)
    If n Then
        i = Application.Match(dat.Value2, .Columns(1), 0)
        With .Rows(i).Resize(n)
            For i = 1 To IIf(n > 5, 5, n)
                resu(i, 1) = .Cells(i, 2)
                resu(i, 2) = .Cells(i, 6)
            Next
        End With
    End If
End With
'---restitution---
Application.EnableEvents = False 'désactive les évènements
[B11:C15] = resu
Application.EnableEvents = True 'réactive les évènements
End Sub
Lez tableau est mis à jour quand on modifie une cellule quelconque ou qu'on active la feuille.

Notez que j'ai reconstruit la feuille STOCKAGE qui elle aussi était corrompue : le tri prenait trop de temps.
rien a voir avec mon premier fichier. j'ai encore beaucoup à apprendre. merci beaucoup à tous pour votre aide.
 

ta grand mere

XLDnaute Nouveau
Pour terminer voici une solution VBA avec ce code dans la feuille TOP5 :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dat As Range, resu(), n&, i&
Set dat = [D2]
ReDim resu(1 To 5, 1 To 2)
With Sheets("STOCKAGE").[A1].CurrentRegion.Resize(, 6)
    .Sort .Columns(1), xlAscending, .Columns(6), , xlDescending, Header:=xlYes 'tri sur les colonnes A et F
    n = Application.CountIf(.Columns(1), dat)
    If n Then
        i = Application.Match(dat.Value2, .Columns(1), 0)
        With .Rows(i).Resize(n)
            For i = 1 To IIf(n > 5, 5, n)
                resu(i, 1) = .Cells(i, 2)
                resu(i, 2) = .Cells(i, 6)
            Next
        End With
    End If
End With
'---restitution---
Application.EnableEvents = False 'désactive les évènements
[B11:C15] = resu
Application.EnableEvents = True 'réactive les évènements
End Sub
Lez tableau est mis à jour quand on modifie une cellule quelconque ou qu'on active la feuille.

Notez que j'ai reconstruit la feuille STOCKAGE qui elle aussi était corrompue : le tri prenait trop de temps.
Pour terminer voici une solution VBA avec ce code dans la feuille TOP5 :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dat As Range, resu(), n&, i&
Set dat = [D2]
ReDim resu(1 To 5, 1 To 2)
With Sheets("STOCKAGE").[A1].CurrentRegion.Resize(, 6)
    .Sort .Columns(1), xlAscending, .Columns(6), , xlDescending, Header:=xlYes 'tri sur les colonnes A et F
    n = Application.CountIf(.Columns(1), dat)
    If n Then
        i = Application.Match(dat.Value2, .Columns(1), 0)
        With .Rows(i).Resize(n)
            For i = 1 To IIf(n > 5, 5, n)
                resu(i, 1) = .Cells(i, 2)
                resu(i, 2) = .Cells(i, 6)
            Next
        End With
    End If
End With
'---restitution---
Application.EnableEvents = False 'désactive les évènements
[B11:C15] = resu
Application.EnableEvents = True 'réactive les évènements
End Sub
Lez tableau est mis à jour quand on modifie une cellule quelconque ou qu'on active la feuille.

Notez que j'ai reconstruit la feuille STOCKAGE qui elle aussi était corrompue : le tri prenait trop de temps.
job 75 que voulez-vous dire par corrompue ?
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 150
Membres
112 670
dernier inscrit
Flow87