XL 2016 Ajouter une ligne en bas d'un tableau Excel [RESOLU]

  • Initiateur de la discussion Initiateur de la discussion troopers87
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

troopers87

XLDnaute Occasionnel
Bonjour à tous,

Ce sujet fait suite au sujet ouvert ici : https://www.excel-downloads.com/thr...-donnees-de-la-derniere-ligne.20017421/page-2 et qui avait quelque peu dévié.

Voici ma demande qui repose sur le fichier proposé par Si au sein de cette même discussion : comme nous utilisons l'outil Tableau Excel pour éviter de faire des références "manuelles" à une feuille, je souhaiterais ajouter des données sous une colonne du tableau en utilisant le nom de la colonne et non son numéro. Cela me permettrait, si la colonne change de numéro (par exemple si une nouvelle colonne est insérée entre deux), de ne pas avoir à modifier le code en conséquence.

Voici donc le code initial :

VB:
Private Sub CommandButton1_Click()
Dim L As Long
With [Tableau1]
    L = .Rows.Count + 1
    .Item(L, 1) = TextBox1
    .Item(L, 2) = CDbl(TextBox2)
End With
  Unload Me
End Sub

et je souhaiterais remplacer le "1" de :

VB:
.Item(L, 1) = TextBox1

Par quelque chose qui ressemble à cela :

VB:
.Item(L, [Tableau1[VILLES]]) = TextBox1

Merci d'avance pour votre aide ! 🙂
 

Pièces jointes

Bonjour.
Cela y ressemble-t-il assez à votre goût ? :
VB:
Private Sub CommandButton1_Click()
  Dim L As Long
  L = [Tableau1].ListObject.ListRows.Add.Index
  [Tableau1[PAYS]].Rows(L).Value = TextBox1.Text
  [Tableau1[DISTANCE]].Rows(L).Value = CDbl(TextBox2.Text)
  [Tableau1[CAPITALE]].Rows(L).Value = TextBox3.Text
  Unload Me
End Sub

Autre manière de faire qui minimise le nombre d'accès aux cellules (1 seul au lieu de 3) :
VB:
Private Sub CommandButton1_Click()
  Dim LOt As ListObject, TVL()
  Set LOt = [Tableau1].ListObject
  ReDim TVL(1 To 1, 1 To LOt.ListColumns.Count)
  TVL(1, LOt.ListColumns("PAYS").Index) = TextBox1.Text
  TVL(1, LOt.ListColumns("DISTANCE").Index) = CDbl(TextBox2.Text)
  TVL(1, LOt.ListColumns("CAPITALE").Index) = TextBox3.Text
  LOt.ListRows.Add.Range.Value = TVL
  Unload Me
End Sub
 
Dernière édition:
Bonjour Dranreb et merci beaucoup pour votre retour !

Votre première proposition me convient parfaitement : c'est génial !
Concernant la seconde, je ne comprends pas ce que vous entendez par "minimiser le nombre d'accès aux cellules" ?

Merci encore !
 
J'entends par la qu'il n'y a qu'un seul accès à la propriété Value d'un Range au lieu de 3, et que c'est donc 3 fois plus rapide.
(On peut en effet considérer en pratique que 10000 écritures de valeur d'une cellule prennent 10000 fois plus de temps qu'une seule écriture d'un tableau comme valeur d'une plage de 10000 cellules. C'est le nombre d'accès qui est pénalisant, pas le nombre de cellules de chaque accès)
 
D'accord ! J'ai compris, effectivement ça peut être moins consommateur de ressources sur des tableaux de grande envergure.

En revanche, j'ai un souci avec votre première proposition : si la ligne précédente n'est pas complète (par exemple, une donnée n'a pas été saisie : ce qui est tout à fait probable en pratique, je reçois des messages d'erreur. Auriez-vous une solution de contournement ? Est-il possible de s'appuyer sur la proposition initiale et de faire un "mix" des deux méthodes ?

Merci d'avance 🙂
 
C'est aussi moins saccadé si on écrit tout en une seule fois. Le rafraichissement de l'écran à chaque mise à jour n'est d’ailleurs peut être pas étranger à celle lenteur incompressible des propriétés Value des Range utilisées en écriture. Mais c'est long aussi en lecture.
Vous pouvez toujours, dans les 2 méthodes, faire If IsNumeric(TextBox2.Text) Then [Tableau1[DISTANCE]].Rows(L).Value
ou bien TVL(1, LOt.ListColumns("DISTANCE").Index)
= CDbl(TextBox2.Text)
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour