impossible inserer ligne dans un tableau filtré

rafi93

XLDnaute Occasionnel
bonsoir !

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 !

merci !!
 

job75

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

Re,

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é

Il suffisait de le demander, ce n'est guère difficile :

Code:
Sub CopierLigne()
Dim cel As Range, n&, i%
Set cel = [A1] '1ère cellule du tableau, à adapter
On Error Resume Next
n = InputBox("N° de ligne :", "Copier")
Rows(n).Insert
For i = cel.Column To Cells(cel.Row, Columns.Count).End(xlToLeft).Column
  Cells(n + 1, i).Copy Cells(n, i)
Next
End Sub
Bonne fin de soirée et A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

Bonjour Docmarti, le forum,

Bien sûr puiqu'on a vu qu'il fallait traiter les cellules une par une, il n'était guère difficile d'adapter votre macro du post #3.

Mais il n'y a vraiment aucun intérêt à utiliser ListObjects.

Il peut d'ailleurs y avoir plusieurs tableaux à traiter simultanément.

A+
 

job75

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

Re,

En utilisant le UsedRange de la feuille :

Code:
Sub CopierLigne()
Dim n&, i%
On Error Resume Next
n = InputBox("N° de ligne :", "Copier")
With ActiveSheet
  .Rows(n).Insert
  For i = .UsedRange.Column To .UsedRange.Column + .UsedRange.Columns.Count - 1
    .Cells(n + 1, i).Copy .Cells(n, i)
  Next
End With
End Sub
A+
 

Si...

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

salut

avec le tableau, où qu'il se trouve dans la feuille (à cause de l'évènement choisi dans l'exemple joint)
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal R As Range, Cancel As Boolean)
  If Intersect(R, [Tableau1].Columns(1)) Is Nothing Then Exit Sub
  Cancel = -1
  Dim Cf As Long 'n° dernière colonne du tableau
  Cf = R.Column + [Tableau1].Columns.Count
  Rows(R.Row).Insert
  R.Resize(1, Cf).Copy R(0, 1)
End Sub
Si... l'on veut aussi déplacer le tableau dans un autre onglet, sélectionner un élément du tableau et lancer la macro (dans un module standard)
Code:
Sub ajout()
  Dim R As Range, Cf As Long 'n° dernière colonne du tableau
  Set R = Cells(ActiveCell.Row, [Tableau1].Column)
  Cf = R.Column + [Tableau1].Columns.Count
  Rows(R.Row).Insert
  R.Resize(1, Cf).Copy R(0, 1)
End Sub
 

Pièces jointes

  • Insérer coller ligne d'un tableau.xlsm
    17.2 KB · Affichages: 29

job75

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

Re,

hello Si...,

C'est gentil d'intervenir mais tu n'as pas bien suivi le fil :rolleyes:

Il faut aussi pouvoir copier une ligne masquée par le filtre, donc bonjour le double-clic.

Par ailleurs, on l'a vu, la copie d'une plage de plusieurs cellule ne va pas avec le mode plan.

Bis repetita : il faut copier les cellules une par une.

A+
 

Docmarti

XLDnaute Occasionnel
Re : impossible inserer ligne dans un tableau filtré

Bonjour job75; Le forum.

Bien sûr puiqu'on a vu qu'il fallait traiter les cellules une par une, il n'était guère difficile d'adapter votre macro du post #3.

A+

Oui, c'est sûr. D'autant plus facile que j'avais publié un code semblable 3 jours plus tôt pour régler un problème identique.

Code:
For Each c In NTable.DataBodyRange.Range("A" & debut & ":C" & fin)
                 c.Interior.Color = NColor
Next

D'ailleurs je me demande pourquoi j'ai modifié mon post (No.3) car ce matin mon code original me semble fonctionner parfaitement.

Code:
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


Mais il n'y a vraiment aucun intérêt à utiliser ListObjects.

A+

C'est la question que je me pose également. Une utilité que j'y vois justement, c'est la possibilité d'insérer une ligne dans le tableau sans insérer en même temps une ligne entière sur la feuille.

Edit: Le post No.3 a été modifié et le classeur original a été rétabli.

Cordialement

Docmarti
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

re

Job, il est vrai que je ne traite pas totalement le sujet :eek: : flegme de créer un bouton, un userform (plus flexible avec les limites) je me suis contenté de donner des modèles de formulation (VBA) d’éléments d’un tableau (2010).

Ta dernière macro est valable tableau ou pas. Si on indique un N° de ligne hors tableau elle fonctionnera mais hors tableau.
 

job75

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

Re,

C'est la question que je me pose également. Une utilité que j'y vois justement, c'est la possibilité d'insérer une ligne dans le tableau sans insérer en même temps une ligne entière sur la feuille.i

Il est facile de s'apercevoir que si le tableau est filtré on ne peut qu'insérer une ligne entière.

C'est pour cette raison que ListObjects est totalement inutile.

PS : pour être cohérent, je vous conseille de remettre l'ancienne macro avec son fichier sur le post #3, d'annuler le post #19, et de mettre juste la nouvelle macro sur le post #24.

A+
 
Dernière édition:

Docmarti

XLDnaute Occasionnel
Re : impossible inserer ligne dans un tableau filtré

Mon post No.3 a été remodifié avec le code original qui ne copie pas les cellules une à la fois.

On peut y insérer, du moins chez moi sur Excel 2007, le nombre de lignes de tableau que l'on veut, mais une à la fois bien sûr.

Code:
Sub Mise_en_Forme_TableauGB3()
 
   Dim NTable As ListObject
    
   Set NTable = ActiveSheet.ListObjects(1) '("Tableau5")
     
   'Inserer 3 lignes au-dessus de l'item 5
   '
   For i = 1 To 3
                debut = 5
                
                fin = NTable.DataBodyRange.Rows.Count
                
                 NTable.ListRows.Add
                                  
                 NTable.DataBodyRange.Rows(debut & ":" & fin).Copy NTable.DataBodyRange.Cells(debut + 1, 1)
    Next
    
End Sub

Docmarti
 

job75

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

Re Docmarti,

J'ai testé votre macro sur le fichier du post #3.

Sur Excel 2010 elle fonctionne parfaitement, par contre il y a bug (c'est normal) sur Excel 2003 si le tableau est filtré.

Je révise mon jugement : l'utilisation de ListObjects et de la propriété DataBodyRange est tout à fait intéressante.

A+
 

rafi93

XLDnaute Occasionnel
Re : impossible inserer ligne dans un tableau filtré

bonjour Docmarti & Job75

je reviens après quelques jours d'absence
mais ça ne semble toujours pas fonctionner...
je joue le code du post 27 avec le fichier du post 3

- si colonnes groupées mais lignes non filtrées => ça marche

- mais si colonnes groupées et lignes filtrées (p.ex filtre sur colonne D "contient 5") => il rajoute une ligne blanche en bas du tableau, puis plantage du code sur la ligne juste avant le "next".

est ce different chez vous ?
 

job75

XLDnaute Barbatruc
Re : impossible inserer ligne dans un tableau filtré

Bonjour rafi93,

Sur Excel 2010 la macro de Docmarti du post #27 ne pose aucun problème.

Sur Excel 2007 je ne sais pas mais Docmarti semble l'avoir testée sur cette version.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 347
Messages
2 087 502
Membres
103 563
dernier inscrit
samyezzehar