Excel : rech valeur max dans colonne
Fermé
ann3soph
-
4 mars 2014 à 15:25
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 4 mars 2014 à 18:03
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 4 mars 2014 à 18:03
Bonjour,
je souhaiterais trouver la valeur max dans une colonne L sur toutes les lignes qui ont la même valeur dans la colonne B.
Quelqu'un peut-il m'aider à trouver une formule pour faire ça ?
d'avance merci !
je souhaiterais trouver la valeur max dans une colonne L sur toutes les lignes qui ont la même valeur dans la colonne B.
Quelqu'un peut-il m'aider à trouver une formule pour faire ça ?
d'avance merci !
A voir également:
- Excel : rech valeur max dans colonne
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
- Aller à la ligne excel - Guide
11 réponses
Mazzaropi
Messages postés
1985
Date d'inscription
lundi 16 août 2010
Statut
Contributeur
Dernière intervention
24 mai 2023
71
4 mars 2014 à 15:32
4 mars 2014 à 15:32
ann3soph, Bonjour.
Vous voulez connaître la valeur MAX de la colonne L ou voulez savoir le nombre de fois une valeur de la colonne L apparaît dans la colonne B?
S'il vous plaît, expliquer un peu mieux à vos besoins.
Vous voulez connaître la valeur MAX de la colonne L ou voulez savoir le nombre de fois une valeur de la colonne L apparaît dans la colonne B?
S'il vous plaît, expliquer un peu mieux à vos besoins.
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 741
4 mars 2014 à 15:35
4 mars 2014 à 15:35
Re bonjour ;)
Utilises la fonction sous-total avec le n° de fonction 4 pour MAX
Ensuite tu appliques un filtre sur ta colonne B que sur les valeurs qui t'intéressent
tu auras le max que des valeurs filtrées
Cdlmnt
Utilises la fonction sous-total avec le n° de fonction 4 pour MAX
Ensuite tu appliques un filtre sur ta colonne B que sur les valeurs qui t'intéressent
tu auras le max que des valeurs filtrées
Cdlmnt
Re-bonjour ;) (oui je me fais une journée casse tête excel)
le problème c'est que j'ai 40 000 lignes (littéralement) et que donc je ne peux pas filtrer 1 par 1 les 4 000 valeurs qui sont prises dans ma colonne B... Il me faudrait une fonction que je puisse extendre sans qu'elle ne nécessite de filtre... :/ C'est possible ?
le problème c'est que j'ai 40 000 lignes (littéralement) et que donc je ne peux pas filtrer 1 par 1 les 4 000 valeurs qui sont prises dans ma colonne B... Il me faudrait une fonction que je puisse extendre sans qu'elle ne nécessite de filtre... :/ C'est possible ?
Mike-31
Messages postés
18357
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
6 février 2025
5 113
4 mars 2014 à 15:37
4 mars 2014 à 15:37
Bonjour,
veux tu la valeur max de la colonne L par rapport a une valeur connue de la colonne B ou souhaites avoir la valeur max par groupe de valeur colonne B
veux tu la valeur max de la colonne L par rapport a une valeur connue de la colonne B ou souhaites avoir la valeur max par groupe de valeur colonne B
Bonjour,
je veux la valeur max de la colonne L mais pas de la colonne L tout entière, de la colonne L concernant les lignes pour lesquelles toutes les valeurs dans B sont égales.
Je m'explique :
si de B2 à B 23 toutes mes cases avaient pour valeur 10, je voudrais la valeur max en L entre L2 et L23.
Et que cette formule puisse se répéter de manière à ce que je puisse ensuite avoir le max en L entre les lignes 24 et 56; si toutes les valeurs de B entre 24 et 56 sont les mêmes.
Est-ce clair ? :)
D'avance merci beaucoup !
je veux la valeur max de la colonne L mais pas de la colonne L tout entière, de la colonne L concernant les lignes pour lesquelles toutes les valeurs dans B sont égales.
Je m'explique :
si de B2 à B 23 toutes mes cases avaient pour valeur 10, je voudrais la valeur max en L entre L2 et L23.
Et que cette formule puisse se répéter de manière à ce que je puisse ensuite avoir le max en L entre les lignes 24 et 56; si toutes les valeurs de B entre 24 et 56 sont les mêmes.
Est-ce clair ? :)
D'avance merci beaucoup !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
Modifié par ccm81 le 4/03/2014 à 15:51
Modifié par ccm81 le 4/03/2014 à 15:51
Bonjour
Essaies ceci
https://www.cjoint.com/?3CepT5KlPjs
Cdlmnt
Essaies ceci
https://www.cjoint.com/?3CepT5KlPjs
Cdlmnt
Raymond PENTIER
Messages postés
58855
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
17 février 2025
17 284
4 mars 2014 à 15:47
4 mars 2014 à 15:47
Non ; ce n'est toujours pas très clair ...
Les lignes ayant la même valeur sont-elles regroupées ou dispersées ?
Et à quel endroit tes résultats doivent-ils apparaître ?
Envoie donc ton fichier ; on travaillera directement dessus.
Pour cela, utilise https://www.cjoint.com/ et reviens ici coller le lien obtenu.
Les lignes ayant la même valeur sont-elles regroupées ou dispersées ?
Et à quel endroit tes résultats doivent-ils apparaître ?
Envoie donc ton fichier ; on travaillera directement dessus.
Pour cela, utilise https://www.cjoint.com/ et reviens ici coller le lien obtenu.
Raymond PENTIER
Messages postés
58855
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
17 février 2025
17 284
4 mars 2014 à 15:57
4 mars 2014 à 15:57
ccm81 t'a fourni la bonne solution.
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
4 mars 2014 à 15:57
4 mars 2014 à 15:57
as tu jeté un oeil à ma proposition (post #5) et à celle de Vaucluse (post #10) (salut à toi et à tous par la même occasion)
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 424
4 mars 2014 à 15:58
4 mars 2014 à 15:58
Et que donne ma proposition ci dessous
a+
a+
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 424
4 mars 2014 à 15:51
4 mars 2014 à 15:51
Re
essayez cette formule dans la, colonne résultat, toujours depuis ligne 1
=MAX(SI(B:B=B1;L:L))
Attention
cette formule est matricielle, entrez là avec la touche enter en maintenant ctrl et shift enfoncées.
Elle doit s'afficher entre accolades dans la barre de formule
crdlmnt
essayez cette formule dans la, colonne résultat, toujours depuis ligne 1
=MAX(SI(B:B=B1;L:L))
Attention
cette formule est matricielle, entrez là avec la touche enter en maintenant ctrl et shift enfoncées.
Elle doit s'afficher entre accolades dans la barre de formule
crdlmnt
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 424
4 mars 2014 à 16:13
4 mars 2014 à 16:13
Exact, si vous avez beaucoup de données, les formules matricielles alourdissent sérieusement.(les codes SOMMEPROD aussi)
Mais il n'y a guère moyen de faire autrement vu ce que vous demandez, n'y aurait il pas moyen d'éditer une liste des valeurs de B dans un autre champ, sans doublon, pour réduire le nombre de formules définissant les maxi.?
A+
Mais il n'y a guère moyen de faire autrement vu ce que vous demandez, n'y aurait il pas moyen d'éditer une liste des valeurs de B dans un autre champ, sans doublon, pour réduire le nombre de formules définissant les maxi.?
A+
Bertog
Messages postés
2
Date d'inscription
mardi 4 mars 2014
Statut
Membre
Dernière intervention
4 mars 2014
4 mars 2014 à 16:16
4 mars 2014 à 16:16
Bonjour
Excuses moi mais c'est juste pour être sur de comprendre. Tu veux identifier dans la colonne B toutes les valeurs qui sont égales au max des valeurs de la colonne L, c'est bien ça ?
Personnellement, je créerais une nouvelle colonne à coté de B, donc une colonne C ou je mettrais la formule en première cellule et si c'est la ligne 1, =SI(B1=max(L:L);1;0) puis tu copie dans toutes les lignes de la colonne C. En filtrant les 1 ensuite, tu as toutes les lignes que tu cherches
Excuses moi mais c'est juste pour être sur de comprendre. Tu veux identifier dans la colonne B toutes les valeurs qui sont égales au max des valeurs de la colonne L, c'est bien ça ?
Personnellement, je créerais une nouvelle colonne à coté de B, donc une colonne C ou je mettrais la formule en première cellule et si c'est la ligne 1, =SI(B1=max(L:L);1;0) puis tu copie dans toutes les lignes de la colonne C. En filtrant les 1 ensuite, tu as toutes les lignes que tu cherches
Bertog
Messages postés
2
Date d'inscription
mardi 4 mars 2014
Statut
Membre
Dernière intervention
4 mars 2014
4 mars 2014 à 17:17
4 mars 2014 à 17:17
Désolé, mon navigateur indiquait 0 réponse quand j'ai vu la question, et ce n'est pas le cas !!
En plus de toutes les propositions déjà évoquées, tu peux faire via un tableau croisé dynamique. Mais il faut ramener les 2 colonnes cote à cote si possible puis les identifier pour faire le tableau
Dans le TCD tu mets la colonne B à gauche en première position et la colonne L collée juste à coté (pas dans le champs titres (ligne du haut) ou résultats (zone centrale)..
Les valeurs de L s'afficheront pour chaque valeur de B et tu peux ensuite faire clique droit dans la colonne L du TCD, sélectionner "Paramètres de champs", puis "avancé" et cocher "Décroissant"
En plus de toutes les propositions déjà évoquées, tu peux faire via un tableau croisé dynamique. Mais il faut ramener les 2 colonnes cote à cote si possible puis les identifier pour faire le tableau
Dans le TCD tu mets la colonne B à gauche en première position et la colonne L collée juste à coté (pas dans le champs titres (ligne du haut) ou résultats (zone centrale)..
Les valeurs de L s'afficheront pour chaque valeur de B et tu peux ensuite faire clique droit dans la colonne L du TCD, sélectionner "Paramètres de champs", puis "avancé" et cocher "Décroissant"
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
4 mars 2014 à 16:50
4 mars 2014 à 16:50
Comme dit notre ami Vaucluse, les formules matricielles sont longues à s'exécuter sur de gros fichiers
Une autre proposition via une macro qui devrait aller plus vite
https://www.cjoint.com/?3CeqVY2YIFk
Cdlmnt
Une autre proposition via une macro qui devrait aller plus vite
https://www.cjoint.com/?3CeqVY2YIFk
Cdlmnt
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
4 mars 2014 à 16:59
4 mars 2014 à 16:59
Un inconvénient toutefois
Si les valeurs changent en colonnes B et L, il faudra re-valider la formule
On peut soigner ça, mais l'inconvénient sera que la macro sera exécutée à chaque changement dans la feuille, et du coup, ça risque d'alourdir
https://www.cjoint.com/?3Ceq4qNYx0Y
à toi de voir (il n'y a qu'une ligne qui diffère)
Si les valeurs changent en colonnes B et L, il faudra re-valider la formule
On peut soigner ça, mais l'inconvénient sera que la macro sera exécutée à chaque changement dans la feuille, et du coup, ça risque d'alourdir
https://www.cjoint.com/?3Ceq4qNYx0Y
à toi de voir (il n'y a qu'une ligne qui diffère)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
4 mars 2014 à 18:03
4 mars 2014 à 18:03
Bonjour,
En reprenant la maquette de CCM81 qu>e je salue , un autre macro itilisant l'objet dictionary
La maquette de CCM81 avec mes élucubrations
https://www.cjoint.com/?3CesdHEUUn8
En reprenant la maquette de CCM81 qu>e je salue , un autre macro itilisant l'objet dictionary
Sub par_dico()
Dim Derlig As Long, T_colB(), T_colL()
Dim Dico As Object, Cptr As Long, Cle As Long, MaxL As Long
Dim T_max(), T_cle()
Dim start As Single
start = Timer
Application.ScreenUpdating = False
Derlig = Columns("B").Find("*", , , , , xlPrevious).Row
T_colB = Application.Transpose(Range("B2:B" & Derlig).Value)
T_colL = Application.Transpose(Range("L2:L" & Derlig).Value)
Set Dico = CreateObject("scripting.dictionary")
For Cptr = 1 To UBound(T_colB)
Cle = T_colB(Cptr)
MaxL = T_colL(Cptr)
If Not Dico.exists(Cle) Then
Dico.Add Cle, MaxL
Else
If T_colL(Cptr) > Dico.Item(Cle) Then Dico.Item(Cle) = T_colL(Cptr)
End If
Next
T_cle = Dico.keys
T_max = Dico.items
Cells(10, "N").Resize(Dico.Count, 1) = Application.Transpose(T_cle)
Cells(10, "O").Resize(Dico.Count, 1) = Application.Transpose(T_max)
Application.ScreenUpdating = True
MsgBox "durée: " & Timer - start & " .seC;"
End Sub
La maquette de CCM81 avec mes élucubrations
https://www.cjoint.com/?3CesdHEUUn8