XL 2013 Ajout de textboxes sur plusieurs lignes d'un tableau selon la parité de la textbox

Tubule

XLDnaute Nouveau
Bonjour,

Je cherche à ajouter des textbox issues d'un formulaire dans un tableau. Ces textbox sont numérotées, et je souhaiterais ajouter celles qui sont impaires dans une ligne d'un tableau et celles qui sont paires dans une autre ligne.
J'ai tenté ce code, inspiré de ce forum, mais celui -ci ne fonctionne pas:

VB:
Dim CTRL As Control
    Dim LO As ListObject
    Dim i As Integer, p As Integer
    Dim ligne As Long
    
   ' ligne = Me.Nom_Dossier.ListIndex + 2
    
    Set LO = Sheets("Feuil1").ListObjects("LO_test")
                
    'La variable i va successivement prendre les valeurs 1, 3, 5
With LO.ListRows.Add(AlwaysInsert:=True) 'Ajout d'une ligne dans les charges
    For i = 1 To 7 Step 2 'Juste les impairs
            For Each CTRL In Me.Controls("TextBox" & i) 'Ajout dans les cases du tableau des dates, selon le numéro du tag
                If Len(CTRL.Tag) Then
                    .Range(1, CLng(CTRL.Tag)) = CTRL.Value
                End If
            Next
    Next i
End With
    
    'For p = 2 To 8 'juste les pairs
            
    Me.Hide
    Unload Me
    
End Sub

J'obtiens le message suivant :"membre de méthode ou donnée introuvable" et ".ListIndex" est surligné. Je ne comprends pas ce qui se passe. Auriez-vous une idée ?
Le fichier est joint
Merci
 

Pièces jointes

  • Test_Textoboxes.xlsm
    25.9 KB · Affichages: 14

Tubule

XLDnaute Nouveau
Bonjour Dranreb,

Merci beaucoup pour votre réponse. Ainsi, j'ai donc remplacé le nom du label par le nom dd'une ComboBox et ça fonctionne :

VB:
ligne = Me.ComboBox1.ListIndex + 2

Après quelques petites corrections, je n'ai plus de messages d'erreur. Néanmoins, lorsque je remplis le formulaire, rien ne s'écrit dans les TextBox ! Je pense qu'il y a quelque chose qui cloche dans ce paragraphe, mais je ne comprends pas bien pourquoi :


Code:
With LO.ListRows.Add(AlwaysInsert:=True) 'Ajout d'une ligne dans les charges
    For i = 1 To 7 Step 2 'Juste les impairs donc 'La variable i va successivement prendre les valeurs 1, 3, 5
            
            For Each CTRL In Me.Controls 'Ajout dans les cases du tableau des dates, selon le numéro du tag
                If TypeName(CTRL) = "TextBox" & i And Len(CTRL.Tag) Then
                    .Range(ligne, CLng(CTRL.Tag)) = CTRL.Value
                End If
            Next
    Next i
End With

Lorsque je sélectionne un nom de dossier dans la ComboBox, on voit bien les noms apparaître, si je tape un nouveau nom de dossier, la ligne dasn le tableau s'ajout bien, mais rien n'apparaît dans le contenu du tableau !
Ca ne doit sûrement pas être grand chose mais bon ..

Auriez-vous une petite idée ?
Vous trouverez en pièce jointe le fichier corrigé.
Merci
 

Pièces jointes

  • Test_Textoboxes.xlsm
    27.5 KB · Affichages: 3

Tubule

XLDnaute Nouveau
Bonjour.
Remettez 1 au lieu de ligne
Remarque: je ne comprends pas trop With LO.ListRows.Add(AlwaysInsert:=True)
J'aurais mieux compris With LO.ListRows(ligne)
Je souhiate ajouter une ligne au tableau donc je pense qu'il faut garder Add.
J'ai modifié pour mettre 1, et ça fait la même chose. J'avais déjà essayé avant .. Mais ne fait, c'est plus logique de mettre ligne je trouve , car on ne va pas toujours ajouter à la ligne 1 !
 

Dranreb

XLDnaute Barbatruc
Et à l'inverse les valeurs des TextBox paires et impaires ne pourraient-elles pas être mises dans la même cellule avec un vbLf entre les deux ?
Je pense qu'on ne peut rien fusionner dans un Tableau.
Sinon, il vaudrait mieux qu'elles soient dans des colonnes différentes du tableau que sur plusieurs lignes.
 

Tubule

XLDnaute Nouveau
Je viens d'essayer ça mais ça ne fonctionne toujours pas :
VB:
With LO.ListRows.Add(AlwaysInsert:=True) 'Ajout d'une ligne dans les charges
    For i = 1 To 7 Step 2 'Juste les impairs donc 'La variable i va successivement prendre les valeurs 1, 3, 5
            
            For Each CTRL In Me.Controls 'Ajout dans les cases du tableau des dates, selon le numéro du tag
                If TypeName(CTRL) = "TextBox" And Len(CTRL.Tag) Then
                    Me.Controls("TextBox" & i).Value = LO.Range(1, CLng(CTRL.Tag)) = CTRL.Value
                End If
            Next
    Next i
End With
 

Tubule

XLDnaute Nouveau
Et à l'inverse les valeurs des TextBox paires et impaires ne pourraient-elles pas être mises dans la même cellule avec un vbLf entre les deux ?
Je pense qu'on ne peut rien fusionner dans un Tableau.
Sinon, il vaudrait mieux qu'elles soient dans des colonnes différentes du tableau que sur plusieurs lignes.
Impossible pour un VbLf car je vais tracer des graphiques ensuite.
Vous avez sûrement raison pour le tableau.
J'avais fait ça au début, mais pour mon graphique, ça m'arrangeait de mettre sur 2 lignes :(
 

Dranreb

XLDnaute Barbatruc
Vous pourriez alors essayer ça :
VB:
Option Explicit
Private LOtDos As ListObject, LOtVal As ListObject, LCou As Long, TVL()
Private Sub UserForm_Initialize()
   Set LOtDos = Feuil1.ListObjects("TabDos")
   Set LOtVal = Feuil1.ListObjects("TabVal")
   ComboBox1.List = LOtDos.DataBodyRange.Value
   End Sub
Private Sub ComboBox1_Change()
   Dim L As Long, C As Long
   If ComboBox1.MatchFound Then
      LCou = ComboBox1.ListIndex + 1
      TVL = LOtVal.ListRows(2 * LCou - 1).Range.Resize(2).Value
   Else
      LCou = 0
      ReDim TVL(1 To 1, 1 To 4)
      End If
   For L = 1 To 2: For C = 2 To 5
      Me("TextBox" & 2 * (C - 2) + L).Text = TVL(L, C)
      Next C, L
   End Sub
Private Sub Validation_Click() 'Bouton Valider
   Dim L As Long, C As Long, V, Rng As Range
   For L = 1 To 2: For C = 2 To 5
      V = Me("TextBox" & 2 * (C - 2) + L).Text
      If IsNumeric(V) Then TVL(L, C) = CDbl(V)
      Next C, L
   If LCou = 0 Then
      LOtDos.ListRows.Add(AlwaysInsert:=True).Range.Value = ComboBox1.Text
      ComboBox1.List = LOtDos.DataBodyRange.Value
      Set Rng = LOtVal.ListRows.Add(AlwaysInsert:=True).Range
      LOtVal.ListRows.Add AlwaysInsert:=True: Set Rng = Rng.Resize(2)
   Else
      Set Rng = LOtVal.ListRows(2 * LCou - 1).Resize(2)
      End If
   Rng.Value = TVL
   End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 723
Messages
2 081 932
Membres
101 844
dernier inscrit
pktla