XL 2016 Tableau VBA

djiska

XLDnaute Junior
Bonjour

Bonjour j'ai de la difficulté à coder une fonction avec un tableau (3) à une dimension qui retoune une boolean

j'ai écris un code mais cela ne marche pas

on saisit 3 valeurs pour chaque case du tableau
les 3 valeurs du tableau devront respecter un inter val ( 1 à 100)
sinon ,on affiche le message (entrer valeur valide)
si le 3 valeurs respectent l’inter val ,on affiche (bravo)

quelqu'un saurait-il comment je pourrai m'y prendre

À l'aide.........

Merci
 

job75

XLDnaute Barbatruc
Bonsoir djiska,

Exécutez cette macro :
VB:
Sub Test()
Dim x$, tablo#(1 To 3), s, flag As Boolean, i 'dimension de tablo à adapter (base 1)
Do
    x = InputBox("Entrez " & UBound(tablo) & " nombres séparés par des espaces" & vbLf & "et compris entre 1 et 100 :", , x)
    If x = "" Then Exit Sub
    s = Split(x)
    flag = False
    If UBound(s) = UBound(tablo) - 1 Then
        For i = 1 To UBound(tablo)
            tablo(i) = Val(Replace(s(i - 1), ",", "."))
            If tablo(i) < 1 Or tablo(i) > 100 Then flag = True: Exit For
        Next
    Else
        flag = True
    End If
Loop While flag
'---restitution---
With [A1].Resize(, UBound(tablo))
    .Value = tablo
    MsgBox "Bravo, les " & UBound(tablo) & " valeurs sont restituées en " & .Address(0, 0)
End With
End Sub
Bonne nuit.
 

djiska

XLDnaute Junior
Je te remercie Job75

sauf que ton code trop avancé, pour un simple débutant que je suis.
De plus , je voulais pas affiché le résultat sur une feuille Excel mais seulement afficher les input box
si tu peux m'aider à partir de mon code ça serait très apprécié (histoire de bien comprendre le code)

l'idée c'est d'avoir une fonction mais je commence par faire une procédure ,pour tester ( mais ca ne marche pas )

VBA:

Public Sub moii()

Dim valeur1 As String 'La valeur saisie par l'utilisateur
Dim valeur2 As Integer
Dim valeur3 As Integer
Dim tableau() As Integer
Dim refaire As Boolean
Dim i As Integer

Do

tableau(1) = valeur1
tableau(2) = valeur2
tableau(3) = valeur3
i = UBound(tableau)


'On émet l'hypothèse que l'utilisateur entrera une valeur correcte.
refaire = False

'L'utilisateur saise une valeur
valeur1 = Val(InputBox("entrez une valeur :"))
valeur2 = Val(InputBox("entrez une valeur :"))
valeur3 = Val(InputBox("entrez une valeur :"))


'tant que la valeur saisie est annulé on reaaffiche le message d'entrer de saisie
While saisie1 = vbNullString Or saisie2 = vbNullString Or saisie3 = vbNullString
refaire = True
Call MsgBox("Faire une saisie ")
Wend

'on parcourt le tableau pour voir si les valeurs respectent les bornes
For i = i To UBound(tableau)
If valeur1 < 1 Or valeur1 > 100 Or valeur2 < 1 Or valeur2 > 100 Or valeur3 < 1 Or valeur3 > 200 Then
Call MsgBox("entrer une valeur valide")

Else

Call MsgBox("bravo")

End If

Next i

Loop While refaire

End Sub


Si tu penses pouvoir faire UNE FONCTION surtout n'hésites pas

merci
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Avec une petite boucle et sous forme procédurale et sous forme de fonction:
VB:
'
'   sous forme procédurale
'
Sub SaisieValeurs()
    Dim i As Integer
    Dim tableau(1 To 3)

    For i = 1 To 3
        Do
            tableau(i) = Val(InputBox("Entrez la valeur " & i, "Saisie valeur"))
        Loop While tableau(i) < 1 Or tableau(i) > 100
    Next
   
    MsgBox "Valeur 1 : " & tableau(1) & vbLf & "Valeur 2 : " & tableau(3) & vbLf & "Valeur 3 : " & tableau(3), vbInformation, "Saisie valeurs"
   
End Sub
'
'       Sous forme de fonction
'
Function OhLesValeurs()
    Dim i As Integer
    Dim tableau(1 To 3)

    For i = 1 To 3
        Do
            tableau(i) = Val(InputBox("Entrez la valeur " & i, "Saisie valeur"))
        Loop While tableau(i) < 1 Or tableau(i) > 100
    Next
    OhLesValeurs = tableau
End Function
'
' utilisation de la fonction
'
Sub Test()
    Dim resultat As Variant
    resultat = OhLesValeurs()
    MsgBox "Valeur 1 : " & resultat(1) & vbLf & "Valeur 2 : " & resultat(2) & vbLf & "Valeur 3 : " & resultat(3), vbInformation, "Saisie valeurs"
End Sub

Cordialement
 

djiska

XLDnaute Junior
Merci beaucoup Roblochon

ca marche bien.
Question de curiosité : si alors l'interval de la troisième valeur diffère (par exemple : >1 et 200<)
quel aurait été la modification a apporté??

De mon coté ,J'ai tenté avec un autre For mais ce ne marche pas

merci encore
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Avec le fonction Choose de vb et une valeur limite pour chaque indice de boucle for
VB:
Sub SaisieValeurs()
    Dim i As Integer
    Dim tableau(1 To 3)
    For i = 1 To 3
        Do
            tableau(i) = Val(InputBox("Entrez la valeur " & i, "Saisie valeur"))
        Loop While tableau(i) < 1 Or tableau(i) > Choose(i, 100, 100, 200)
    Next
  
    MsgBox "Valeur 1 : " & tableau(1) & vbLf & "Valeur 2 : " & tableau(3) & vbLf & "Valeur 3 : " & tableau(3), vbInformation, "Saisie valeurs"
  
End Sub

Ou alors avec un tableau: Loop While tableau(i) < 1 Or tableau(i) > Array(100, 100, 200)(i - 1)
i-1 car les tableaux vb par défaut sont indicés à 0
cordialement
 

Discussions similaires

Réponses
10
Affichages
752

Statistiques des forums

Discussions
314 021
Messages
2 104 681
Membres
109 103
dernier inscrit
nzelos