Incompatibilité d'objet VBA

Fermé
ThibautTib Messages postés 3 Date d'inscription vendredi 13 juin 2014 Statut Membre Dernière intervention 13 juin 2014 - 13 juin 2014 à 10:48
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 13 juin 2014 à 14:53
Bonjour à tous

Je me permets de me présenter comme je suis nouveau sur ce forum. Je m'appelle Thibaut et suis étudiant en Finance à l'Edhec. Je me suis mis il n'y a pas longtemps à la programmation sous VBA.

J'ai créer un programme qui consiste à insérer le prix et la quantité d'une action côtée dans ma feuille excel depuis un userform.
Néanmoins, lorsque je lance ma macro il y a toujours un message d'erreur du type "incompatibilité de type", erreur 13.
Celle-ci se produit lorsque je donne un nom à une textbox.
De plus, lorsque je veux mettre cette valeur dans une cellule, il ya une autre erreur du type "Erreur définie par l'application ou par l'objet.
Je ne sais pas comment éradiquer ces erreurs, pourriez-vous m'aider?

Voici le code (je n'aimerais pas complètement le modifier pour résoudre mes problèmes):

/VBA
Dim securities(5) As String
Dim quantity As Double
Dim price As Double
Dim title As String

Sub actions()

For i = 1 To 5
securities(i) = Cells(1 + i, 1)
Next i

End Sub

Sub fill_form()

With UserForm1
.ComboBox1.Clear
For i = 1 To 5
.ComboBox1.AddItem securities(i)
Next i
End With

End Sub

Sub compter()

With UserForm1
quantity = .TextBox1.Value -------> erreur 113
price = .TextBox2.Value
title = .ComboBox1.Value
End With

Dim line As Integer
For i = 1 To 5
If securities(i) = title Then
line = i + 1
End If
Next i

End Sub

Sub remettre()

Cells(line, 2) = quantity ----------> erreur 1004
Cells(line, 3) = price

End Sub

Sub display()

actions
fill_form
UserForm1.Show
If UserForm1.Tag = "Userform1_Cancel" Then
Exit Sub
End If
compter
remettre

End Sub
/VBA



5 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
13 juin 2014 à 13:39
Bonjour,

Tu as défini des variables avec un type (ex
Dim quantity As Double
). Les saisies dans un TextBox sont considérées comme des chaîne de caractères. Il faut donc convertir ce qui est saisie dans le TextBox dans le type de la variable qui reçoit son contenu.

quantity = CDbl(.TextBox1.Value)

Attention de bien taper un point et non une virgule pour la décimale.

Pour l'erreur erreur 1004, la variable line n'est pas initialisée dans la procédure. La ligne 0 n'existe pas et provoque une erreur.

Voir ici pour la portée des variables dans un code.

0
ThibautTib Messages postés 3 Date d'inscription vendredi 13 juin 2014 Statut Membre Dernière intervention 13 juin 2014
13 juin 2014 à 14:08
Merci Polux31 pour ta réponse

Je comprends bien le fait qu'il faille passer du texte à des nombres dans la textbox et je comprends aussi la fonction cdbl mais impossible, même après avoir ajouté cette fonction j'ai toujours la même erreur.
De plus, j'ai bien ajouté line=0 mais j'ai également l'autre erreur. Mais je me demande si le problème ne vient pas aussi du fait que la ligne line=1 n'existe pas également

Je fais pas mal de recherches sur internet mais je n'arrive pas à en trouver qui sont liés à ce problème de textbox.

Je mets le code modifié au cas où:
Dim securities(5) As String
Dim quantity As Double
Dim price As Double
Dim title As String

Sub actions()

For i = 1 To 5
securities(i) = Cells(1 + i, 1)
Next i

End Sub

Sub fill_form()

With UserForm1
.ComboBox1.Clear
For i = 1 To 5
.ComboBox1.AddItem securities(i)
Next i
End With

End Sub

Sub compter()

With UserForm1
quantity = CDbl(.TextBox1.Value)
price = CDbl(.TextBox2.Value)
title = .ComboBox1.Value
End With

Dim line As Integer
line = 0
For i = 1 To 5
If securities(i) = title Then
line = i + 1
End If
Next i

End Sub

Sub remettre()

Cells(line, 2) = quantity
Cells(line, 3) = price

End Sub

Sub display()

actions
fill_form
UserForm1.Show
If UserForm1.Tag = "UserForm1_Cancel" Then
Exit Sub
End If
compter
remettre

End Sub
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 13/06/2014 à 14:44
Bonjour,

une fois l'UF fermee, la valeur des objets n'est plus accessible elles sont egal a "": chaine vide
0
ThibautTib Messages postés 3 Date d'inscription vendredi 13 juin 2014 Statut Membre Dernière intervention 13 juin 2014
13 juin 2014 à 14:49
Je ne comprends pas car mon programme marche si:

- Dim line as integer est défini tout en haut avec toutes les variables et non dans une de mes procédures
(Est-ce que cela veut dire que lors de mes premiers essais, la variable ligne n'était reconnue que dans la procédure "compter"?)

De plus, malgré tes conseils et après avoir ajouté la fonction cdbl, j'ai toujours un message d'erreur d'incompatibilité, même si mon programme marche quand même.
D'ailleurs j'ai encore le message '1004' d'erreur aussi mais lorsque je clique sur fin et que je lance mon programme, il marche.

Quelqu'un peut il m'aider à comprendre pourquoi ces erreurs sont toujours là?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
13 juin 2014 à 14:53
Re,

lancez votre programme, des qu'il y a une erreur, clic sur debugage, si le programme s'arret sur

quantity = CDbl(.TextBox1.Value) 

passez le curseur de la souris sur TextBox1 et vous aurez le contenu de la textbox, le cas present ce sera ""
0