J'ai besoin sous VB de copier une ligne d'un tableau et l'inserer-coller juste au dessus.
Il s'agit d'un tableau avec en-têtes, créé à partir de la commande inserer>tableau.
Que ce soit sous VB ou manuellement, il semble impossible d'inserer une ligne si ce tableau est filtré sur une valeur de colonne.
Il faut d'abord remettre tous les filtres à zéro (sans pour autant supprimer le mode filtre) pour pouvoir copier une ligner et l'inserer-coller au dessus.
je ne sais pas pourquoi (?).
y a t il un moyen de le faire directement avec VB?
sinon, il faudrait d'abord que le programme mémorise les filtres et la zone visible, annule les filtres, réalise l'opération, puis remette les filtres et affiche à nouveau la zone visible initiale.
mais je ne sais pas si c'est possible.
Ce post fait suite à une de mes précédentes questions similaires, où je pensais que c'était le mode plan qui posait pb. Mais en fait c'est le mode filtre !
Sub Mise_en_Forme_TableauGB()
Dim NTable As ListObject
Set NTable = ActiveSheet.ListObjects(1) '("Tableau5")
'Inserer ligne au-dessus de l'item 5
'
debut = 5
fin = NTable.DataBodyRange.Rows.Count
NTable.ListRows.Add
NTable.DataBodyRange.Rows(debut & ":" & fin).Copy NTable.DataBodyRange.Cells(debut + 1, 1)
End Sub
Re : impossible inserer ligne dans un tableau filtré
Bonjour rafi93, Docmarti,
Ceci fonctionne même si la ligne à copier est masquée par le filtre :
Code:
Sub CopierLigne()
Dim n&
On Error Resume Next
n = InputBox("N° de ligne :", "Copier")
Rows(n).Insert
Rows(n).Resize(, 3) = Rows(n + 1).Resize(, 3).Value
End Sub
Fichier joint, testé seulement sur Excel 2003 (tableau classique).
Re : impossible inserer ligne dans un tableau filtré
Re,
Cette macro évite que les formats de la ligne de titres soit copiés si l'on insère une ligne 2.
Elle copie également les formules :
Code:
Sub CopierLigne()
Dim n&
On Error Resume Next
n = InputBox("N° de ligne :", "Copier")
Rows(n).Insert
Rows(Rows.Count - 1).Copy Rows(n) 'pour les formats
Rows(n).Resize(, 3) = Rows(n + 1).Resize(, 3).Formula
End Sub
Re : impossible inserer ligne dans un tableau filtré
Re,
Cela dit testez sur votre fichier cette macro :
Code:
Sub CopierLigne()
Dim n&, i%
On Error Resume Next
n = InputBox("N° de ligne :", "Copier")
Rows(n).Insert
For i = 1 To 7
Cells(n + 1, i).Copy Cells(n, i)
Next
End Sub
Cela doit fonctionner car les cellules sont copiées une par une.
Re : impossible inserer ligne dans un tableau filtré
en fait j'avais déjà posé cette même question juste avant (cf Discussion: "avec VB, dupliquer ligne en mode plan") mais en pensant que le pb venait du mode plan (car la ligne dupliquée "perdait" des cellules).
on m'a communiqué une solution qui semblait le corriger : en fait j'avais défiltré le tableau quand je l'ai testée...
puis le pb est réapparu, et je me suis aperçu que le probleme se posait
- lors de la conjonction plan+filtre !!
- et aussi si on selectionne toute la ligne de la feuille plutôt que la ligne du tableau
c'est très mysterieux
votre solution marche certainement, mais je souhaite éviter de dégroper pour la jouer, car je ne retrouve plus mon affichage initial ensuite; peut etre y a t il une façon de dégrouper et regrouper à l'identique avec la macro (mémorisation du plan) ?
Re : impossible inserer ligne dans un tableau filtré
ok ça marche
maintenant, il va falloir que j'essaie de réecrire cette macro pour un "tableau" qui peut être de largeur quelconque et démarrer ailleurs qu'en A1... c'est pas gagné
bonne soirée
Re : impossible inserer ligne dans un tableau filtré
Re,
Cela évite de s'embêter à traiter l'InputBox, c'est pour le cas où l'on entre des valeurs qui ne sont pas des numéros de lignes (des lettres, des nombres décimaux...).