Impossible d'insérer d'un tableau à un autre
Bonjour,
En voilà une bonne, Excel me dit qu'il ne peut pas insérer des lignes d'un tableau (Feuil2) dans un autre(Feuil1) "nous ne pouvons effectuer cette action cela impliquerait le déplacement de cellules de tableau de votre feuille de calcul" Dommage car c'est pile ce que je voulais faire.
Le contexte: J'ai 2 tableaux sur 2 feuilles et j'intègre une série de ligne (au nombre variable) de la feuil2 à la feuille 1. Le copié coller s'effectue à une place bien précise (selon N° de ligne)
Ce week-end, comme le temps est maussade je me suis dit que j'allais modernisé mon tableau et passer par Power Query pour simplifier mon process de création des 2 tableaux en question. jusqu'ici tout va bien.
Ce que je n'avais pas franchement anticipé c'est que la version "tableau" d'Excel ne semble pas permettre "d'insérer des données" issues d'un autre tableau. Cette petite ligne ne marche pas parceque je n'ai plus des données dans des cellules, j'ai un tableau (à cause de power query)
' Les insérer au bon endroit dans la feuille DSN
Sheets("feuille1").Range("A" & LigDSN).Insert Shift:=xlDown
Ma question c'est est ce qu'il est possible de faire "insérer les cellules copiés" dans un tableau Excel?! Je veux dire, sans avoir d'abord à insérer des lignes vides.
Sub IntégrationDansDSN()
Dim Col As Long, dLigS As Long, LigDSN As Long, Colone As Long, Coltwo As Long
' Avec la feuille de saisie
With Sheets("feuil2")
' Pour les colonnes de C=3 à F=6. Compléter D4 et E4
Colone = Range("D4").Value
Coltwo = Range("E4").Value
For Col = Colone To Coltwo
' Récupérer le numéro de ligne ou insérer
LigDSN = .Cells(9, Col)
' Dernière ligne du bloc à insérer
dLigS = .Cells(Rows.Count, Col).End(xlUp).Row
' Copier les lignes et les insérer
.Range(.Cells(11, Col), .Cells(dLigS, Col)).Copy
' Les insérer au bon endroit dans la feuille DSN
Sheets("feuil1").Range("A" & LigDSN).Insert Shift:=xlDown
Next Col
End With
End Sub
Par avance Merci
Sub CopierColler()
Range("Tableau1").Copy Range("Tableau2").ListObject.ListRows.Add.Range.Cells(1)
End Sub
comme ceci ?
bonsoir
comme ton fichier n'est absolument pas représentatif de ta demande
de ce que j'ai compris
si tu veux ajouter les lignes deton tableau2 en debut de liste du tableau1 ALORS!
il va te falloir ajouter autant de lignes en position (1)( le 1 c'est important!!!)
une fois que tu a tes lignes en debut de ton tableau1(qui sont vide pour l'instant) on va y ajouter tes lignes du tableau2
pour cela rien de plus simple on récupère tout le tableau2 (sans l'entête bien sur) dans une variable tableau
et on l'injecte dans la cells(1)du databodyrange resizée a la variable tableau ligne/colonne
Sub AjouteEnDebutDeListe()
Dim R1 As Range, R2 As Range, Lig&, tablo
Set R1 = Range("Tableau1")
Set R2 = Range("Tableau2")
tablo = R2.Value
For Lig = 1 To UBound(tablo): R1.ListObject.ListRows.Add (1): Next
Set R1 = Range("Tableau1")
R1.Cells(1).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
End Sub
si tu veux ajouter tes lignes du tableau2 a la fin du tableau1
la tu a besoins de presque rien il te suffit d'injecter la variable tableau dans la ligne vide en dessous le tableau1 (il se redimentionne tout seul)
Sub AjouteaLaSuiteDeListe()
Dim R1 As Range, R2 As Range, tablo
Set R1 = Range("Tableau1")
Set R2 = Range("Tableau2")
tablo = R2.Value
R1.Cells(R1.Rows.Count + 1,1).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
End Sub
Pour Info
certains feraient
set r1=feuil1.listobjects("Tableau1") 'obligé d'être sur la feulle parent de ce tableau
à la place de
set r1.range("Tableau1").listobject 'on peut être ou on veut
perso même si je travaile mon tableau en listobject je l'attaque d'abords par la collection Range et son nom!!!
tout simplement par ce que un name "Tableau1" ou "Tableau2" il ne peut y en avoir qu'un et ca me permet donc ne ne pas être obligé d'être sur la feuille contenant le tableau
et que range("Tableau1")
donne la même chose que feuil1.listobjects("Tableau1").databodyrange
voila tu sais tout
démonstration
Ajout en debut de liste
Démonstration en fin de liste
patricktoulon
Bon, je me rend bien compte que demander de l'aide sans le fichier c'est pas possible alors voici...ma petite usine
Le but de ce tableau: insérer des lignes spécifiques au milieu d'une base de donnée.
Etape 1: L'utilisateur fait un copier coller de données dans la première feuille
Etape 2: L'utilisateur va saisir les données à insérer. Je vais déterminer à quel N° de ligne il faut se placer pour insérer les données grace à PowerQuery.
Etape 3: Je nettoie les données à insérer (en enlevant les espaces) pour avoir mes lignes au propre en BlocsE2. Jusqu'ici tout fonctionne.
Etape 4: je saisie la colonne 3 c'est à dire 3 en D4 / ctrl Alt F5 / je clic sur le bouton Insérer / je saisis 4 en D4 / ctrl Alt F5 / insérer... je saisie 150/ctrl Alt F5 / Insérer, jusqu'à ce qu'il n'y ai plus de colonne.
Ok ça semble fastidieux dit comme ça mais vous n'imaginez pas à quel point c'est plus rapide que de faire tout cela ligne par ligne et manuellement. Et je n'ai pas trouvé de meilleur idée pour faire ça.
Aprés chaque insertion, les 2 requêtes Power Query doivent se mettre à jour pour calculer le nouveau numero de ligne ou je dois me positionner pour insérer la colonne suivante.
Comme je le disais, j'ai voulu utiliser PowerQuery pour l'étape 2 plutôt que pleins de feuilles avec pleins de formules. Je voulais le simplifier.
Je ne veux donc pas insérer mes lignes au début ou à la fin mais à une ligne bien spécifique!
Voila. J'ai hâte d'avoir vos remarques et suggestions.
Merci
quelle usine à gaz, c'est quoi l'objectif ?
L'objectif final est en lien avec un fichier qui est transmis chaque mois à l'administration sous forme de .txt et qui regroupes des données sociales.
Pour un individu il y a autour de 250 lignes par mois. Les outils informatiques réalisent ces fichiers mais gèrent très mal les régularisations. Globalement s'il y a une erreur il faut insérer manuellement des lignes correctives dans le fichier.
Si ça concerne 3 ans pour 50 individus avec dans le meilleur des cas 20 lignes de corrections ben tu peux insérer 36000 lignes avec tes petites mimines, sans te tromper et au bon endroit s'il vous plait sinon on recommence tout.
bonsoir
Je ne veux donc pas insérer mes lignes au début ou à la fin mais à une ligne bien spécifique!
et bien dans ma proposition un peu plus haut dans ce topic tu change le "1" pour la ligne ou tu veux commencer à insérer tes new line
voilà
Bonsoir et merci pour vos retours.
J'ai essayé d'adapter la macro proposée par PatrickT mais je ne suis pas un As sur le sujet. J'ai du faire erreur quelque part :-/
Bonsoir
Sub AjouteEnDebutDeListe()
Dim R1 As Range, R2 As Range, Lig&, tablo
Set R1 = Range("Tableau1")
Set R2 = Range("Tableau3_1")
tablo = R2.Value
LigDSN = .Cells(9, Col)' ca c'est quoi ce .cells il est de quelle range et a quoi ca te sert ?????
For Lig = LigDSN To UBound(tablo): R1.ListObject.ListRows.Add (1): Next
Set R1 = Range("Tableau1")
R1.Cells(1).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
End Sub
La question est claire
quelle ligne de quelle tableau va dans quel tableau et a partir de quelle ligne dans le tableau de destination ?????
et essaie d'être clair
Bonjour, finalement j'ai réussi à obtenir ce que je souhaitais en remplaçant les 1.
C'est top merci beaucoup