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
Et je ne comprend plus, j'ai tout essayé..
Ouvert à toute idées ou piste de recherche,
La bise,
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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).FormulaBonjour,
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,
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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 !