Bonjour,
Je commence à douter que le code soit de votre création, je vous conseille donc très vivement de commencer par vous former un peu à l'utilisation VBA avant de vous lancer tête baissée (au risque de faire des bêtises et de ne pas être autonome sur votre propre travail).
On va commenter un peu plus en détails pour comprendre un peu ce qu'on fait...
For i = 1 To 32
If Me.Controls("TextBox" & i).Visible = True Then
ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)
End If
Next i
i est une variable, que l'on utilise ici au sein d'une boucle. Elle prend donc successivement les valeur 1, puis 2, puis 3 et ce jusqu'à 32 (voir 1ère ligne du code). Le passage à la valeur suivante ce fait grâce à l'instruction Next i (prochain i) qui clôture la boucle.
L'objectif de cette variable est de faire indirectement référence à chaque Textbox (= champ à renseigner dans le formulaire), puisqu'elles sont numérotées de 1 à 32. Si i = 1, Me.Controls("TextBox" & i) correspond par exemple au contenu de TextBox1.
Ce contenu est affecté à la plage qui lui correspond. Celle ci est définie par une feuille (ws dans cet extrait), et une cellule dont on donne l'indice de ligne (variable ligne) et l'indice de colonne (variable i + 1).
Si la TextBox est masquée (propriété .Visible = False) on ne fait rien. C'est l'objet de la structure If Condition(s) Then Instruction(s) End If.
L'objet de ma proposition précédente est d'ajouter une vérification supplémentaire. Vous parlez d'une TextBox dont le contenu est numérique et doit au préalable être converti comme tel. N'ayant toujours pas l'information de la TextBox concernée, je suis partie sur l'exemple de la TextBox1 (à adapter dans le code si besoin) :
If i = 1 Then ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i) * 1 Else ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)
Littéralement :
Si i = 1 Alors
Affecter directement le contenu de la TextBox dans sa colonne dédiée
On pourrait aussi écrire :
If i = 1 Then ws.Cells(ligne, 2) = TextBox1 * 1 Else ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)
Comme cette instruction dépend de la valeur de i, et doit donc être placée au sein de la boucle et non en dehors. De plus, elle se substitue à la ligne qui servait déjà à affecter la valeur de chaque TextBox dans la plage...
For i = 1 To 32
If Me.Controls("TextBox" & i).Visible = True Then
If i = 1 Then ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i) * 1 Else ws.Cells(ligne, i + 1) = Me.Controls("TextBox" & i)
End If
Next i