Insérer ligne tableau

10plan-journalier.xlsm (195.48 Ko)

Bonjour.

Étant débutant sur excel et vba, j'aurais une question concernant l'ajout d'une ligne sur un tableau via un formulaire.

Actuellement j'utilise ce code pour ajouter une ligne a mon tableau et le trier :

Private Sub CommandButton1_Click()
    derniereligne = Sheets("Liste Bénéficiaires").Range("A" & Sheets("Liste Bénéficiaires").Rows.Count).End(xlUp).Row
    Sheets("Liste Bénéficiaires").Rows(derniereligne + 1).Insert
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 1).Value = UserForm1.ComboBoxTitre.Value + " " + UserForm1.TextBox1.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 2).Value = UserForm1.ComboBox1.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 3).Value = UserForm1.TextBox2.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 4).Value = UserForm1.TextBox3.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 5).Value = UserForm1.TextBox4.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 6).Value = UserForm1.TextBox5.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 7).Value = UserForm1.TextBox6.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 8).Value = UserForm1.TextBox7.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 9).Value = UserForm1.TextBox8.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 10).Value = UserForm1.ComboBoxTitre.Value
    Sheets("Liste Bénéficiaires").Cells(derniereligne + 1, 11).Value = UserForm1.TextBox1.Value
    'ActiveSheet.Protect 'remet la protection de la feuille
    Sheets("Liste Bénéficiaires").Range("A1:K1000").Sort Key1:=Sheets("Liste Bénéficiaires").Range("A1"), Order1:=xlAscending
    UserForm2.Liste
    Unload Me
End Sub

et ce code pour effacer une ligne :

Private Sub CommandButton9_Click()
    If MsgBox("Voulez-vous vraiment supprimer ce bénéficaire ?", 36, "Confirmation de la suppression") = vbYes Then
        Dim i As Integer
        i = ListBox1.ListIndex
        Sheets("Liste Bénéficiaires").Rows(i + 1).Delete
        ListBox1.RemoveItem i
    End If
End Sub

Mon soucis c'est que les listes de validations de données qui sont lié a se tableau ne sont pas mis a jours dynamiquement lors de l'ajout d'une ligne mais quand j'efface une ligne via un boutton cela le prend en compte et me soustrait dynamiquement au listes de validations de données ?

Comment pourrais je faire pour ajouter une ligne dynamiquement a mon tableau qui puisse être pris en compte pour mes listes de validations de données ?

Merci d'avance et j’espère avoir étais assez clair dans la présentation de mon problème

Bonjour

Il n'est pas conseillé de se lancer dans VBA quand on est débutant en Excel : on n'automatise bien que ce qu'on connait bien...

Sans regarder ton code, il y a déjà un problème avec tes sources de listes

La première, Transport, fait appel à elle-même : c'est un non sens. Elle ne doivent pas contenir de ligne vide.

Les mettre plutôt côte à côte que l'une sous l'autre sinon c'est peu évolutif...

Renomme tes tableaux sinon c'est ingérable : Tableau1 ou Tableau4 n'ayant pas de signification...

Nomme aussi chaque colonne de ces tableaux hors titre. C'est ce nom qui servira des source pour les validations et non des références classiques

Utiliser en l'état la liste des bénéficiaires comme source de liste de validation n'est pas une bonne idée : d'une part, n'étant pas sous forme de tableau, elle n'est pas dynamique, d'autre part, tu as des doublons en colonne A (sans doute dus à ta tentative d'anonymisation...).

Met-là sous forme de tableau (avec les règles de nommage indiqués) et vérifie qu'il n'y a pas de doublons.

Bonjour,

Merci pour la réponse, je vais suivre tes conseil et faire ces modifications

RE

En plus si la liste des bénéficiaires remplie par le userform est sous forme de tableau structuré, Listobject en VBA, il est nettement plus facile à manipuler.

Salut Royalskunk, Chris,

pour te faire avancer quelque peu, du moins dans une certaine logique, voici quelques pistes VBA.

Ci-dessous le code de ton bouton 'AJOUTER' dans l'Userform1.

  • inutile d'insérer une ligne... vierge sous un tableau ;
  • travaille avec WITH (ne pas oublier le "." devant les membres de l'objet spécifié par WITH. Ex : .Cells...) et des noms de variables plus courts : plus lisible ;
  • tant qu'à faire, charge iRow de calculer la ligne exacte = + 1 ;
  • pour concaténer des variables, utilise "&" et non pas "+" ;
  • organise les noms de tes TextBox et/ou ComboBox en fonction du tableau devant recevoir les données.
TextBox et ComboBox ayant chacun la propriété TEXT, je leur ai donné à tous le nom 'Info1', 'Info2'...

- bien pensé (le mieux possible, du moins), une boucle suffit à charger le tableau.

Private Sub CommandButton1_Click()
    'ajouter une ligne en fin de tableau
    'ActiveSheet.Unprotect ' ôte la protection de la feuille
    With Worksheets("Liste Bénéficiaires")
        iRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
        '.Rows(derniereligne + 1).Insert
        .Cells(iRow, 1) = Me.Info10.Text & " " & Me.Info11.Text
        For x = 2 To 11
            .Cells(iRow, x) = Me.Controls("Info" & x).Text
        Next
        'ActiveSheet.Protect 'remet la protection de la feuille
        .Cells.Borders.LineStyle = xlLineStyleNone
        With .Range("A1:K" & .Range("A" & Rows.Count).End(xlUp).Row)
            .Sort Key1:=.Range("K1"), Order1:=xlAscending, Orientation:=xlTopToBottom
            .Borders.LineStyle = xlContinuous
        End With
    End With
    UserForm2.Liste
    Unload Me
End Sub

Bon travail!

A+

Oh un grand merci pour les pistes et le temps pris pour m'expliquer tous ça, je vais utilisé ton fichier joint comme base

Rechercher des sujets similaires à "inserer ligne tableau"