Incompatibilité d'objet VBA

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

  1. 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.

    1. 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
      1. Bonjour,

        une fois l'UF fermee, la valeur des objets n'est plus accessible elles sont egal a "": chaine vide
        1. 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à?
          1. 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 ""