Textbox / Formulaire / Incompatibilité de type "Erreur 13" [Résolu/Fermé]

Signaler
-
 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 = ""

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

Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021
1 660
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
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

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.
Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021
1 660 > Julien
Bonsoir,

Je n'ai pas essayé mais je pense à :
Private Sub Worksheet_Change(ByVal Target As Range)
  UserForm1.Repaint
End Sub
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