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
Re

Chez moi
.ListRows.Add.Range.Cells(1, 1).Resize(1, 2) = Array(...)
ou
.ListRows.Add.Range.Cells(1, 5).Resize(1, 2) = Array(...)

fonctionne et le chiffre donne la position si on veut pas écrire à partir de la 1ère colonne... ceci sur un tableau de plus de 2 colonnes
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Moi, je suis juste passé pour simplement signaler qu'on peut directement utiliser
ListRows.Add.Range
Sans devoir faire ajouter plus de lignes de codes.
Dans mon exemple, cela fonctionne bien si le ListObject ne contient que deux colonnes (puisque Array(Label1, ComboBox1) contient [/b]deux[/b] éléments)
Fais le test sur un ListObject avec 4 colonnes
D'abord avec mon code
Puis avec mon code corrigé par job75.

Tu vois où le bât blesse?
;)
 

Staple1600

XLDnaute Barbatruc
Re

•>Pounet95
Le confinement me laissant du temps ;)
Testes cet exemple sur une feuille vierge
VB:
Sub Test()
Dim LO As ListObject
[A1:D1] = "=ADDRESS(ROW(),COLUMN(),4)"
[A2:D5] = "=(ROW()^COLUMN())*100"
[A1:D5] = [A1:D5].Value
Set LO = ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$5"), , xlYes)
MsgBox "test staple"
LO.ListRows.Add.Range = Array("Staple", 1600)
MsgBox "test job75"
LO.ListRows.Add.Range.Resize(, 2) = Array("Job", 75)
End Sub
 

chris

XLDnaute Barbatruc
RE

Comme je l'ai dit pour moi cela marche quel que soit le nombre de colonnes (testé sur un tableau de 6 colonnes
With [Tableau1].ListObject
.ListRows.Add.Range.Cells(1, 1).Resize(1, 2) = Array(...)
End With

Mais évidemment on ne remplit que 2 colonnes sur les 6 ici
 

patricktoulon

XLDnaute Barbatruc
salut le fil tout le monde les gens
RE

Comme je l'ai dit pour moi cela marche quel que soit le nombre de colonnes (testé sur un tableau de 6 colonnes
With [Tableau1].ListObject
.ListRows.Add.Range.Cells(1, 1).Resize(1, 2) = Array(...)
End With

Mais évidemment on ne remplit que 2 colonnes sur les 6 ici

utiliser le resize pour un listrows.range est à double tranchant
en effet a supposer que tu veuille changer la valeur d'une ligne sur la colonne 2 4 et 6
mais que tu veuille garder les valeur des 1 2 3 5
tu est obligé de stocker les valeurs du lisrows(x).range

de même que si tu ajoute une ligne mais que tu mette deux valeurs mais non contiguë veille a ce que les items vides figurent bien dans l'array ;) ;) ;)
 

chris

XLDnaute Barbatruc
RE

On parle de add, pas de modif ici, donc effectivement il faut adapter l'array et, éventuellement, le chiffre que j'ai indiqué en rouge au #19, à ce qu'on veut faire

Comme je l'ai déjà signalé, je trouve que travailler avec les noms des colonnes a le double avantage de donner de la lisibilité au code mais aussi de gérer le cas d'ajout ou déplacement de colonne, ce qui suppose
- soit de préciser chaque colonne au moment du remplissage
- soit d'analyser au préalable l'ordre des colonnes pour adapter l'Array
 

Staple1600

XLDnaute Barbatruc
Re

Exact, sans la modif de job75, tu te retrouves avec des #N/A
(ce qui est normal, puisqu'il y a dans l'exemple 4 colonnes pour un Array contenant deux éléments)
Merci Pounet95 et chris d'avoir fait le test. ;)
(au moins je n'ai pas pondu ce petit bout de code pour rien ;)
Et je me sens moins invisible et donc moins confiné ;)
 

Pounet95

XLDnaute Occasionnel
Bonjour,
Je reviens avec une nouvelle question :
Le tableau initial a les colonnes Gain_RngX au format monétaire Euro (€)
Quand je créé ( enfin j'essaie ! ), le format de ces colonnes change et quand j'utilise le menu de Power Query, le symbole monétaire est le $
Comment mettre le bon symbole ?
Y a-t-il un menu pour paramétrer ?
Merci de me dire
PS : il n'y a rien de primordial, c'est, pour le moment, de quoi m'occuper, comme beaucoup d'entre nous :(
 
Dernière édition:

Pounet95

XLDnaute Occasionnel
Capture.PNG
 

Discussions similaires

Statistiques des forums

Discussions
312 100
Messages
2 085 292
Membres
102 852
dernier inscrit
Badrcola26