remplire des cellules à partir de textbox dans des colonnes

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

  • BDD CONTACTS.xlsm
    32.6 KB · Affichages: 44
  • BDD CONTACTS.xlsm
    32.6 KB · Affichages: 44
  • BDD CONTACTS.xlsm
    32.6 KB · Affichages: 46

Robert

XLDnaute Barbatruc
Repose en paix
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
 

auverland

XLDnaute Occasionnel
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
 

job75

XLDnaute Barbatruc
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

  • BDD CONTACTS(1).xls
    96.5 KB · Affichages: 33

job75

XLDnaute Barbatruc
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

  • BDD CONTACTS(2).xls
    96.5 KB · Affichages: 35

job75

XLDnaute Barbatruc
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

  • BDD CONTACTS(3).xls
    108.5 KB · Affichages: 37
Dernière édition:

job75

XLDnaute Barbatruc
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

  • BDD CONTACTS(4).xls
    114.5 KB · Affichages: 38
Dernière édition:

Discussions similaires