Insérer ligne tableau
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 Subet 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 SubMon 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.
- 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 SubBon 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