remplire des cellules à partir de textbox dans des colonnes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

auverland

XLDnaute Occasionnel
bonjour à tous,

Pouvez-vous me dire si il est possible de simplifier mon remplissage de colonne ?
J'ai beaucoup de textbox pour documenter un tableau
mon soucis c'est que j'écris pour chaque textbox la commande :
Range("b12") = TextBox1.Value
Range("b14") = TextBox2.Value
Range("b16") = TextBox3.Value
Range("b18") = TextBox4.Value
Range("b20") = TextBox5.Value.......
ce qui me fait beaucoup de ligne et en plus ça avance pas vide du coup

Y a t-il une solution pour que textbox y +10 se décale d'une colonne et éventuellement que textbox z + 2 descende de deux lignes ?

merci de votre aide
ci-joint un exemple de formulaire
 

Pièces jointes

Re : remplire des cellules à partir de textbox dans des colonnes

Bonsoir Auverland, Job, bonsoir le forum,

J'avoue que je n'ai pas, comme Job, vérifié la cohérence de la numérotation des textboxes. J'ai juste regardé le code fourni sans tester les solutions que je te propose... Donc, après avoir bien géré tes textboxes tu pourrais en 1ère solution :
Code:
Private Sub CommandButton1_Click()
Dim y As Byte 'déclare la variable y
Dim x As Byte 'déclare la variable y
Dim col As Byte 'déclare la variable col (COLonne)

y = 0 'définit la variable y
For x = 1 To 50 'boucle sur les 50 textboxes
    y = y + 1 'incrémente y
    col = x \ 10 + 2 'définit la colonne col (la partie entière de la division de x par 10 + 2)
    If x Mod 10 = 0 Then col = col - 1 'si le reste de la division de x par 10 est égal à zéro, redéfinit la colonne col
    'place dans l'onglet "Feuil1", dans la ligne (2 * y) + 10, dals la colonne col la valeur de la TextBox x
    Sheets("Feuil1").Cells((2 * y) + 10, col).Value = Me.Controls("TextBox" & x)
    If y = 10 Then y = 0 'si y est égal à 10 alors y devient égal à 0
Next x 'prochaine valeur de la boujcle
Unload Me 'vide et ferme l'UserForm
End Sub
ou alors, utiliser la propriété TAG de chaque textbox en lui attribuant l'adresse de la cellule qui devrait recevoir sa valeur. Ça donnerait en 2ème solution :
Code:
Private Sub CommandButton1_Click()
For x = 1 To 50 'boucle sur les 30 textboxes
    'place dans l'onglet "Feuil1" dans la cellule dont l'adresse est inscrite dans la propriéte TAG de la Textbox la valeur de la TextBox
    Sheets("Feuil1").Range(Me.Controls("TextBox" & x).Tag).Value = Me.Controls("TextBox" & x).Value
Next x 'prochaine valeur de la boucle
Unload Me 'vide et ferme l'UserForm
End Sub
 
Re : remplire des cellules à partir de textbox dans des colonnes

Merci beaucoup Robert
Je débute et je ne connaissais pas du tout cette propriété avec Tag que je vais utiliser
Ton premier code m'éclaire bien sur la logique à suivre et vas certainement m'inspirer pour évoluer (merci beaucoup aussi pour les commentaires dans les boucles car il simplifie bien la lecture pour les débutant comme moi
 
Re : remplire des cellules à partir de textbox dans des colonnes

Bonjour auverland, hello Robert,

Dans le fichier joint les TextBoxes sont à leur bonne place, leur numérotation est maintenant cohérente.

Alors le code du bouton VALIDER de l'UserForm est très simple :

Code:
Private Sub CommandButton1_Click()
Dim i As Byte
For i = 0 To 49
  [B12].Offset(2 * (i Mod 10), Int(i / 10)) = Controls("TextBox" & i + 1)
Next
Unload Me
End Sub
A+
 

Pièces jointes

Re : remplire des cellules à partir de textbox dans des colonnes

Re,

Bien entendu on peut initialiser les TextBoxes à l'ouverture de l'UserForm :

Code:
Private Sub UserForm_Initialize()
Dim i As Byte
For i = 0 To 49
  Controls("TextBox" & i + 1) = [B12].Offset(2 * (i Mod 10), Int(i / 10))
Next
End Sub
Fichier (2).

A+
 

Pièces jointes

Re : remplire des cellules à partir de textbox dans des colonnes

Re,

Pour le traitement des formats "Date", "Code postal" et "Numéro de téléphone" :

Code:
Private Sub CommandButton1_Click()
Dim i As Byte, v
For i = 0 To 49
  v = Controls("TextBox" & i + 1).Value
  If i Mod 10 = 9 And IsDate(v) Then v = CDate(v)
  [B12].Offset(2 * (i Mod 10), Int(i / 10)) = v
Next
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim i As Byte
For i = 0 To 49
  With Controls("TextBox" & i + 1)
    .Value = [B12].Offset(2 * (i Mod 10), Int(i / 10))
    If i Mod 10 = 4 Then .Value = Format(.Value, "00000") 'code postal
    If i Mod 10 = 6 Or i Mod 10 = 7 Then .Value = Format(.Value, "0000000000")
  End With
Next
End Sub
Fichier (3).

A+
 

Pièces jointes

Dernière édition:
Re : remplire des cellules à partir de textbox dans des colonnes

Re,

Pour finir, puisqu'il y a un MultiPage avec 2 pages :

Code:
Private Sub CommandButton1_Click()
Dim deb As Byte, i As Byte, v
deb = 50 * MultiPage1.Value
For i = deb To deb + 49
  v = Controls("TextBox" & i + 1).Value
  If i Mod 10 = 9 And IsDate(v) Then v = CDate(v)
  [B12].Offset(2 * (i Mod 10), Int((i - deb) / 10)) = v
Next
Unload Me
End Sub

Private Sub Multipage1_Change()
Dim deb As Byte, i As Byte
Sheets("Page" & MultiPage1.Value + 1).Activate 'feuille concernée
deb = 50 * MultiPage1.Value
For i = deb To deb + 49
  With Controls("TextBox" & i + 1)
    .Value = [B12].Offset(2 * (i Mod 10), Int((i - deb) / 10))
    If i Mod 10 = 4 Then .Value = Format(.Value, "00000") 'code postal
    If i Mod 10 = 6 Or i Mod 10 = 7 Then .Value = Format(.Value, "0000000000")
  End With
Next
End Sub

Private Sub UserForm_Initialize()
MultiPage1.Value = Val(Replace(ActiveSheet.Name, "Page", "")) - 1
Multipage1_Change
End Sub
On aura ainsi fait le tour de cet UserForm.

Fichier (4).

A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
896
Retour