Faire référence à une valeur max

Bonjour à tous,

J'ai une feuille Excel avec énormément de données. En pièce jointe, l'exemple simplifié pour deux articles.

J'ai des demandes de durées de vie différentes selon le pays (plusieurs clients avec différentes exigences).

Dans cet exemple, le résultat que je souhaiterai voir apparaitre dans la colonne I2 est 180 car 82% de mes ventes totales concernent cette durée de vie et c'est la plus grande quantité. Pour I5 j'aimerai voir apparaitre 130 car 57% est le plus grand pourcentage.

Comment faire ?

Merci d'avance pour votre aide,

Anouchka

20excel-pb-anouch.xlsx (238.70 Ko)

Bonjour,

A tester

en I2 :

=INDEX($C$2:$C$4;EQUIV(MAX($H$2:$H$4);$H$2:$H$4;0))

en i5

=INDEX($C$5:$C$9;EQUIV(MAX($H$5:$H$9);$H$5:$H$9;0))

Bonjour Fred35,

ça ne marche pas...

Le problème aussi c'est qu'il faudrait une formule qu'on puisse étendre parce que le nombre de durée de vie varie selon l'article et il faudrait qu'on ai qqch d'automatique parce que j'ai plus de 5000 lignes en tout.

Une macro peut-être ?

Merci de ton aide en tout cas,

Anouchka

Bonjour,

Concernant le tableau exemple proposé ça fonctionne chez moi.

Effectivement les plages sont verrouillées mais au final il vous faut une condition supplémentaire qui soit liée à l'article.

Je vais regardé, mais par formule je n'ai pas d'idée qui me vienne dans l'immédiat.

En effet, ça marche sur votre Excel. Super ! Mais oui il manque une condition liée à l'article sinon le travail va être long pour traiter tous les articles manuellement.

Merci pour votre aide. Si jamais vous avez une idée, je suis toute ouïe.

Anouchka

Bonsoir,

Par macro, voici une proposition

Code à mettre dans un module

Option Explicit

Sub TriValMax()
Dim i As Long, j As Long
Dim Plage1 As Range, Plage2 As Range
Dim Cel11 As String, Cel12 As String
Dim Cel21 As String, Cel22 As String

Application.ScreenUpdating = False

With Sheets("Sheet1")
    For i = 2 To Range("B" & Rows.Count).End(xlUp).Row + 1
        j = i + 1
        If .Cells(i, 1) = .Cells(i, 2) Then Cel11 = .Cells(i, 8).Address: Cel21 = .Cells(i, 8).Offset(, -5).Address
        If .Cells(i, 2) <> .Cells(j, 2) Then
            Cel12 = .Cells(i, 8).Address
            Cel22 = .Cells(i, 8).Offset(, -5).Address
            Set Plage1 = .Range(Cel11 & ":" & Cel12)
            Set Plage2 = .Range(Cel21 & ":" & Cel22)
            With .Range(Cel11).Offset(, 1)
                .Formula = "=INDEX(" & Plage2.Address & ",MATCH(MAX(" & Plage1.Address & ")," & Plage1.Address & ",0))"
                .Value = .Value
            End With
        End If
    Next i
End With

Application.ScreenUpdating = True

End Sub

Voir fichier joint pour test en cliquant sur le bouton GO

Bonjour

une solution pratique et bien plus simple = TCD

Bonjour,

Bien vu Steelson

J'ai tellement eu de problème avec les compatibilités de TCD entre les différentes versions XL que je zap de les utiliser.

Enfin bon, la macro m'a donné du fil à retordre, ça m'aura au moins occupé lol

Ma difficulté a été de retrouver comment n'afficher que la première valeur pour chaque référence ! ... c'est bien la première que je le faisais.

Ca m'énerve j'arrive pas à reproduire ton tableau....

Mettre en place en ligne : article et durées,

puis le max % en valeurs

tri décroissant là-dessus

TCD > affichage > disposition classique, parce que l'autre m' "énerve"

Clic droit sur le filtre durées > filtre s'appliquant aux valeurs, > les 10 premiers ... et tu mets 1

Merci

Y a plus qu'à ^^

Un grand merci à tous les 2. Je teste ça dès demain. Merci merci.

Merci, ça marche.

Mais je ne peux pas exploiter les résultats du fait de la mise en forme des résultats obtenus.

Comment as-tu fait pour mettre l'article dans une colomme, et la durée de vie dans une autre avec le TCD ? (cf le fichier excel avec ton tableau et en dessous celui que moi j'obtiens).

Merci pour ton aide,

Anouchka

Clic droit sur TCD > Options du tableau croisé dynamique > affichage

et cocher la case "disposition classique du ..."

Rechercher des sujets similaires à "reference valeur max"