Je me lance dans les tableaux structurés

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
 

chris

XLDnaute Barbatruc
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
 

Pounet95

XLDnaute Occasionnel
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.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • Classeur1.xlsm
    17.2 KB · Affichages: 11
Dernière édition:

Pounet95

XLDnaute Occasionnel
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
 

Staple1600

XLDnaute Barbatruc
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 ?
 

Lolote83

XLDnaute Barbatruc
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
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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:

Staple1600

XLDnaute Barbatruc
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
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • Copie de OperTables-1.xlsm
    17.3 KB · Affichages: 9

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi