IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recuperer l'adresse d'une valeur (Max d'une plage définie)


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 25
    Points
    25
    Par défaut Recuperer l'adresse d'une valeur (Max d'une plage définie)
    Bonsoir

    Comment obtenir l'adresse de "mf", résultant d'une fonction Max sur une plage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Plage = graphique.Range("J2", "J" & der)
    mf = Application.WorksheetFunction.max(Plage)
    une âme charitable

    Bien Cdt

  2. #2
    Membre averti Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 455
    Points : 323
    Points
    323
    Par défaut
    Faites Vous la différence entre une variable et une cellule ?

  3. #3
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une proposition dans le même sens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Plage As Range, c As Range
    Dim adr As String
     
    Set Plage = Range("C5:G15")
    Set c = Plage.Find(Application.WorksheetFunction.Max(Plage), LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then MsgBox c.Address

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    effectivement "mf" est une variable, et je voudrais l'adresse de cette variable
    contenue dans une cellule

    Cdt

  5. #5
    Membre averti Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 455
    Points : 323
    Points
    323
    Par défaut
    Ok, tu me rassures.

    La proposition de mercatoq répond à ta question mais seulement dans le cas où tu as qu'une seule cellule qui contient une valeur maximale dans la plage.

    Par ailleurs, Si dans la plage de cellules argument de la fonction Max(), se trouvent plusieurs valeurs maximales; la proposition de mercatoq ne répond plus à ta question.

    Dans ce cas plusieurs solutions alternatives peuvent être avancées dont voici une :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Option Base 1
    Sub MacroTest()
     
    Dim Plage As Range, c As Range, R As Range
    Dim adr As String, MyArray() As String
    Dim i As Integer, j As Integer, mf As Double
     
     
    Set Plage = graphique.Range("J2", "J" & der)
     
    '----------------------------------------------'
    '/**** la plus grande valeur de la Plage  ****\'
    '----------------------------------------------'
     
    mf = Application.WorksheetFunction.Max(Plage)
     
    '------------------------------------------------------------'
    '/****  Boucle sur la Plage, si la condition est True,  ****\'
    '/****  stockage de l'adresse de la cell dans MyArray   ****\'
    '------------------------------------------------------------'
    For Each R In Plage
        With R
            If .Value = mf Then
                i = i + 1
                ReDim Preserve MyArray(1 To i)
                MyArray(i) = .Address
            End If
        End With
    Next R
     
    '-------------------------------------------'
    '/****  Affiche le Contenu de MyArray  ****\'
    '-------------------------------------------'
    For j = 1 To UBound(MyArray())
        MsgBox MyArray(j)
    Next j
     
    End Sub
    Bonne soirée

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Pour info, avec cette formule, on retrouve la ligne de la plus grande valeur (la dernière) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =EQUIV(MAX(J1:J10);J1:J10)

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Bonjour
    complement d'infos d'aalex_38
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ADRESSE(EQUIV(MAX(J1:J100);J1:J100;0);10)
    Bonne journée.

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Re;
    en vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mf = [J:J].Find(Application.WorksheetFunction.Max(Plage)).Address

  9. #9
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour à tous,

    L'exemple d'Abed_H, m'a inspiré un petit sub, en esperant que cela puisse servir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Plusgranddanslaplage()
    Dim Wf As WorksheetFunction, MaPlage As Range, Mf As String, PlageMax As Range: Set Wf = Application.WorksheetFunction
     
    Set MaPlage = Range("J:k")
     
    Set PlageMax = MaPlage.Find(Wf.Max(MaPlage))
     
    Mf = PlageMax.Address
     
    MsgBox "L'adresse du plus grand nombre dans la plage " & MaPlage.Address & " est :" & Mf & " !" & vbCr & "Avec le nombre : " & PlageMax, vbInformation + vbOKOnly, "Trouver le plus grand dans la plage"
     
    Set PlageMax = Nothing: Set MaPlage = Nothing: Set Wf = Nothing
    End Sub
    Ps : pourquoi ne trouve-t-on pas toutes les fonctions dans worksheetfunction, par exemple address est introuvable, je vais regarder dans VBAlist voir si je trouve la réponse, si vous l'avez je suis preneur

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Bonjour à vous tous et merci pour vos réponses

    la solution de Mercatog, m'aurait convenue mais j' ai un souci il m'indique que cel =nothing

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set cel = Plage.Find(Application.WorksheetFunction.max(Plage), LookIn:=xlValues, lookat:=xlWhole)
    If Not cel Is Nothing Then MsgBox cel.Address
    pour ta solution ,ABED, VB me ramène un message d'erreur "erreur d'execution 91"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mf = [J:J].Find(Application.WorksheetFunction.Max(Plage)).Address
    pour vous préciser ma demande, je souhaite récupérer l'adresse de "mf", pour ensuite récuperer la valeur de la cellule adjacente ( par une formule de type offset(-1,0) )

    Bien Cordialement

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu as adapté plage à ta plage de données?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not cel Is Nothing Then ValCherch=c.offset(0,-1).value
    If Not cel Is Nothing Then
    a été mise par précaution au cas ou ta plage est vide

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Re;
    Vous devez spécifier la feuille où se trouvent les données comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mf = [Feuil1!J:J].Find(Application.WorksheetFunction.Max(Plage)).Address
    Bonne journée

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    pour vous préciser ma demande, je souhaite récupérer l'adresse de "mf", pour ensuite récuperer la valeur de la cellule adjacente ( par une formule de type offset(-1,0) )
    voici une solution peut être vous aidera à regler ton problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Range([Feuil1!J:J].Find(Application.WorksheetFunction.Max(Plage)).Address).Offset(-1).Value
    Bonne journée à vous tous.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Merci ABED , une question

    Y'a t'il dans cebout de code quelque chose qui te choque
    J'ai toujours une erreur d'execution type 91 au niveau "qf"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    der = Worksheets("graphique").Range("B2").End(xlDown).Row
                    Set Tableau = graphique.Range("I3", "I" & der)
                    Set Plage = graphique.Range("J3", "J" & der)
                    mf = Application.WorksheetFunction.max(Plage)
                    qf = graphique.Range([graphique!J:J].Find(Application.WorksheetFunction.max(Plage)).Address).Offset(-1).Value
                    TextBox16.Value = FormatNumber(mf, -1, vbTrue, vbTrue)
    Bien Cdt

  15. #15
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    graphique est bien le codename de ta feuille ?

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim der As Long
    Dim Plage As Range, c As Range
    With Worksheets("graphique")
        der = .Range("B65536").End(xlUp).Row
        Set Plage = .Range("J3:J" & der)
        mf = Application.WorksheetFunction.Max(Plage)
        Set c = Plage.Find(mf, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then TextBox16.Value = c.Offset(-1, 0).Value
    End With
    Set c = Nothing
    Set Plage = Nothing

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Désolé, Mercatog

    toujours rien en "c", ce qui est agacant!, alors qui me récupère bien la variable "mf" mains ne la retrouve pas.

    Bien Cdt

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu peux mettre un copie de ton fichier (avec un minimum de données)?

  19. #19
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    si graphique est le nom de ta feuille pas le codeName tu va changé ton code comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    der = Worksheets("graphique").Range("B2").End(xlDown).Row
                    Set Tableau = Sheets("graphique").Range("I3", "I" & der)
                    Set Plage = Sheets("graphique").Range("J3", "J" & der)
                    mf = Application.WorksheetFunction.Max(Plage)
                    qf = Sheets("graphique").Range(Sheets("graphique").Range("J3", "J" & der).Find(Application.WorksheetFunction.Max(Plage)).Address).Offset(-1).Value

  20. #20
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    le voici

    Je n'ai pas mis la userform avec la textbox

    Bien Cdt
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Toutes versions] Rechercher une valeur max dans une plage de cellules variable
    Par Laur3nt62 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/05/2011, 19h34
  2. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  3. ajouter une valeur max depuis une BDD
    Par ygeeg dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/2010, 22h31
  4. tester une valeur et affecter une valeur
    Par Elise0251 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 29/07/2009, 16h31
  5. Réponses: 10
    Dernier message: 30/11/2006, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo