[excel VBA] transcrire la fonction max

Fermé
Anne-Sophie - 7 déc. 2006 à 15:35
Iternity Messages postés 32 Date d'inscription mercredi 22 février 2012 Statut Membre Dernière intervention 27 février 2017 - 20 oct. 2015 à 21:17
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.
A voir également:

4 réponses

Utilisateur anonyme
7 déc. 2006 à 18:20
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
Merci beaucoup. :-)
Votre aide me retire une épine du pied, car c'est pour mon travail que je dois faire ceci.
Merci encore.
0
Iternity Messages postés 32 Date d'inscription mercredi 22 février 2012 Statut Membre Dernière intervention 27 février 2017
20 oct. 2015 à 21:17
reponse très très utile et précise je ne pouvais rêver mieux. Merci.
0
Utilisateur anonyme
9 déc. 2006 à 00:17
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
Pier-3d Messages postés 67 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 18 mars 2024 1
9 mars 2009 à 15:52
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
Utilisateur anonyme > Pier-3d Messages postés 67 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 18 mars 2024
10 mars 2009 à 01:56
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
Mas > Utilisateur anonyme
22 févr. 2010 à 15:54
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
GafsiTN Messages postés 6 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 20 avril 2010 1
15 oct. 2009 à 18:39
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 13/05/2013 à 11:58
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