Utilisation de la fonction max en VBA ?

nilessoj

XLDnaute Nouveau
Bonjour,

j'ai quelques petits soucis pour utiliser la fonction max sous vba.
Voilà ma macro :

Code:
Sub maxdetroisnombresv1()
Dim response As String
response = InputBox(prompt, "saisir une donnée", "Saisie 1")
Range("G3").Select
ActiveCell.Value = response
response2 = InputBox(prompt, "saisir une donnée", "Saisie 2")
Range("G4").Select
ActiveCell.Value = response2
response3 = InputBox(prompt, "saisir une donnée", "Saisie 3")
Range("G5").Select
ActiveCell.Value = response3
Range("G6").Select
ActiveCell.Application.WorksheetFunction.max (Range("G3:G5"))
End Sub

La seule chose qui ne fonctionne pas (même si aucun message d'erreur ne m'est retourner quand je lance la macro) c'est la dernière ligne, en fait la case G6 reste vierge au lieu d'afficher la valeur la plus haute de la plage G3:G5.
Quelqu'un aurait il une idée ?

Merci d'avance :)
 

Efgé

XLDnaute Barbatruc
Re : Utilisation de la fonction max en VBA ?

Bonjour nilessoj
Pour ernvoyer la dernière valeur:
VB:
ActiveCell.Value = Application.WorksheetFunction.Max(Range("G3:G5"))

Mais tu peux aller au plus court:
VB:
Sub maxdetroisnombresv3()
Range("G3").Value = InputBox(prompt, "saisir une donnée", "Saisie 1")
Range("G4").Value = InputBox(prompt, "saisir une donnée", "Saisie 2")
Range("G5").Value = InputBox(prompt, "saisir une donnée", "Saisie 3")
Range("G6").Value = Application.WorksheetFunction.Max(Range("G3:G5"))
End Sub
Cordialement
 

nilessoj

XLDnaute Nouveau
Re : Utilisation de la fonction max en VBA ?

Bonjour,

merci ça fonctionne parfaitement et c'est plus court mais du coup j'avais une autre interrogation (à laquelle j'ai essayé de répondre par moi même mais sans succès) comment faire pour avoir exactement le même résultat que pour la macro précédente MAIS sans utiliser la fonction Max.

En gros j'ai ré-écrit la fonction comme ceci (évidemment c'est un fail)

Code:
Sub maxdetroisnombresv2()
Range("H3").Value = InputBox(prompt, "saisir une donnée", "Saisie 1")
Range("H4").Value = InputBox(prompt, "saisir une donnée", "Saisie 2")
Range("H5").Value = InputBox(prompt, "saisir une donnée", "Saisie 3")
If H3 > H4 And H3 > H5 Then
Range("H6").Value = H3
ElseIf H4 > H5 And H4 > H5 Then
Range("H6").Value = H4
Else: Range("H6").Value = H5
End If
End Sub

Merci d'avance pour celui qui éclairera ma lanterne :)
 

Efgé

XLDnaute Barbatruc
Re : Utilisation de la fonction max en VBA ?

Re
Quel est l'interet de na pas utiliser MAX ?
Quel but cherche tu à atteindre ?
A te re lire.
EDIT .
Si non, comme ça, mais sans savoir...
VB:
Sub maxdetroisnombresv4()
Dim Maxi As Long
Range("H3").Value = InputBox(prompt, "saisir une donnée", "Saisie 1")
Maxi = Range("H3").Value
Range("H4").Value = InputBox(prompt, "saisir une donnée", "Saisie 2")
If Range("H4").Value > Maxi Then Maxi = Range("H4").Value
Range("H5").Value = InputBox(prompt, "saisir une donnée", "Saisie 3")
If Range("H5").Value > Maxi Then Maxi = Range("H5").Value
End Sub
tnemelaidroC
 
Dernière édition:

nilessoj

XLDnaute Nouveau
Re : Utilisation de la fonction max en VBA ?

Re
Il n'y d'un point de vue pratique strictement aucun intérêt mais c'est juste d'un point de vue théorique, étant donné que je suis archi-débutant en VBA je cherche un peu mieux à comprendre les bases du langage (j'ai récupéré des cours par ci par là) et je me dis que si je n'arrive déjà pas à retourner la valeur Max sur une série de 3 nombres alors je vais vraiment galérer par la suite pour faire des macros un peu plus compliqué.
Par exemple là je n'arrive pas à savoir si c'est un problème de syntaxe ou si ma boucle est mal "construite"

nilessoj
 

Efgé

XLDnaute Barbatruc
Re : Utilisation de la fonction max en VBA ?

Re
J'avais modifié mon post précédent, tu auras une autre version pour ton exercice ; )
Voici ce que je peux te dire sur ton code:
VB:
Sub maxdetroisnombres_Expliqué()
'Essai avec ceci, cela limitera les saies à des valeurs numériques :
Range("G3").Value = Application.InputBox("saisir une donnée", "Saisie 1", 0, , , , , 1)
'Range("H3").Value = InputBox(prompt, "saisir une donnée", "Saisie 1")
Range("H4").Value = InputBox(prompt, "saisir une donnée", "Saisie 2")
Range("H5").Value = InputBox(prompt, "saisir une donnée", "Saisie 3")
'Si tu veux utiliser la Valeur d'une cellule il faut préciser
'que tu utilise une cellule (Range)
'Le .Value est compris par défaut pour les Range
'If H3 > H4 And H3 > H5 Then ' ne peux pas fonctionner tel quel
If Range("H3") > Range("H4") And Range("H3") > Range("H5") Then
    'Meme principe pour mettre une valeur dans une cellule
    Range("H6") = Range("H3")
'Ici tu repéte deux fois la meme condition. C'est inutile
'ElseIf H4 > H5 And H4 > H5 Then
ElseIf Range("H4") > Range("H5") Then
    Range("H6") = Range("H4")
Else
    Range("H6") = Range("H5")
End If
End Sub
En espérant que mes annotations te seront utiles.
tnemelaidroC
 
Dernière édition:

nilessoj

XLDnaute Nouveau
Re : Utilisation de la fonction max en VBA ?

Merci pour ta réponse si rapide.
Les deux codes fonctionnent parfaitement :) et les annotations sont utiles (ça me permet une fois de plus que j'aime bien faire de la redondance de conditions dans mes boucles et ça explique peut être en partie le fait qu'elles marchent rarement).

En revanche j'avoue être un peu surpris pour la déclaration de saisie de données uniquement numérique

Code:
Range("G3").Value = Application.InputBox("saisir une donnée", "Saisie 1", 0, , , , , 1)

J'avais cru comprendre qu'on pouvait directement déclarer le type de variable souhaité, par exemple:

Code:
Range("G3").Value = Application.InputBox("saisir une donnée", "Saisie 1",integer)

Cordialement
 

Efgé

XLDnaute Barbatruc
Re : Utilisation de la fonction max en VBA ?

Re
...je cherche un peu mieux à comprendre les bases du langage
C'est tout a fait louable

Si tu veux découvrir, il est nécessaire d'essayer....
La ligne
VB:
Application.InputBox("saisir une donnée", "Saisie 1", "integer")
renvoie une erreur.

Regarde bien la différence entre InputBox et Application.InputBox....

En ce qui me concerne, XLD est LE Forum où on peut découvrir, apprendre et plus.....(J'ai vu des "miracles")

Cordialement
 

Discussions similaires

Réponses
14
Affichages
734