Fonction grande.valeur

Résolu
Bonjour,

J'aimerais savoir comment faire pour trouver la n-ième plus grande valeur sur une plage de cellule qui se trouve sur deux onglets différents, svp ?

J'ai essayé avec la fonction GRANDE.VALEUR mais dès que la plage de cellule concerne 2 onglets différents, la fonction ne fonctionne plus.

Merci par avance,

Cordialement,

Guillaume.

8 réponses

  1. 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.
    0
    1. Contributeur
      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
      0
      1. 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.
        0
        1. Bonsoir à tous,

          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
          0
          1. 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
            0
        2. 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.
          0
          1. 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)
            0
            1. 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
              0
          2. Bonjour à tous,

            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
            0
            1. Encore merci pour ce retour. La fonction fonctionne très bien.

              Je peux continuer sur l'avancement de mon fichier.

              Merci encore.

              Cordialement,

              Guillaume.
              0