Variable requise. Impossible de l'affecter à cette expression
Jean-CharlesDucommun
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je fais du VBA de base et j'ai un problème pour lequel ce message d'erreur s'affiche "Variable requise. Impossible de l'affecter à cette expression."
J'ai un module de types, un module d'unités fonctionnelles et un module de test final (c'est la consigne de l'exercice qui veut tout en séparé).
mod_types:
Public Const TYPE_COURANT As Integer = 0
Public Const TYPE_EPARGNE As Integer = 1
Public Const INTERET_COURANT As Single = 0.01
Public Const INTERET_EPARGNE As Single = 0.025
Public Const IMPOT_ANTICIPE As Single = 0.33
Type compte
nom As String
typeCpte As Integer
solde As Single
End Type
Type client
nom As String
prenom As String
infoCpte() As compte
End Type
mod_unitesFonctionnelles:
'1)
Function calculMontantInteret(ByRef Cpte As compte) As Single
If Cpte.typeCpte = TYPE_COURANT Then
calculMontantInteret = Cpte.solde * INTERET_COURANT
Else: calculMontantInteret = Cpte.solde * INTERET_EPARGNE
End If
End Function
'2)
Function calculMontantImpotAnticipe(ByRef Cpte As compte) As Single
If Cpte.solde > 50 Then
calculMontantImpotAnticipe = calculMontantInteret(Cpte) * IMPOT_ANTICIPE
Else: calculMontantImpotAnticipe = 0
End If
End Function
'3)
Public Sub actualiserCompte(ByRef Cpte As compte)
Cpte.solde = Cpte.solde + calculMontantInteret(Cpte) - calculMontantImpotAnticipe(Cpte)
End Sub
'4)
Public Sub actualiserTousLesComptes(ByRef cl As client)
Dim indice As Integer
For i = 1 To UBound(cl.infoCpte)
actualiserCompte (cl.infoCpte(indice))
Next i
End Sub
'5)
Public Sub afficherCompte(ByRef Cpte As compte)
Dim affichage As String
affichage = "Nom : " & Cpte.nom & vbNewLine & "Solde : " & Cpte.solde & vbNewLine & " Type de compte : "
If (Cpte.typeCpte = TYPE_COURANT) Then
affichage = affichage & "Compte courant"
Else: affichage = affichage & "Compte épargne"
End If
MsgBox (affichage)
End Sub
'6)
Public Sub afficherComptes(ByRef c() As compte)
Dim indice As Integer
For indice = 1 To UBound(c)
afficherCompte (c(indice))
Next indice
End Sub
'7)
Public Sub afficherClient(ByRef cl As client)
Dim affiche As String
Dim indice As Integer
affiche = "Nom du client : " & cl.nom & vbNewLine & "Prénom du Client : " & cl.prenom
MsgBox (affiche)
afficherComptes (cl.infoCpte)
End Sub
mod_test:
Public Sub test()
Dim cl As client
cl.nom = "Gourmet"
cl.prenom = "Alexandre"
cl.infoCpte(1).nom = "Compte courant"
cl.infoCpte(1).typeCpte = 0 'compte courant
cl.infoCpte(1).solde = 39
cl.infoCpte(2).nom = "Compte épargne 1"
cl.infoCpte(2).typeCpte = 1 'compte épargne
cl.infoCpte(2).solde = 2033
cl.infoCpte(3).nom = "Compte épargne 2"
cl.infoCpte(3).typeCpte = 1 'compte épargne
cl.infoCpte(3).solde = 123456789
afficherClient (cl)
actualiserTousLesComptes (cl)
afficherClient (cl)
End Sub
Je fais du VBA de base et j'ai un problème pour lequel ce message d'erreur s'affiche "Variable requise. Impossible de l'affecter à cette expression."
J'ai un module de types, un module d'unités fonctionnelles et un module de test final (c'est la consigne de l'exercice qui veut tout en séparé).
mod_types:
Public Const TYPE_COURANT As Integer = 0
Public Const TYPE_EPARGNE As Integer = 1
Public Const INTERET_COURANT As Single = 0.01
Public Const INTERET_EPARGNE As Single = 0.025
Public Const IMPOT_ANTICIPE As Single = 0.33
Type compte
nom As String
typeCpte As Integer
solde As Single
End Type
Type client
nom As String
prenom As String
infoCpte() As compte
End Type
mod_unitesFonctionnelles:
'1)
Function calculMontantInteret(ByRef Cpte As compte) As Single
If Cpte.typeCpte = TYPE_COURANT Then
calculMontantInteret = Cpte.solde * INTERET_COURANT
Else: calculMontantInteret = Cpte.solde * INTERET_EPARGNE
End If
End Function
'2)
Function calculMontantImpotAnticipe(ByRef Cpte As compte) As Single
If Cpte.solde > 50 Then
calculMontantImpotAnticipe = calculMontantInteret(Cpte) * IMPOT_ANTICIPE
Else: calculMontantImpotAnticipe = 0
End If
End Function
'3)
Public Sub actualiserCompte(ByRef Cpte As compte)
Cpte.solde = Cpte.solde + calculMontantInteret(Cpte) - calculMontantImpotAnticipe(Cpte)
End Sub
'4)
Public Sub actualiserTousLesComptes(ByRef cl As client)
Dim indice As Integer
For i = 1 To UBound(cl.infoCpte)
actualiserCompte (cl.infoCpte(indice))
Next i
End Sub
'5)
Public Sub afficherCompte(ByRef Cpte As compte)
Dim affichage As String
affichage = "Nom : " & Cpte.nom & vbNewLine & "Solde : " & Cpte.solde & vbNewLine & " Type de compte : "
If (Cpte.typeCpte = TYPE_COURANT) Then
affichage = affichage & "Compte courant"
Else: affichage = affichage & "Compte épargne"
End If
MsgBox (affichage)
End Sub
'6)
Public Sub afficherComptes(ByRef c() As compte)
Dim indice As Integer
For indice = 1 To UBound(c)
afficherCompte (c(indice))
Next indice
End Sub
'7)
Public Sub afficherClient(ByRef cl As client)
Dim affiche As String
Dim indice As Integer
affiche = "Nom du client : " & cl.nom & vbNewLine & "Prénom du Client : " & cl.prenom
MsgBox (affiche)
afficherComptes (cl.infoCpte)
End Sub
mod_test:
Public Sub test()
Dim cl As client
cl.nom = "Gourmet"
cl.prenom = "Alexandre"
cl.infoCpte(1).nom = "Compte courant"
cl.infoCpte(1).typeCpte = 0 'compte courant
cl.infoCpte(1).solde = 39
cl.infoCpte(2).nom = "Compte épargne 1"
cl.infoCpte(2).typeCpte = 1 'compte épargne
cl.infoCpte(2).solde = 2033
cl.infoCpte(3).nom = "Compte épargne 2"
cl.infoCpte(3).typeCpte = 1 'compte épargne
cl.infoCpte(3).solde = 123456789
afficherClient (cl)
actualiserTousLesComptes (cl)
afficherClient (cl)
End Sub
A voir également:
- Variable requise. Impossible de l'affecter à cette expression
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Action requise sur le compte - Forum Réseaux sociaux
- Avoir du ping expression - Forum Réseau
- Définition de ping ✓ - Forum Réseau
- Microsoft expression encoder - Télécharger - Divers Utilitaires
2 réponses
Bonjour,
Prochaine fois précise sur quel ligne tu a l'erreur, ça sera plus facile à trouver.
A+
Prochaine fois précise sur quel ligne tu a l'erreur, ça sera plus facile à trouver.
Public Sub test()
Dim cl As Client
ReDim cl.infoCpte(3)
cl.nom = "Gourmet"
cl.prenom = "Alexandre"
....
A+
L'erreur se situe dans le module de test (intitulé mod_test) à la fin de la procédure, à la ligne "afficherClient (cl) ". Aurais-tu une autre idée ? Car ta première solution ne résout pas problème.
Merci d'avance