TextBox dans un tableau Excel

Saltimbanque77 Messages postés 4 Statut Membre -  
Saltimbanque77 Messages postés 4 Statut Membre -
Bonjour à tous,

J'ai consulter pas mal de forum sans succès à mon sujet.
J'utilise un userform pour ajouter des enregistrements à ma liste, mais comment inclure chaque ligne en vba dans le tableau ?
Voici le bout de code qui fonctionne actuellement (j'ai volontairement exclu les autres champs que celui du Nom, la mécanique est la même) :

Private Sub Validation()
Dim L As Integer
L = Sheets("Opérateurs").Range("A1048576").End(xlUp).Row + 1 'Placer le nouvel enregistrement à la première ligne non vide
If UserForm1.TextBox1.Value = "" Then 'Champs Nom obligatoire
s = MsgBox("Le champ : " & Label1 & " est obligatoire", vbCritical, "Erreur de saisie")
UserForm1.TextBox1.SetFocus
Exit Sub
End If
Sheets("Opérateurs").Range("A" & L).Value = UCase(TextBox1.Text) 'Attribution des colones
End Sub

Ci-joint, une image du résultat actuel.

J


Merci pour vos réponses,

1 réponse

  1. thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   723
     
    Bonjour,

    Il faut utiliser les propriétés et méthodes associées à ton objet Tableau.
    Si le nom de ton tableau est "tableau1" et se trouve dans la feuille Opérateurs, voici le code pour ajouter et remplir une ligne :

    With Sheets("Opérateurs").ListObjects("tableau1")
    'ajout d'une ligne vierge à la fin du tableau
    .ListRows.Add
    'indice dans la feuille, de la ligne correspondant à la première cellule vide du champ "Nom"
    i = .ListColumns("Nom").Range.Find("", SearchDirection:=xlNext).Row
    'indice relatif dans l'objet tableau1, de la ligne correspondant à la première cellule vide du champ "Nom"
    i = i - .HeaderRowRange.Row
    'remplissage lignes
    .ListColumns("Nom").DataBodyRange.Rows(i).Value = UCase(TextBox1.Text)
    .ListColumns("Prénom").DataBodyRange.Rows(i).Value = TextBox2.Value
    .ListColumns("Date de naissance").DataBodyRange.Rows(i).Value = TextBox3.Value
    .ListColumns("Téléphone").DataBodyRange.Rows(i).Value = TextBox4.Value
    .ListColumns("Courriel").DataBodyRange.Rows(i).Value = TextBox5.Value
    End With



    Pour obtenir le nombre de lignes du tableau

    With Sheets("Opérateurs").ListObjects("tableau1")
    'nombre de lignes du tableau
    nb_lignes = .ListRows.Count 
    End With
    0
    1. Saltimbanque77 Messages postés 4 Statut Membre 2
       
      Bonjour thev,

      Merci pour ta réponse.
      Après essai, j’obtiens un blocage à cette ligne :

      i = .ListColumns(inv_domaine).Range.Find("", SearchDirection:=xlNext).Row
      (Erreur "9" l'indice n'appartient pas à la sélection)

      N'étant pas suffisamment caler sur le sujet, je dois admettre que je n'ai pas saisie l'utilité du terme (inv_domaine).

      Merci pour tes lumières,

      Cordialement,
      0
      1. thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   723 > Saltimbanque77 Messages postés 4 Statut Membre
         
        Bonsoir,

        Erreur de transposition du code qui fonctionne dans une de mes applications que j'ai corrigée ultérieurement (voir rectification du code ci-dessus)
        i = .ListColumns("Nom").Range.Find("", SearchDirection:=xlNext).Row
        0
      2. Saltimbanque77 Messages postés 4 Statut Membre 2 > thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonjour thev,

        Ton correctif fonctionne parfaitement, un grand MERCI pour ton aide.

        Bien cordialement.
        0