Message box qui affiche par odee decroisant

Bonjour à tous !j'espere que tout le monde va bien! J'ai une petite question:
J'ai quatre feuilles qui affiche chacune une valeur provenant d'une somme a la fin d'une colonne, j'aimerais quand on est à la fin de la quatrième feuille faire une message box qui m'affiche les valeurs par ordre décroissant !
Merci de votre aide par avance ;)

3 réponses

  1. Bonsoir les animaux, bonsoir le forum,

    Une autre proposition à adapter car malgré mes conseils, Lepapillon, tu manques toujours de clarté. Le code proposé considère que la somme se trouve dans la colonne A de chaque onglet (vu que tu expliques très mal ce point là) et que les 4 onglets sont les 4 premiers...
    Dans ton premier post tu parle d'ordre décroissant puis dans la réponse 2 tu parles d'ordre croissant. Je crois que c'est surtout en désordre dans ta tête...
    Le code utilise la fonction Large pour l'ordre décroissant. Il te suffit de remplacer Large par Small pour passer à l'ordre croissant. Tu verras, il y a une ligne commentée.

    Le code doit être placé dans l'onglet Feuil4 [Feuil4(Feuil4)]. Il se déclenchera chaque fois que tu activeras cet onglet...

    Private Sub Worksheet_Activate()
    Dim I As Byte 'déclare la variable I (Incrément)
    Dim TS(1 To 4) 'déclare le tableau de variables TS (Tableau des Sommes)
    Dim RNG(1 To 2, 1 To 4) 'déclare le tableau des variables RNG (RaNG)
    
    For I = 1 To 4 'boucle 1 : de 1 à 4
        'récupère la somme des 4 premiers onglets dans la dernière cellule éditée de la colonne A de chacun
        TS(I) = Sheets(I).Cells(Application.Rows.Count, 1).End(xlUp).Value
    Next I 'prochaine valeur de la boucle 1
    For I = 1 To 4 'boucle 1 : de 1 à 4
        'renvoie dans la première colonne du tableau RNG la Ième plus grande valeur du tableau TS
        RNG(1, I) = Application.WorksheetFunction.Large(TS, I) 'ordre décroisant
        'RNG(1, I) = Application.WorksheetFunction.Small(TS, I) 'ordre croisant
        For J = 1 To 4 'boucle 2 : de 1 à 4
            'récupère dans la colonne 2 du tabelau RBG le nom de l'onglet contenant cette Ième plus grande valeur
            If RNG(1, I) = TS(J) Then RNG(2, I) = "Feuil" & J: Exit For
        Next J 'prochaine valeur de la boucle 2
    Next I 'prochaine valeur de la boucle 1
    'message renvoyant les sommes et leur emplacement dans l'ordre décroissant
    MsgBox RNG(1, 1) & " / " & RNG(2, 1) & Chr(13) _
        & RNG(1, 2) & " / " & RNG(2, 2) & Chr(13) _
        & RNG(1, 3) & " / " & RNG(2, 3) & Chr(13) _
        & RNG(1, 4) & " / " & RNG(2, 4)
    End Sub


    1. Contributeur
      Bonjour,

      Voici une macro à adapter les cellules contenant les sommes.

      'http://silkyroad.developpez.com/vba/tableaux/#LXIV-D
      Sub Tri_Tableau()
          Dim Valeur As Integer
          Dim i As Integer
          Dim Cible As Variant
          Dim Tableau() As Single
          Dim NomTableau(3) As String
          'Alimente les éléments du tableau
          NomTableau(0) = Sheets(1).Range("A1").Value 'a adapter les cellules contenant les sommes
          NomTableau(1) = Sheets(2).Range("A1").Value
          NomTableau(2) = Sheets(3).Range("A1").Value
          NomTableau(3) = Sheets(4).Range("A1").Value
          
          ReDim Tableau(0 To 3)
         For i = 0 To UBound(Tableau())
              Tableau(i) = NomTableau(i)
          Next i
          Do 'tri décroissant
              Valeur = 0
              
              For i = 0 To UBound(Tableau) - 1
                  If Tableau(i) < Tableau(i + 1) Then
                      Cible = Tableau(i)
                      Tableau(i) = Tableau(i + 1)
                      Tableau(i + 1) = Cible
                      Valeur = 1
                  End If
              Next i
          Loop While Valeur = 1
          
          'vérification du tri décroissant
          For i = 0 To UBound(Tableau)
              MsgBox Tableau(i)
          Next i
          
          
          'Pour obtenir un ordre croissant, il suffit de boucler du dernier élément
          'du tableau, vers le premier.
          
          'For i = UBound(Tableau) To 0 Step -1
              'Debug.Print Tableau(i)
          'Next i
      End Sub
      


      Voir le site mentionné plus haut pour les tableaux
      1. Bonjour Lepapillon, bonjour le forum,

        J'avais répondu à ce post en te secouant un peu à cause de ta demande plus qu'incomplète. Un "modérateur" a cru bon de supprimer ma réponse qui n'avait vraiment rien d'offusquant, je te l'assure. Résultat, tu n'as toujours pas de réponse...
        Moralité, certains modérateurs feraient mieux de se modérer eux même... !
        1. Bonjour ThauTheme, je suis assez nouveau sur le forum donc je ne suis peut être pas habitué à faire des question si completes. Je vais essayer d'être plus clair.
          J'ai Quatre feuilles, avec une colonne remplis de chiffre chacune de façons aléatoire. A la fin de chaque colonne, il y'a la somme de cette dernière en A20. J'ai fait des boutons permettant d'aller de feuille en feuille, et je souhaitait faire une macro avec une message box qui quand j'arrive sur la feuille 4 me classe par ordre croissant les sommes des feuilles et me dise quelle somme est la plus élevé.
          Voilà j'espere avoir été plus précis, éspérant que tu peux m'aider....
        2. sub som()

          msgbox(sheets("NomDeLaFeuille1").range("CelluleDeLaSomme1").value + sheets("NomDeLaFeuille2").range("CelluleDeLaSomme2").value + sheets("NomDeLaFeuille3").range("CelluleDeLaSomme3").value)

          end sub

          J'avais cette macro pour essayer de m'inspirer mais je m'emmêle les pinceaux pour essayer de classer par ordre croissant, sachant que les sommes sont aléatoires...