0
votes

Ajout de chaque valeur d'un tableau à un listObject comme nouvelle ligne

J'essaie d'élargir mes connaissances de VBA avec simplement tester des bits de code étrange et déconstruire comment cela fonctionne.

J'essaie d'aller mieux à utiliser des tableaux et de les comprendre un peu plus, comme je pense que j'aurai beaucoup d'utilité pratique pour eux, mais je suis maintenant coincé lorsque vous essayez de l'utiliser conjointement avec un ListObject. P>

J'ai créé la macro ci-dessous. Il remplit avec succès la matrice, puis met le contenu dans une feuille de calcul. P>

Cependant, le problème que j'ai d'avoir est que je souhaite ajouter des valeurs à un tableau, puis ajouter ces valeurs dans une table (objets de liste) tout en conservant les données existantes là-bas. Pour le moment, cela ajoute simplement les données au sommet du tableau et remplace tout contenu existant. J'ai essayé d'utiliser de nombreuses variantes d'ajout d'une ligne de liste qui fonctionne, mais cela ne met que la première valeur dans le tableau dans la table au lieu de tout le monde. P>

Je veux créer une nouvelle ligne , Ajoutez les données, pour chaque pièce de données définissez également une autre valeur pour une colonne de cette ligne, puis continuez. P>

Par exemple, je souhaite que le code effectue les éléments suivants: P>

Sub ArrayExercise_3()
Dim myArray(1 To 5) As Integer
Dim i As Integer
Dim arrTable As ListObject
Dim arrRow As ListRow

Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7")
Set arrRow = arrTable.ListRows.Add

myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50

For i = 1 To UBound(myArray)
    arrTable.DataBodyRange.Cells(i, 1) = myArray(i)
    arrTable.DataBodyRange.Cells(i, 2) = "TEST"
Next i

End Sub


0 commentaires

4 Réponses :


0
votes

Vous pouvez le faire ainsi. Vous devez ajouter une nouvelle ligne pour chaque élément de tableau, alors mettez-le à l'intérieur de la boucle. Je soupçonne que vous pouvez le faire sans une boucle.

Sub ArrayExercise_3()
Dim myArray(1 To 5) As Integer
Dim i As Integer
Dim arrTable As ListObject
Dim arrRow As ListRow

Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7")

myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50

For i = 1 To UBound(myArray)
    arrTable.ListRows.Add
    With arrTable.DataBodyRange
        .Cells(.Rows.Count, 1).Value = myArray(i)
        .Cells(.Rows.Count, 2) = "TEST"
    End With
Next i

End Sub


0 commentaires

0
votes

Vous devez ajouter des lignes à l'intérieur de votre boucle, comme ceci: XXX


0 commentaires

0
votes

Tout d'abord, vous devriez déplacer l'expansion de la liste ListObject à l'intérieur de la boucle, de sorte qu'une nouvelle ligne est insérée pour chaque élément de tableau.

second, l'indexation de la matrice et de la liste ListObject est différente. P >

troisième, si vous écrivez ubound, il vaut mieux écrire LBound. P>

Sub ArrayExercise_3()
    Dim myArray(1 To 5) As Integer
    Dim i As Integer
    Dim arrTable As ListObject
    Dim arrRow As ListRow

    Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7")

    myArray(1) = 10
    myArray(2) = 20
    myArray(3) = 30
    myArray(4) = 40
    myArray(5) = 50

    For i = LBound(myArray) To UBound(myArray)
        Set arrRow = arrTable.ListRows.Add
        arrTable.DataBodyRange.Cells(arrTable.DataBodyRange.Rows.Count, 1).Value = myArray(i)
        arrTable.DataBodyRange.Cells(arrTable.DataBodyRange.Rows.Count, 2).Value = "TEST"
    Next i

End Sub


0 commentaires

2
votes

J'évite d'utiliser listObject.databodyRange lors de l'ajout de lignes. La table n'a pas de lignes alors listObject.databodyRange = rien . C'est beaucoup plus simple d'utiliser listObject.listrows.add.range qui retournera toujours un objet de plage. xxx


0 commentaires