Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Aide SVP pour un débutant

4 réponses
Avatar
Mohsine
je m'entraine un peu sur VB 6 pour faire de la programmation. Quand
j'exécute, j'ai une erreur de compilation de type "Type d'argument byref
incompatible" (Il s'arrête sur "c=cube(x)". Que doi-je changer?? Merci pour
votre aide!


Dim x, i, c, d As Long
Sub main()
x = InputBox("Valeur du nombre : ")
c = cube(x)
d = factoriel(x)
MsgBox "Le cube de " + Str(x) + " est de " + Str(c)
MsgBox "Le Factoriel de " + Str(x) + " est de " + Str(d)
End Sub
Function cube(a As Integer) As Long
a = a * a * a
End Function
Function factoriel(f As Integer) As Long
f = 1
For i = 1 To x
f = f * i
Next i
End Function

4 réponses

Avatar
Patrice Henrio
Une fonction renvoie une valeur, tu utilises la variable comme valeur
retournée.

Voici comment il faut faire

Function cube(x as integer) as long
cube=x*x*x
end function

function factoriel(x as intger) as long
dim resultat as long, i as long
resultat=1
For i = 1 To x
resultat=resultat*i
Next i
factoriel=resultat
End Function




"Mohsine" a écrit dans le message de
news:
je m'entraine un peu sur VB 6 pour faire de la programmation. Quand
j'exécute, j'ai une erreur de compilation de type "Type d'argument byref
incompatible" (Il s'arrête sur "c=cube(x)". Que doi-je changer?? Merci
pour
votre aide!


Dim x, i, c, d As Long
Sub main()
x = InputBox("Valeur du nombre : ")
c = cube(x)
d = factoriel(x)
MsgBox "Le cube de " + Str(x) + " est de " + Str(c)
MsgBox "Le Factoriel de " + Str(x) + " est de " + Str(d)
End Sub
Function cube(a As Integer) As Long
a = a * a * a
End Function
Function factoriel(f As Integer) As Long
f = 1
For i = 1 To x
f = f * i
Next i
End Function


Avatar
Patrice Henrio
et dans ce cas la sub main devient

Option explicit
Sub main()
dim x as integer
x = Cint(InputBox("Valeur du nombre : "))
MsgBox "Le cube de " & Str(x) & " est de " & Str(cube(x))
MsgBox "Le Factoriel de " & Str(x) & " est de " & Str(factoriel(x))
End Sub

Il est bon aussi de mettre l'option explicit au début qui permet de ne pas
se planter dans variables. Pas de variables globales sauf si indispensables.
Préférer des variables locales.


"Patrice Henrio" a écrit dans le message de
news:
Une fonction renvoie une valeur, tu utilises la variable comme valeur
retournée.

Voici comment il faut faire

Function cube(x as integer) as long
cube=x*x*x
end function

function factoriel(x as intger) as long
dim resultat as long, i as long
resultat=1
For i = 1 To x
resultat=resultat*i
Next i
factoriel=resultat
End Function




"Mohsine" a écrit dans le message de
news:
je m'entraine un peu sur VB 6 pour faire de la programmation. Quand
j'exécute, j'ai une erreur de compilation de type "Type d'argument byref
incompatible" (Il s'arrête sur "c=cube(x)". Que doi-je changer?? Merci
pour
votre aide!


Dim x, i, c, d As Long
Sub main()
x = InputBox("Valeur du nombre : ")
c = cube(x)
d = factoriel(x)
MsgBox "Le cube de " + Str(x) + " est de " + Str(c)
MsgBox "Le Factoriel de " + Str(x) + " est de " + Str(d)
End Sub
Function cube(a As Integer) As Long
a = a * a * a
End Function
Function factoriel(f As Integer) As Long
f = 1
For i = 1 To x
f = f * i
Next i
End Function






Avatar
Jean-marc
Mohsine wrote:
je m'entraine un peu sur VB 6 pour faire de la programmation. Quand
j'exécute, j'ai une erreur de compilation de type "Type d'argument
byref incompatible" (Il s'arrête sur "c=cube(x)". Que doi-je
changer?? Merci pour votre aide!


Dim x, i, c, d As Long
Sub main()
x = InputBox("Valeur du nombre : ")
c = cube(x)
d = factoriel(x)
MsgBox "Le cube de " + Str(x) + " est de " + Str(c)
MsgBox "Le Factoriel de " + Str(x) + " est de " + Str(d)
End Sub
Function cube(a As Integer) As Long
a = a * a * a
End Function
Function factoriel(f As Integer) As Long
f = 1
For i = 1 To x
f = f * i
Next i
End Function



En complément de ce qu'a dit Patrice, voici une grosse erreur:

Dim x, i, c, d As Long

Ceci ne fait PAS ce que tu crois !

En effet, avec cette déclaration, les variables i et c ne seront PAS
des long, mais des variants, ce qui est 1) mal, 2) incorrect.

La syntaxe correcte est
Dim x as Long, i as Long, d as Long
ou simplement

Dim i As long
Dim x as Long
Dim d as Long

Par convention, la variable "i" est toujours réservée pour faire une
variable de boucle.

On évite les globales.

On préfère Str$ à Str

Voici une version plus accadémique de ton programme:

Voir dans la FAQ la bonne utilisation de Byval et Byref
http://faq.vb.free.fr/index.php?question#


Option Explicit

Sub main()
Dim valeur As Long
Dim res_cube As Long
Dim res_fact As Long

' Saisie et conversion de la valeur
valeur = CDbl(InputBox("Valeur du nombre : "))

' Calcul des valeurs
res_cube = cube(valeur)
res_fact = factoriel(valeur)

' Affichage des résultats
MsgBox "Le cube de " & Str$(valeur) + " est de " & Str$(res_cube)
MsgBox "Le Factoriel de " + Str$(valeur) + " est de " + Str$(res_fact)

End Sub

Function cube(ByVal n As Long) As Long

cube = n * n * n

End Function

Function factoriel(ByVal n As Long) As Long
Dim i As Long
Dim res As Long

res = 1

For i = 1 To n
res = res * i
Next i

factoriel = res

End Function

N'hésite pas à consulter la FAQ du groupe, elle contient de
nombreux articles sur de très nombreux sujets:
http://faq.vb.free.fr/


Cordialement,


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Mohsine
Vous êtes des anges !!
Merci infiniment