Fonction grande.valeur
Résolu/Fermé
giiggz
Messages postés
49
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
11 août 2015
-
28 déc. 2014 à 00:08
giiggz Messages postés 49 Date d'inscription vendredi 17 janvier 2014 Statut Membre Dernière intervention 11 août 2015 - 7 janv. 2015 à 16:42
giiggz Messages postés 49 Date d'inscription vendredi 17 janvier 2014 Statut Membre Dernière intervention 11 août 2015 - 7 janv. 2015 à 16:42
A voir également:
- Fonction grande.valeur
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Fonction remplacer word - Guide
- Fonction ms dos non valide - Forum Windows 8 / 8.1
8 réponses
Hillian Fellers
Messages postés
79
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
24 mai 2022
12
28 déc. 2014 à 01:49
28 déc. 2014 à 01:49
Bonsoir,
Je viens d'essayer, j'arrive à avoir sur l'onglet "Feuil1" la Nième plus grande valeur d'un tableau se trouvant sur un autre onglet (ici "Plan Comptable").
La formule qui s'affiche à l'endroit où je veux le résultat est:
=GRANDE.VALEUR('Plan Comptable'!L44:L56;4)
(les apostrophes qui entourent le nom de l'onglet source, ici Plan Comptable, ne sont nécessaires que si le nom de l'onglet contient des espaces).
Ou alors, la question est: la plage de cellules sur laquelle porte la recherche est répartie sur plusieurs onglets différents. Mais dans ce cas, je ne sais pas définir une telle plage.
Je viens d'essayer, j'arrive à avoir sur l'onglet "Feuil1" la Nième plus grande valeur d'un tableau se trouvant sur un autre onglet (ici "Plan Comptable").
La formule qui s'affiche à l'endroit où je veux le résultat est:
=GRANDE.VALEUR('Plan Comptable'!L44:L56;4)
(les apostrophes qui entourent le nom de l'onglet source, ici Plan Comptable, ne sont nécessaires que si le nom de l'onglet contient des espaces).
Ou alors, la question est: la plage de cellules sur laquelle porte la recherche est répartie sur plusieurs onglets différents. Mais dans ce cas, je ne sais pas définir une telle plage.
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 419
28 déc. 2014 à 08:12
28 déc. 2014 à 08:12
Bonjour
le plus simple serait de renvoyer toutes vos valeurs cote à cote en colonne dans une feuille masquée et d'utiliser cette plage
crdlmnt
le plus simple serait de renvoyer toutes vos valeurs cote à cote en colonne dans une feuille masquée et d'utiliser cette plage
crdlmnt
giiggz
Messages postés
49
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
11 août 2015
Modifié par giiggz le 28/12/2014 à 11:13
Modifié par giiggz le 28/12/2014 à 11:13
Bonjour,
Effectivement, Hillian Fellers, la fonction que je recherche correspond bien à la question : "la plage de cellules sur laquelle porte la recherche est répartie sur plusieurs onglets différents.".
Merci Vaucluse pour cette solution. Si je n'ai pas de meilleure réponse, je me verrai obligé d'utiliser cette solution.
Bien cordialement,
Guillaume.
Effectivement, Hillian Fellers, la fonction que je recherche correspond bien à la question : "la plage de cellules sur laquelle porte la recherche est répartie sur plusieurs onglets différents.".
Merci Vaucluse pour cette solution. Si je n'ai pas de meilleure réponse, je me verrai obligé d'utiliser cette solution.
Bien cordialement,
Guillaume.
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
28 déc. 2014 à 18:24
28 déc. 2014 à 18:24
Bonsoir à tous,
Quand on n'a pas la fonction kivabien, il faut la construire soi même.
Un exemple d'appel :
Ici, on recherche la 10ème plus grande valeur de 3 zones réparties sur 3 onglets.
On met autant de zones qu'on le souhaite, séparées pas des virgules chez moi mais sans doute par des points-virgules chez les gens normaux.
Voici la macro :
cordialement
Quand on n'a pas la fonction kivabien, il faut la construire soi même.
Un exemple d'appel :
=GRANDE_VALEUR(10,A6:A9,Feuil2!C12:C15,Feuil3!F6:F9)
Ici, on recherche la 10ème plus grande valeur de 3 zones réparties sur 3 onglets.
On met autant de zones qu'on le souhaite, séparées pas des virgules chez moi mais sans doute par des points-virgules chez les gens normaux.
Voici la macro :
Function GRANDE_VALEUR(k As Integer, ParamArray args() As Variant)
Dim tablo()
n = 0
For Each vArea In args
n = n + vArea.Cells.Count
Next
ReDim tablo(n)
Dim i As Integer
i = 0
For Each vArea In args
For Each zone In vArea
For Each vcell In zone
tablo(i) = vcell.Value
i = i + 1
Next
Next
Next
Call TriDécroissant(tablo(), 0, n - 1)
GRANDE_VALEUR = tablo(k - 1)
End Function
Sub TriDécroissant(a(), gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: D = droi
Do
Do While a(g) > ref: g = g + 1: Loop
Do While ref > a(D): D = D - 1: Loop
If g <= D Then
temp = a(g): a(g) = a(D): a(D) = temp
g = g + 1: D = D - 1
End If
Loop While g <= D
If g < droi Then Call TriDécroissant(a, g, droi)
If gauc < D Then Call TriDécroissant(a, gauc, D)
End Sub
cordialement
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
29 déc. 2014 à 18:26
29 déc. 2014 à 18:26
on peut simplifier cette fonction en remplaçant les 2 dernières lignes avant "End Function" par un simple
GRANDE_VALEUR = WorksheetFunction.Large(tablo, k)et en supprimant le Sub TriDécr..... End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
giiggz
Messages postés
49
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
11 août 2015
7 janv. 2015 à 11:27
7 janv. 2015 à 11:27
Bonjour JvDo,
Merci pour ce super retour.
Cependant, avec la fonction grande.valeur, je pouvais faire la somme des 5 plus grandes valeurs avec la fonction suivante :
SOMME(GRANDE.VALEUR(C10:AP10);LIGNE(INDIRECT("1:"&5)))
Avec la fonction transmise, je n'arrive plus à rajouter la partie LIGNE(...).
Merci encore.
Cordialement,
Guillaume.
Merci pour ce super retour.
Cependant, avec la fonction grande.valeur, je pouvais faire la somme des 5 plus grandes valeurs avec la fonction suivante :
SOMME(GRANDE.VALEUR(C10:AP10);LIGNE(INDIRECT("1:"&5)))
Avec la fonction transmise, je n'arrive plus à rajouter la partie LIGNE(...).
Merci encore.
Cordialement,
Guillaume.
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
7 janv. 2015 à 11:45
7 janv. 2015 à 11:45
Bonjour le fil,
Pour rester dans les formules, nomme la plage de données exemple titi et utilise la formule grande valeur sur la feuille de ton choix, exemple pour la troisième valeur
=GRANDE.VALEUR(titi;3)
Pour rester dans les formules, nomme la plage de données exemple titi et utilise la formule grande valeur sur la feuille de ton choix, exemple pour la troisième valeur
=GRANDE.VALEUR(titi;3)
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
7 janv. 2015 à 14:43
7 janv. 2015 à 14:43
Bonjour Mike-31
comment fais-tu pour nommer un ensemble de plages "décousues" résidant sur des onglets différents et à des adresses différentes (bref, ça n'est pas une référence 3D)?
perso, je n'y arrive pas sans macro ou sans Morefunc.
cdlt
comment fais-tu pour nommer un ensemble de plages "décousues" résidant sur des onglets différents et à des adresses différentes (bref, ça n'est pas une référence 3D)?
perso, je n'y arrive pas sans macro ou sans Morefunc.
cdlt
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
7 janv. 2015 à 14:40
7 janv. 2015 à 14:40
Bonjour à tous,
essaye ceci :
J'ai mis petite_valeur pour le même prix.
cordialement
essaye ceci :
Function GRANDE_VALEUR(vk, ParamArray args() As Variant)
Dim tablo()
n = 0
For Each vArea In args
n = n + vArea.Cells.Count
Next
ReDim tablo(n)
Dim i As Integer
i = 0
For Each vArea In args
For Each zone In vArea
For Each vcell In zone
tablo(i) = vcell.Value
i = i + 1
Next
Next
Next
If IsArray(vk) Then
For k = LBound(vk) To UBound(vk)
GRANDE_VALEUR = GRANDE_VALEUR + WorksheetFunction.Large(tablo, vk(k, 1))
Next
Else
GRANDE_VALEUR = WorksheetFunction.Large(tablo, vk)
End If
End Function
***********************************************************
Function PETITE_VALEUR(vk, ParamArray args() As Variant)
Dim tablo()
n = 0
For Each vArea In args
n = n + vArea.Cells.Count
Next
ReDim tablo(n)
Dim i As Integer
i = 0
For Each vArea In args
For Each zone In vArea
For Each vcell In zone
tablo(i) = vcell.Value
i = i + 1
Next
Next
Next
If IsArray(vk) Then
For k = LBound(vk) To UBound(vk)
PETITE_VALEUR = PETITE_VALEUR + WorksheetFunction.Small(tablo, vk(k, 1))
Next
Else
PETITE_VALEUR = WorksheetFunction.Small(tablo, vk)
End If
End Function
J'ai mis petite_valeur pour le même prix.
cordialement
giiggz
Messages postés
49
Date d'inscription
vendredi 17 janvier 2014
Statut
Membre
Dernière intervention
11 août 2015
7 janv. 2015 à 16:42
7 janv. 2015 à 16:42
Encore merci pour ce retour. La fonction fonctionne très bien.
Je peux continuer sur l'avancement de mon fichier.
Merci encore.
Cordialement,
Guillaume.
Je peux continuer sur l'avancement de mon fichier.
Merci encore.
Cordialement,
Guillaume.