Impossible d'insérer une ligne dans un tableau structuré

Bonjour à tous,

Je suis en plein stage pour concevoir un outil de gestion de projet. Chacun de mes projets sont stockés dans des tableaux structuré créé avec Excel (Insertion - Tableau). Je suis entrain de créer une macro qui permet d'exporter un projet déjà créé d'un fichier Excel à un autre. Les deux fichiers on exactement la même "configuration".

Dim SauvegardeRacine(1 To 3) As ListRow
Dim TabProcess As ListObject

Set TabProcess = Worksheets("Racine Projets CAF").ListObjects("ProcessTab") 'On initialise notre tableau (Envoyeur)
....
Set SauvegardeRacine(1) = TabProcess.ListRows(index) 'On récupère la ligne souhaité
....
Set TabProcess = NouveauFichier.Worksheets("Racine Projets CAF").ListObjects("ProcessTab") 'On re-initialise notre tableau (Receveur)

TabProcess.ListRows.Add 'On ajoute une nouvelle ligne pour être prêt à insérer les données.
Set TabProcess.ListRows(TabProcess.ListRows.Count) = SauvegardeRacine(1) '<-- Erreur ici "Propriété ou méthode non géré par cette méthode"

Pour expliquer un peu mon code, on définit plusieurs tableau sur les pages du fichier source, on stocke les lignes a copier dans un tableau de ligne.

Puis je souhaite remplacer la ligne vide par mes données dans le fichier qui reçoit les données.

Sur le papier ça devrait marcher mais non ...

Et je ne comprend plus, j'ai tout essayé..

Ouvert à toute idées ou piste de recherche,

La bise,

Bonjour,

ce devrait être plutôt ceci:

Dim SauvegardeRacine(1 To 3) As ListRow.Range
Dim TabProcess As ListObject

Set TabProcess = Worksheets("Racine Projets CAF").ListObjects("ProcessTab") 'On initialise notre tableau (Envoyeur)
....
Set SauvegardeRacine(1) = TabProcess.ListRows(Index).Range 'On récupère la ligne souhaitée
....
Set TabProcess = NouveauFichier.Worksheets("Racine Projets CAF").ListObjects("ProcessTab") 'On re-initialise notre tableau (Receveur)

TabProcess.ListRows.Add 'On ajoute une nouvelle ligne pour être prêt à insérer les données.
TabProcess.ListRows(TabProcess.ListRows.Count).Range.Formula = SauvegardeRacine(1).Formula

Bonjour,

Merci de joindre un fichier à ta demande.

Cdlt.

thev a écrit :

Bonjour,

ce devrait être plutôt ceci:

Dim SauvegardeRacine(1 To 3) As Range '<----- J'ai juste directement mis range ici
Dim TabProcess As ListObject

Set TabProcess = Worksheets("Racine Projets CAF").ListObjects("ProcessTab") 'On initialise notre tableau (Envoyeur)
....
Set SauvegardeRacine(1) = TabProcess.ListRows(Index).Range 'On récupère la ligne souhaitée
....
Set TabProcess = NouveauFichier.Worksheets("Racine Projets CAF").ListObjects("ProcessTab") 'On re-initialise notre tableau (Receveur)

TabProcess.ListRows.Add 'On ajoute une nouvelle ligne pour être prêt à insérer les données.
TabProcess.ListRows(TabProcess.ListRows.Count).Range.Formula = SauvegardeRacine(1).Formula

Bonjour Thev, j'ai testé ta solution sur l'un de mes transfert de ligne et ça a l'air de fonctionner ! Je te remercie chaleureusement pour m'avoir aider !

Par contre je peux te demander une explication ? Je pensais que les "Range" définissaient seulement "une cellule" alors comment se fait t-il que l'ensemble de la ligne puisse être stocké dans la variable? Et quel est le rôle de .formula?

Merci d'avance !


Jean-Eric a écrit :

Bonjour,

Merci de joindre un fichier à ta demande.

Cdlt.

Bonjour Jean-Eric,

Etant donné que je suis en stage, je préfère éviter de partager mon fichier même si j'en suis le créateur à 100%. C'est pour ça que j'ai envoyé un extrait le plus détaillé possible pour que mon problème soit facilement compréhensible.

Je m'excuse si cela ne t'a pas semblé clair,

Bonjour,

Range représente une plage de cellules , définie par la cellule en haut à gauche et la cellule en bas à droite.

Exemple :plage de A2 à D20 = Range("A2:D20"). Dans notre cas, la propriété "Range" peut représenter une ligne du tableau, une colonne du tableau ou l'ensemble des cellules du tableau.

Worksheets("Racine Projets CAF").ListObjects("ProcessTab") .Range 

: toutes les cellules du tableau

Worksheets("Racine Projets CAF").ListObjects("ProcessTab") .ListColumns(i).Range 

: les cellules de la colonne i du tableau

Worksheets("Racine Projets CAF").ListObjects("ProcessTab") .ListRows(i).Range 

: les cellules de la ligne i du tableau

.formula représente un tableau à 2 dimensions (ligne et colonne) contenant les constantes et les formules de la plage de cellules à laquelle se rapporte cette propriété.

thev a écrit :

Bonjour,

Range représente une plage de cellules , définie par la cellule en haut à gauche et la cellule en bas à droite.

Exemple :plage de A2 à D20 = Range("A2:D20"). Dans notre cas, la propriété "Range" peut représenter une ligne du tableau, une colonne du tableau ou l'ensemble des cellules du tableau.

Worksheets("Racine Projets CAF").ListObjects("ProcessTab") .Range 

: toutes les cellules du tableau

Worksheets("Racine Projets CAF").ListObjects("ProcessTab") .ListColumns(i).Range 

: les cellules de la colonne i du tableau

Worksheets("Racine Projets CAF").ListObjects("ProcessTab") .ListRows(i).Range 

: les cellules de la ligne i du tableau

.formula représente un tableau à 2 dimensions (ligne et colonne) contenant les constantes et les formules de la plage de cellules à laquelle se rapporte cette propriété.

Merci thev, tes explications sont très claires, je vais pouvoir alléger mon code ! Je te remercie encore et te souhaite une bonne journée !

--> Je vais valider le sujet !

Rechercher des sujets similaires à "impossible inserer ligne tableau structure"