Je me lance dans les tableaux structurés

  • Initiateur de la discussion Initiateur de la discussion Pounet95
  • 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 !

Pounet95

XLDnaute Occasionnel
Bonjour,
A la lecture de nombreux fils sur le forum, je découvre les tableaux structurés.
J'essaie donc d'adapter le code VBA qui me permet à partir de contrôles sur un USF de mettre à jour un tableau.
J'utilise le code joint, mais je trouve que l'utilisation de Cells(lig,1) par exemple n'est pas cohérente avec "l'esprit" du tableau structuré.
Y a-t-il une syntaxe plus appropriée pour le transfert des données USF vers la ligne ajoutée au tableau.

PS : j'ai téléchargé les tutos de P. Fauconnier mais n'ai pas trouvé mon bonheur pour cette adressage de cellules.
Il parle d'un opus 3 mais où est-il ?
Merci de me dire

VB:
Sub Test()
    'Enregistrer
    With Sheets("Feuil1").ListObjects("Tableau1")
        .ListRows.Add
        lig = .ListRows.Count + 1

        Cells(lig, 2) = ComboBox.Value
        Cells(lig, 1) = Label1.Caption
        Tri_Tableau1
    End With
End Sub
 
Bonjour

PowerQuery n'affiche pas un symbole monétaire mais un symbole de Type près du titre des colonnes : $ pour devise, 1.2 pour décimal, 123 pour entier, ABC pour texte, mini calendrier pour date, pendule pour heure, ou ces 2 derniers pour date/heure

Comme on peut le voir sur ton exemple, aucun symbole monétaire dans ta colonne Gain_Reg13

C'est seulement dans Excel que tu peux afficher le format voulu sous réserve qu'il soit cohérent avec le type de la colonne dans PowerQuery
 
Bonjour Chris,
Ouais ........ !
Pour paraphraser César : j'ai voulu, j'ai vu, je suis pas convaincu de l'utilité, pour mes besoins, de Power Query ou l'autre Power Pivot que j'ai aussi avec XL2016.
Merci de vos réponses.
Je vais fermer le fil qui commence à prendre de la place pour peu de chose.
J'attends demain pour voir d'autres avis.
 
Bonjour,

La demande initiale était ajouter un enregistrement

VB:
[tableau1].Rows([tableau1].Rows.Count + 1) = Array("Martin", "Lyon", #3/30/2020#, 4000)

Si on veut faire apparaitre les en-têtes

VB:
 enreg = [tableau1].Rows.Count + 1
 [tableau1[nom]].Rows(enreg) = "Martin" '
 [tableau1[ville]].Rows(enreg) = "Lyon"
 [tableau1[date]].Rows(enreg) = #3/30/2020#
 [tableau1[salaire]].Rows(enreg) = 4000

Boisgontier
 

Pièces jointes

Dernière édition:
Bonsoir,
Merci Jacques
Tout est dans la syntaxe en fait. Et avec ton code effectivement, ça fonctionne à condition d'envoyer le bon nombre d'informations mais pas plus, ni moins
Merci et bonne soirée
PS : cette syntaxe me plait bien en plus !

Capture.PNG


VB:
Sub ajoutEnreg()
 [tableau1].Rows([tableau1].Rows.Count + 1) = Array("Jean", "Lille", "", "")
 [tableau1].Rows([tableau1].Rows.Count + 1) = Array("Pierre", "Marseille")
 [tableau1].Rows([tableau1].Rows.Count + 1) = Array("Jean", 120, 200, "Christian", 5000)
 [tableau1].Rows([tableau1].Rows.Count + 1) = Array("Jean")
End Sub
 
Bonjour le fil

Quelqu'un peut me dire pourquoi (c) ne fonctionne pas ?
Merci.
VB:
Sub Tests()
Dim LO As ListObject
Set LO = ActiveSheet.ListObjects("Tableau1")
'a
LO.ListRows.Add.Range = Array(1, 2, 3, 4, 5) '(a) ok
'b
[Tableau1].Rows([Tableau1].Rows.Count + 1) = Array(5, 4, 3, 2, 1) '(b)=ok
'c
'[Tableau1].ListRows.Add.Range = Array(1, 2, 3, 4, 5) ' (c) Ne fonctionne pas
End Sub
PS: a et b font la même chose, non ?
 
Bonjour tout le monde.
Perso, pour inscrire une nouvelle ligne dans un tableau structuré, j'utilise la méthode de JB (post#34) à quelques différences près :
JB : enreg = [tableau1].Rows.Count + 1
Lolote83 : enreg = [Tableau1].ListObject.ListRows.Add.Index
La différence est visible lorsque le tableau structuré est initialement construit donc sans aucune donnée.
La formule de JB inscrit donc les données en ligne 2, laissant la première ligne vierge.
1586018984386.png

Ma façon de faire rempli directement dès la 1ere ligne
1586019039089.png

@+ Lolote83
 
Mais en relisant le message de JB (qui a été edité), il s'agit bien d'un ListObject, non ?

En fait, j'ai l'impression que la méthode JB utilise le process d'insertion de ligne par affectation.
Se placer sur la ligne qui suit le tableau structuré, dans une cellule, tapez une valeur. Le tableau structuré s'agrandit automatiquement d'une ligne...

D’ailleurs,
VB:
[tableau1].Rows([tableau1].Rows.Count + 2) = Array("Martin", "Lyon", #3/30/2020#, 4000)
ajoute les données deux lignes sous le tableau sans modifier le tableau structuré.

J'abonde donc dans le sens de job75 que je salue au passage.

Pour preuve, la fenêtre espion ci-dessous.
1586021500110.png
 
Dernière édition:
Re, Bonjour mapomme

Cette syntaxe indique bien la présence d'un ListObject, non ?
C'est ce que je voulais dire.
Mais OK [Tableau1] est un Range du ListObject Tableau1.
enreg = [tableau1].Rows.Count + 1
[tableau1[nom]].Rows(enreg) = "Martin" '
[tableau1[ville]].Rows(enreg) = "Lyon"

[tableau1[date]].Rows(enreg) = #3/30/2020#
[tableau1[salaire]].Rows(enreg) = 4000
 
Bonsoir,


Opérations courantes sur les tableaux structurés

Sans titre.png


VB:
Sub SuppressionLigneTableau()
  n = 1
  If [tableau1].Item(n, 1) <> "" Then [tableau1].Rows(n).delete
End Sub


Sub InsèreLigneTableau()
  [tableau1].Rows(1).Insert
End Sub

Sub AjoutFinTableau()
  If [tableau1].Item(1, 1) <> "" Then n = [tableau1].Rows.Count + 1 Else n = 1
  [tableau1[nom]].Item(n, 1) = "xxxx"
End Sub

Sub VideTableau()
   If [tableau1].Item(1, 1) <> "" Then [tableau1].delete
End Sub


Boisgontier
 

Pièces jointes

- 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