[excel VBA] transcrire la fonction max
Anne-Sophie
-
Iternity Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
Iternity Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Application.worksheetfunction.max
- Fonction si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Comment calculer la moyenne sur excel - Guide
- Transcrire audio en texte word - Guide
4 réponses
Bonjour,
Démonstration:
Lupin
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
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
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
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 ?
alors que, dans l'énoncé du problème, ces cellules font partie de la plage à examiner
par la fonction Max().
Et, finalement...
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
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
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
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
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...
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...
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
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
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?
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?
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)
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)
Votre aide me retire une épine du pied, car c'est pour mon travail que je dois faire ceci.
Merci encore.