Afficher la valeur max dans une fenetre

Bonjour,

voila je voudrais afficher la valeur max avec sa date et son unité dans une seule fenetre en utilisant "msgbox"

et sa devrait donner par exemple au final :

Le 10/02/2016, la valeur: 12000 $

j'ai pu affichier la valeur et son unité mais le probleme se pose pour affichier la date j'y arrive pas.

Help !!

voir le fichier que j'essaie de voir en piece jointe.

Merciiii bcp !

22test.xlsm (34.42 Ko)

Salut mindah,

Sans regarder ton fichier, essaie quelque chose comme ça :

MsgBox "Le " & Format( Date, "dd/mm/yyyy") & ", la valeur : " & taValeur

je viens d'essayer mais sa n'affiche pas la date qui correspond a la valeur max de la colonne.

voici mon code :

Sub Selection_max()

Sheets("test").Select

Dim valeur As String

valeur = Range("B369")

Sheets("Feuil2").Select

MsgBox "Le " & Format(Date, "dd/mm/yyyy") & ", la valeur : " & valeur

End Sub

Bonjour le fil, bonjour le forum,

En regardant ton fichier, essaie ce code. Il prend en compte l'éventualité d'avoir la valeur Max à plusieurs dates différentes (je ne sais pas si ce cas de figure est possible dans ton tableau mais au cas où...) :

Sub Selection_max()
Dim T As Worksheet 'déclare la variable T (onglet Test)
Dim PL As Range 'déclare la variable PL (PLage)
Dim V As Integer 'déclare la variable V (Valeur)
Dim R As Range 'déclare la variable R (Recherche)
Dim MSG1 As String 'déclare la variable MGS1 (MeSsaGe 1)
Dim MSG2 As String 'déclare la variable MGS2 (MeSsaGe 2)

Set T = Sheets("test") 'définit l'onglet T
V = T.Range("B369") 'définit la valeur V
Set PL = T.Range("B3:B368") 'définit la palge PL
Select Case Application.WorksheetFunction.CountIf(PL, V) 'agit en fonction du nombre de fois que la valeur max apparaît dans la plage PL
    Case 1 'cas : une seule fois
        MsgBox "Le " & T.Cells(PL.Find(V, , xlValues, xlWhole).Row, 1).Value & ", la valeur : " & V & " $" 'message
    Case Else 'cas : plus d'une seule fois
        MSG1 = "La valeur " & V & " $ les :" & Chr(13) 'définit le message MSG1
        Set R = PL.Find(V, , xlValues, xlWhole) 'définit la recherche R
        PA = R.Address 'définit l'addresse de la première occurrence trouvée
        Do 'exécute
            MSG2 = IIf(MSG2 = "", T.Cells(R.Row, 1).Value & Chr(13), MSG2 & T.Cells(R.Row, 1).Value & Chr(13)) 'définit le message MSG2
            Set R = PL.FindNext(R) 'redéfinit la recherche R (occurrence suiivante)
        Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelle occurrence ailleurs qu'en PA
        MsgBox MSG1 & MSG2 'affiche le message MSG1 et MSG2
End Select 'fin de l'action en fonction du nombre de fois que la valeur max apparaît dans la plage PL
End Sub

Ah oui, je n'ai pas regardé le fichier, donc mon code ne risquait pas de marcher !

Je propose une autre alternative, en utilisant la méthode du Dictionary.

L'utilisation d'un dictionnaire pour accéder aux éléments par une clé est très rapide :

Sub Selection_max_Dico()
    Dim tblValeurs
    Dim monDicoDate As Object
    Dim valMax As Double

    'on stocke les données dans une variable tableau
    tblValeurs = Sheets("test").Range("A3:B368").Value

    'on va créer un dictionnaire des valeurs avec les dates associées
    Set monDicoDate = CreateObject("scripting.dictionary")
    For i = 1 To UBound(tblValeurs)
        monDicoDate(tblValeurs(i, 2)) = monDicoDate(tblValeurs(i, 2)) & tblValeurs(i, 1) & vbCrLf
    Next i

    'on récupère la valeur max
    valMax = Application.Max(monDicoDate.keys)

    MsgBox "La valeur " & valMax & " $ les :" & Chr(13) & monDicoDate(valMax)

    'on vide la mémoire
    Set monDicoDate = Nothing
End Sub

Magnifique sa marche, merci beaucoup!

Re,

Bien vu VBA-New !...

Merci VBA_New.

Effectivement c'est beaucoup plus simple, mais quand le message box la date correspondante ne s'affiche pas.

y'a t-il un rajout que je peux faire pour afficher la date correspondante ?

mindah a écrit :

mais quand le message box la date correspondante ne s'affiche pas

Désolé je n'ai pas compris

Que veux-tu dire ?

la valeur max correspond a une date, et avec ton code quand je l'excute il me donne juste la valeur.

ce que je veux afficher est la valeur ainsi que sa date.

je ne sais pas si je me suis bien expliqué désolé

Bonjour le fil, bonjour le forum,

Une petite erreur dans le code de VBA-NEW. il a vidé la variable monDicoDate avant d'afficher le message... Il suffit d'inverser les lignes.

Son code modifié :

Sub Selection_max_Dico()
Dim tblValeurs
Dim monDicoDate As Object
Dim valMax As Double

'on stocke les données dans une variable tableau
tblValeurs = Sheets("test").Range("A3:B368").Value
'on va créer un dictionnaire des valeurs avec les dates associées
Set monDicoDate = CreateObject("scripting.dictionary")
For i = 1 To UBound(tblValeurs)
    monDicoDate(tblValeurs(i, 2)) = monDicoDate(tblValeurs(i, 2)) & tblValeurs(i, 1) & vbCrLf
Next i
'on récupère la valeur max
valMax = Application.Max(monDicoDate.keys)
MsgBox "La valeur " & valMax & " $ les :" & Chr(13) & monDicoDate(valMax)
'on vide la mémoire
Set monDicoDate = Nothing
End Sub

ah oui ça marche merci beaucoup sensei !

Re,

Censé, pourquoi pas ! Sans le sous, sûr ! Mais Sensei, faudrait pas exagérer non plus...

Erreur de débutant !

Merci ThauThème !

J'ai édité le code.

Rechercher des sujets similaires à "afficher valeur max fenetre"