Incompatibilité d'objet VBA

ThibautTib Messages postés 3 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
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. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  2. ThibautTib Messages postés 3 Statut Membre
     
    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
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    une fois l'UF fermee, la valeur des objets n'est plus accessible elles sont egal a "": chaine vide
    0
  4. ThibautTib Messages postés 3 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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