Textbox / Formulaire / Incompatibilité de type "Erreur 13"
Résolu
Julien
-
Julien -
Julien -
Bonjour tout le monde,
Je débute sous VBA, j'ai commencé il y a quelques jours. Donc si mes questions peuvent vous paraitre simples je m'en excuse.
J'ai parcouru plusieurs forum sans trouver la solution à mon problème (malgré que plusieurs questions ressemblais à ce que je cherchais) donc je me permets de la poser ici.
Mon problème :
J'ai créé un formulaire "Notation"
Dans celui-ci j'ai des TextBox
Les TextBox de 1 à 16 font références à la valeur des cellules correspondantes dans un fichier excel (correspondance assurée par "numl")
Les textBox 17 à 32 devrait me permettre de mettre à jour les données en ajoutant la valeur correspondante.
Le problème de mon code est que quand je le lance j'ai une erreur d'incompatibilité de type.
Je soupçonne que c'est du au fait que j'associe le texte "TextBox" & "I" (qui est integer) Mais je n'ai aucune idée de comment le résoudre...
Exemple:
Cellule : M1 = 2
TextBox1 = 2
TextBox17 = 10
Actualisation (Assurer par le boutton4)
Cellule M1 = 12
TextBox1 = 12
TextBox17 = ""
PS : l'objet 'numl" me permet de retrouver la ligne de la cellule travaillé.
J'espère que je n'ai pas été trop vague.
J'espère que vous pourrez m'aider, n'hésitez pas à me demander des précisions.
Merci d'avance de votre aide précieuse!!
Je débute sous VBA, j'ai commencé il y a quelques jours. Donc si mes questions peuvent vous paraitre simples je m'en excuse.
J'ai parcouru plusieurs forum sans trouver la solution à mon problème (malgré que plusieurs questions ressemblais à ce que je cherchais) donc je me permets de la poser ici.
Mon problème :
J'ai créé un formulaire "Notation"
Dans celui-ci j'ai des TextBox
Les TextBox de 1 à 16 font références à la valeur des cellules correspondantes dans un fichier excel (correspondance assurée par "numl")
Les textBox 17 à 32 devrait me permettre de mettre à jour les données en ajoutant la valeur correspondante.
Le problème de mon code est que quand je le lance j'ai une erreur d'incompatibilité de type.
Je soupçonne que c'est du au fait que j'associe le texte "TextBox" & "I" (qui est integer) Mais je n'ai aucune idée de comment le résoudre...
Exemple:
Cellule : M1 = 2
TextBox1 = 2
TextBox17 = 10
Actualisation (Assurer par le boutton4)
Cellule M1 = 12
TextBox1 = 12
TextBox17 = ""
Private Sub CommandButton4_Click()
Dim c As Range
Dim numl
Dim a As Integer
Dim T As Integer
a = Worksheets(ActiveSheet.Name).Index
Set c = ActiveCell
numl = c.Offset(1, 0).Value
TextBox42 = ActiveCell.Value
TextBox41 = Sheets(a).Range("I" & 1).Value
For T = 17 To 32
If IsEmpty("TextBox" & T) = True Then
Sheets(3).Cells(T - 4 & numl).Value = CDbl(("TextBox" & ((T - 16))))
ElseIf IsEmpty("TextBox" & T) = False Then
Sheets(3).Cells(T - 4 & numl).Value = (CDbl(("TextBox" & T)) + CDbl(("TextBox" & (T - 16))))
End If
Next T
Unload Me
Notation.Show
PS : l'objet 'numl" me permet de retrouver la ligne de la cellule travaillé.
J'espère que je n'ai pas été trop vague.
J'espère que vous pourrez m'aider, n'hésitez pas à me demander des précisions.
Merci d'avance de votre aide précieuse!!
1 réponse
-
Bonjour,
Pour explorer les textbox, tu peux utiliser une boucle de ce type :Option Explicit Private Sub CommandButton1_Click() Dim Ctr As Control For Each Ctr In Me.Controls If TypeOf Ctr Is MSforms.TextBox Then If Ctr.Value = vbNullString Then MsgBox Ctr.Name & " est vide" ' à remplacer par tes instructions Else MsgBox Ctr.Name & " = " & Ctr.Value ' idem End If End If Next End Sub-
Bonjour Patrice33740,
D'abord je vous remercie pour votre première réponse. Cela m'a appris la fonction "Ctr" qui me servira à de multiples reprises. je vais approfondir mes connaissances pour cette fonction.
Votre code marche très bien, Ceci dit, j'ai besoin de tester la validité uniquement sur certaines "textbox" : de la 17 à la 32. Si jamais ces textbox sont vides, je souhaite les additionner à la texbox (N - 16) r ou plutôt à la cellule afficher sur cette textBox (N-16).
Exemple :
TextBox 17 = 12
TextBox (17-16) = Valeur de départ + 12
Cellule (columns(17-4), numl) = Valeur de départ +12
De manière générale je cherche à créer un objet qui reprend le numéro de la TextBox pour pouvoir y faire référence par la suite.
C'est ce que j'essaye de faire avec :
num = Mid(Ctr.Name, 8)
Donc j'ai écris avec ton script: Et ça marche plutôt pas mal dans l'ensemble. Pet être as tu des idée pour simplifier?
Private Sub CommandButton4_Click()
Dim c As Range
Dim numl As Integer
Dim num As Integer
Dim Ctr As Control
Dim a As Integer
a = Worksheets(ActiveSheet.Name).Index
Set c = ActiveCell
numl = c.Offset(1, 0).Value
Sheets(3).Select 'On sélectionne notre fichier source
For Each Ctr In Me.Controls
If TypeOf Ctr Is MSforms.TextBox Then
num = Mid(Ctr.Name, 8)
If num > 16 And num < 32 Then
If Ctr.Value = vbNullString Then
'MsgBox Ctr.Name & " est vide"
'Je ne veux rien faire
Else
'MsgBox Ctr.Name & " = " & Ctr.Value
Cells(numl, num - 4).Value = (Cells(numl, num - 4).Value + CDbl(Ctr.Value))
End If
Ctr.Value = ""
' Je nétoie le textbox
End If
End If
Next
Sheets(a).Select ' on resélectionne notre fiche de travail
Call UserForm_Initialize 'On re initialise le formulaire
End Sub
En tout cas MERCI beaucoup! Vous m'avez bien aidé!! -
ReBonjour Patrice,
Je me permet de vous posez une question quelque peu différente quoique complémentaire.
Lorsque j'ouvre mon formulaire en mode non-modal; j'aimerai que celui ci s'actualise à chaque fois que je sélectionne une nouvelle cellule dans mon classeur excel. Pensez vous que cela est possible?
Je pensais utiliser quelque chose du genre :
UserForm_KeyDown
UserForm_KeyUp
Mais je dois apprendre comment m'en servir.
Si vous avez une solution simple je suis preneur.
Encore MERCI. -
Ok je vous remercie encore une fois. Cela m'a vraiment aidé
Le sujet est OK.
Si vous voulez répondre à mon autre question :
https://forums.commentcamarche.net/forum/affich-32931751-actualisation-du-formulaire-lors-de-changement-de-cellule-active#newanswer
PS : la fonction Userform1.repaint ne marche pas vraiment car elle ne modifie pas le contenu des textBox
-