[excel VBA] transcrire la fonction max

Anne-Sophie -  
Iternity Messages postés 43 Statut Membre -
Bonjour,

Je souhaiterais savoir comment s'écrit la fonction excel max en VBA car je veux que dans une cellule, s'inscrive le nombre le plus élevé qui figure dans les cellules B9 à L9.
J'ai écrit activecell.Offset(11,7).value= max(range("B9 : L9")) mais quand j'éxécute ma macro, ça m'indique "erreur de compilation: sub ou fonction non définie". Et je n'arrive pas à résoudre le problème.

Dernière question: comment faire pour que excel inscrive dans une autre cellule la colonne dans laquelle figure le plus grand nombre dans la plage de cellules B9 à L9.
Pour être plus claire: les cellules B9 à L9 correspondent à des totaux. Je voudrais qu'excel inscrive dans une cellule le résultat le plus élevé (de B9 à L9) et qu'ensuite il inscrive dans une autre cellule la colonne qui correspond au chiffre le plus grand.

D'avance merci.

4 réponses

  1. Utilisateur anonyme
     
    Bonjour,

    Démonstration:

    Sub Test_Max_Sum()
    
        Dim Cellules As Range
        Dim LaCel As Range
        
        Set Cellules = Range("B9:L9")
        
        Set Cellules = ActiveSheet.Range("B9:L9")
        Range("B11").Value = Application.WorksheetFunction.Sum(Cellules)
        Range("B12").Value = Application.WorksheetFunction.Max(Cellules)
        
        For Each LaCel In Cellules
            If (LaCel.Value = Range("B12").Value) Then
                Range("B13").Value = LaCel.Column
                'Range("B13").Value = LaCel.Address
            End If
        Next
        
        
        Range("A1").Select
        
    End Sub
    


    Lupin
    10
    1. anne-sophie
       
      Merci beaucoup. :-)
      Votre aide me retire une épine du pied, car c'est pour mon travail que je dois faire ceci.
      Merci encore.
      0
    2. Iternity Messages postés 43 Statut Membre
       
      reponse très très utile et précise je ne pouvais rêver mieux. Merci.
      0
  2. Utilisateur anonyme
     
    re:

    ce fut un plaisir, et si vous avez d'autres difficultés, n'hésité
    par à revenir dans ce fil de discussion. Le reconnaissance
    m'inspire toujours.

    Lupin
    2
    1. Pier-3d Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   1
       
      Bonjour,

      Je suis moi-même un néophyte et je me pose des questions en lisant le code
      affiché ci-dessus.

      Ces lignes ne sont-elles pas une répétition ?
      Set Cellules = Range("B9:L9")
      Set Cellules = ActiveSheet.Range("B9:L9")
      Et ici :
      Range("B11").Value = Application.WorksheetFunction.Sum(Cellules)
      Range("B12").Value = Application.WorksheetFunction.Max(Cellules)
      Je ne comprends vraiment pas. Vous modifiez les valeurs de B11, B12 et plus loin B13
      alors que, dans l'énoncé du problème, ces cellules font partie de la plage à examiner
      par la fonction Max().

      Et, finalement...
      Range("B12").Value = Application.WorksheetFunction.Max(Cellules)
      ... cette ligne n'est-elle pas en elle-même une réponse complète au problème énoncé
      par Anne-Sophie ?

      Je ne connaissais pas la méthode « Application.WorksheetFunction ». Je viens d'apprendre
      quelque chose de nouveau qui va m'être très utile. Merci beaucoup.

      Je ne sais pas si je contreviens aux règles du forum en écrivant ce message qui est plutôt
      une sous-question ? Si oui, aurait-il mieux d'adresser un message privé à M. Lupin ?


      Pierre Cloutier
      0
      1. Utilisateur anonyme > Pier-3d Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonjour,

        Votre observation est tout à fait pertinente, et vous avez presque raison !

        Il faut être capable de définir la plage

        Set Cellules = Range("B9:L9")

        est aussi un minimum bien que très peu explicite,
        et la déclaration de la plage doit correspondre à la fonction demandé
        qui est :
        Application.WorksheetFunction.Max

        Le Membre [ WorksheetFunction ] implique une feuille,
        donc je recommande d'utilisé de façon plus explicite
        la déclaration de la plage à une feuille :

        Set Cellules = ActiveSheet.Range("B9:L9")
        ou
        Set Cellules = Sheets("MaFeuille").Range("B9:L9").

        Un exemple frappant sur la façon d'appeller une fonction :-)
        InputBox
        Application.InputBox
        Vous devriez y voir une différence :-)

        et vous êtes bienvenue tout autant que moi,
        pour ma part je suis un étranger ici :-)

        quand j'ai du temps :-)
        et parfois je code en quelques minutes ces jets d'improvisations,
        je les tests et j'ai du probablement du rajouter la spécification
        de la feuille en oubliant d'enlever la première ligne.

        Lupin
        0
      2. Mas > Utilisateur anonyme
         
        Bonjour,

        Ce thread se rapproche pas mal de mon problème (du moins je crois...). Je me permet donc de poster ici pour plus de cohérance.

        J'utilise dans mon worksheet des regles de validation faisant appel à des ranges dynamiques. En gros, mes utilisateurs choisissent un pays, puis un district, puis un sous district, etc et j'aimerai qu'à chaque niveau les choix proposés soient cohérents avec le choix du niveau supérieur.

        Ex. pour France, n'obtenir (en liste deroulante de validation) que les region francaises.

        Dans mon worksheet la formule de validation est la suivante:

        =OFFSET(levmomA1,MATCH(D9,Admin1_Ref,0),1,COUNTIF(Admin1_Ref,D9),1)

        levmomA1 et Admin1_Ref sont des ranges et D9 refère a la valeur choisie au niveau supérieur.


        Impossible de transférer ca en VBA (ou ces données doivent être entrée via des Combobox). Ma dernière tentative ressemble à ca:

        'Define Ranges and their Formulas'

        Dim RangeLevmomA1 As Range
        Dim RangeAdmin1_Ref As Range
        Dim ComboBox_Ad2Range As Range

        Set RangeLevmomA1 = ActiveWorkbook.Worksheets("_geo").Range("levmomA1")
        Set RangeAdmin1_Ref = ActiveWorkbook.Worksheets("_geo").Range("Admin1_Ref")
        Set ComboBox_Ad2Range = ActiveWorkbook.Worksheets("_geo").WorksheetFunction.Offset(RangeLevmomA1, WorksheetFunction.Match(ComboBox_Ad1.Value, RangeAdmin1_Ref, 0), 1, WorksheetFunction.CountIf(RangeAdmin1_Ref, ComboBox_Ad1.Value), 1)

        'Define ComboBox_Ad2 RowSource Definition'

        ComboBox_Ad2.RowSource = ComboBox_Ad2Range



        Si vous avez une idée... vous me sortiriez un cactus du pied...
        0
  3. GafsiTN Messages postés 10 Statut Membre 1
     
    Bonjour à tous,
    Y'a -t un code VBA ou une formule qui me permet de résoudre ce problème?
    Article Version Indice
    IBB102110 0
    IBB102110 5
    IBB102110 9 OK
    IBB102110 9 OK
    IBB102194 3
    IBB102194 3
    IBB102194 3
    IBB102194 4 OK
    IBB102194 4 OK
    IBB102194 4 OK
    Je veux mettre dans une colonne un idex qui me dit que la dernière version est est la plus élevé
    Je sais que c'est simple avec 5 lignes mais j'ai 17000 références à déterminer leurs dernières versions

    Merci pour votre aide
    1
  4. Atikata
     
    Bonjour à tous,

    J'ai une colonne de valeurs dans laquelle les valeurs passent par plusieurs min et plusieurs max, comment tous les obtenir car quand je fais par exemple max(A1:A200) je n'obtiens qu'un seul max c'est à dire le plus élevé et pareil pour min(A1:A200).
    Y a t il une solution avec Excel VBA?
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,

      Sans VBA, il existe la formule :
      =GRANDE.VALEUR(plage;n°) qui te renvoie, selon le n°, la plus grande, la seconde, la troisième plus grande valeur de ta plage.
      Exemple :
      =GRANDE.VALEUR(A1:A100;8) te renvoie la 8ème + grande valeur de la plage A1:A100

      à l'inverse, tu trouveras la formule =PETITE.VALEUR(A1:A100;2)
      0