Incompatibilité de type

Résolu
Bonjour à tous,

Je cherche à faire la somme de textbox et d'afficher cette somme dans un label :

Private Sub TextBox5_Change()

Label17 = CInt(TextBox4.Value) + CInt(TextBox5.Value) + CInt(TextBox6.Value) + CInt(TextBox7.Value) + CInt(TextBox8.Value) + CInt(TextBox10.Value) + CInt(TextBox11.Value) + CInt(TextBox12.Value) + CInt(TextBox13.Value)

End Sub


VBA m'affiche une incompatibilité de type que je ne sais résoudre...

Pouvez vous m'aider ?

Merci beaucoup,

DGVDR

2 réponses

  1. Modérateur
    Re-Bonjour,

    Décidément on ne se quitte plus...

    Aurais-tu, par le plus grand des hasards, des nombres décimaux à saisir dans tes textbox???

    Si oui, remplace CInt par CDbl...
    1. En effet, tu m'aides beaucoup :)

      Et bien, oui ça peut arriver... Je vais donc remplacer par CDbl

      Cependant lors de mes tests c'est au chargement de l'UF que ça pose problème, les textbox sont alors vides...

      Après remplacement de CInt par CDbl, l'UF se charge mais lorsque je j'écris dans une textbox, on retrouve mon problème cité plus haut ...

      Merci,

      DGVDR
    2. Modérateur
      @DGVDRTu nous as mis plus haut le code de l'événement Change() de ton textbox5.
      Pourquoi faire le total à chaque caractère saisi dans ce textbox?
      Est ce la même chose dans les événements Change() de tous tes textbox?
      Pourquoi ne pas avoir mis un bouton de commande pour calculer ce total?
    3. Je saisi dans ces textbox des %ages, la somme de ces %ages devant atteindre 100%, calculer à chaque incrémentation de textbox me permet de vérifier ou j'en suis vis à vis du %age global.

      Oui c'est la même chose dans toutes les textbox.

      J'aurais en effet pu mettre un bouton, mais je trouvais ça plus simple avec l'événement ()Change, ceci évitant de recliquer sur un bouton...
  2. Modérateur
    J'ai maintenant compris ce que tu voulais faire.

    Regarde ce code :
    Private Sub TextBox3_Change()
    Label1 = SommeTextBox(3, 6)
    End Sub
    Private Sub TextBox4_Change()
    Label1 = SommeTextBox(3, 6)
    End Sub
    Private Sub TextBox5_Change()
    Label1 = SommeTextBox(3, 6)
    End Sub
    Private Sub TextBox6_Change()
    Label1 = SommeTextBox(3, 6)
    End Sub
    
    Function SommeTextBox(IndicDeb As Integer, IndicFin As Integer) As Double
    Dim i As Integer
    
    For i = IndicDeb To IndicFin
        If Me.Controls("TextBox" & i) <> "" Then SommeTextBox = SommeTextBox + Val(Me.Controls("TextBox" & i))
    Next i
    End Function 


    Nota : Ce code n'est fonctionnel que si les numéros des taxtbox que tu veux sommer se suivent. Dans mon exemple, du textbox3 au 6. Dans le cas contraire, dis le, il y a également une solution...
    1. Mes Textbox vont de la 4 à la 13... sans Textbox9 (je ne sais pas pourquoi ni ou elle est...!)

      Merci beaucoup pour ton aide !

      DGVDR
    2. Modérateur
      @DGVDRPour une seule, on ne va rien changer de fondamental, mais juste ajouter un test :
      Function SommeTextBox(IndicDeb As Integer, IndicFin As Integer) As Double
      Dim i As Integer
      
      For i = IndicDeb To IndicFin
          If Me.Controls("TextBox" & i) <> "" And i <> 9 Then SommeTextBox = SommeTextBox + Val(Me.Controls("TextBox" & i))
      Next i
      End Function
    3. Pijaku,

      Il m'indique un "nom ambigu" pour ta fonction .

      As tu une idée?

      Merci,

      DGVDR
    4. Modérateur
      @DGVDREuh... Tu ne l'aurais pas copiée-collée deux fois par hasard?
    5. En effet...

      Je passe donc aux essais :

      - l'UF se charge
      - Lorsque je veux incrémenter ma première textbox j'ai un message d'erreur :

      Erreur d'éxecution '-2147024809(80070057)'
      Objet spécifié introuvable

      Ne devrait on pas définir IndicDeb et IndicFin ?