VBA

Bonjour,

Je dois faire un programme à l'aide de VBA dans Excel et la consigne et de demander l'age de 5 personnes et d'afficher s'il sont majoritairement mineurs ou majeurs.

j'ai commencer comme ça:

Sub Exo()

Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer

a = InputBox("Personne n°1 : quelle âge avez vous ?")

b = InputBox("Personne n°2 : quelle âge avez vous ?")

c = InputBox("Personne n°3 : quelle âge avez vous ?")

d = InputBox("Personne n°4 : quelle âge avez vous ?")

e = InputBox("Personne n°5 : quelle âge avez vous ?")

Et je n'arrive pas à trouver la suite. Je sais que c'est une fonction if, mais je n'arrive pas à savoir comment je dois dérouler la logique.

Si je peux avoir des indices pour pouvoir faire le programme.

Merci d'avance.

Bonjour toutes et tous

@ tester en plaçant dans un module

Note : à améliorer en cas d'annulation sur Annuler

Option Explicit

' déclaration des variables
Dim xAge, xAge1, xAge2, xAge3, xAge4

Sub age()
xAge = InputBox("Personne n°1 : quelle âge avez vous ?")
   If xAge >= 18 Then
       MsgBox "Vous êtes majeur"
   Else
       MsgBox "Vous êtes mineur"
   End If
   Call age1
End Sub

Sub age1()
xAge1 = InputBox("Personne n°2 : quelle âge avez vous ?")
   If xAge1 >= 18 Then
       MsgBox "Vous êtes majeur"
   Else
       MsgBox "Vous êtes mineur"
   End If
   Call age2
End Sub

Sub age2()
xAge2 = InputBox("Personne n°3 : quelle âge avez vous ?")
   If xAge2 >= 18 Then
       MsgBox "Vous êtes majeur"
   Else
       MsgBox "Vous êtes mineur"
   End If
   Call age3
End Sub

Sub age3()
xAge3 = InputBox("Personne n°4 : quelle âge avez vous ?")
   If xAge3 >= 18 Then
       MsgBox "Vous êtes majeur"
   Else
       MsgBox "Vous êtes mineur"
   End If
   Call age4
End Sub

Sub age4()
xAge4 = InputBox("Personne n°5 : quelle âge avez vous ?")
   If xAge4 >= 18 Then
       MsgBox "Vous êtes majeur"
   Else
       MsgBox "Vous êtes mineur"
   End If
   Call fin
End Sub

Sub fin()
If MsgBox("Etes vous certain(e) de vouloir recommencer ?", vbYesNo + vbInformation, _
"RESET") = vbYes Then
Call age
Else
Exit Sub
End If
End Sub

ci-joint,

crdlt,

André

13age-test001.xlsm (24.86 Ko)

Bonjour nana66 et le forum

Ma petite contribution

Cdt

Henri

10nana66.xlsm (15.50 Ko)

Bonjour,

je vous remercie à tous pour vos réponses !! je comprend mieux

Salut Nana,

Salut l'équipe,

et allons-y d'une troisième solution!

Un double-clic sur la feuille démarre la macro.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iTot%, iFlag%, iRep%
'
Cancel = True
Do
    iRep = Application.InputBox("Encodez l'âge de la " & iFlag + 1 & IIf(iFlag + 1 = 1, "ère", "e") & " personne!", "Majorité", 18, , , , , 1)
    If IsNumeric(iRep) Then
        iFlag = iFlag + 1
        iTot = iTot + IIf(iRep >= 18, 1, 0)
    End If
Loop Until iFlag = 5
MsgBox "La majorité de ces cinq personnes est " & IIf(iTot > 2, "majeure.", "mineure."), vbInformation + vbOKOnly, "Majorité"
'
End Sub

A+

6nana.xlsm (14.21 Ko)

Et encore plus court car cette fonction le permet...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iTot%, iFlag%, iRep%
'
Cancel = True
Do
    iRep = Application.InputBox("Encodez l'âge de la " & iFlag + 1 & IIf(iFlag + 1 = 1, "ère", "e") & " personne!", "Majorité", 18, , , , , 1)
    iFlag = iFlag + 1
    iTot = iTot + IIf(iRep >= 18, 1, 0)
Loop Until iFlag = 5
MsgBox "La majorité de ces cinq personnes est " & IIf(iTot > 2, "majeure.", "mineure."), vbInformation + vbOKOnly, "Majorité"
'
End Sub

A+

Après réflexion (suis pas dans un bon WE, faut croire )...

  • Application.DisplayAlerts = False pour gérer un "OK" sans valeur encodée dans l'InputBox ;
  • le bouton "Annuler" donne une réponse = 0 donc, Exit Do
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iTot%, iFlag%, iRep%
'
Cancel = True
Application.DisplayAlerts = False
'
Do
    iRep = Application.InputBox("Encodez l'âge de la " & iFlag + 1 & IIf(iFlag + 1 = 1, "ère", "e") & " personne!", "Majorité", , , , , , 1)
    If iRep = 0 Then Exit Do
    If iRep > 0 Then _
        iFlag = iFlag + 1: _
        iTot = iTot + IIf(iRep >= 18, 1, 0)
Loop Until iFlag = 5
If iRep > 0 Then MsgBox "La majorité de ces cinq personnes est " & IIf(iTot > 2, "majeure.", "mineure."), vbInformation + vbOKOnly, "Majorité"
'
Application.DisplayAlerts = True
'
End Sub

Ce coup-ci, c'est la bonne !

A+

Rechercher des sujets similaires à "vba"