Aide SVP pour un débutant

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice Henrio
Le #15404351
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" 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


Patrice Henrio
Le #15404341
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" 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" 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






Jean-marc
Le #15404331
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/
Mohsine
Le #15404311
Vous êtes des anges !!
Merci infiniment
Publicité
Poster une réponse
Anonyme