Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Copier par VBA la ligne filtrée dans le bas du tableau

LEIYAZ

XLDnaute Nouveau
Bonjour,

J'ai un souci sur un fichier Excel.

Je souhaites pouvoir automatiser la copie des données de la ligne que j'ai filtrée et les coller en bas de mon tableau pour avoir deux lignes identiques mais à laquelle je change le prestataire.

Sauf que je n'arrive pas à bien utiliser le code VBA pour faire cela. Voici un exemple de code que j'avais indiqué :

VB:
Sub Copier_Ligne_Filtree()

' COPIE REFERENCE


Sheets("Feuille Test").Select
Range("C7").Select
SendKeys ("{DOWN}")
Selection.Copy
SendKeys ("{DOWN}")
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

End Sub

Mais cela ne fonctionne pas car rien ne se copie..

Je vous joint le fichier crée en test en PJ de ce message.

Merci par avance pour vos retours
 

Pièces jointes

  • FICHIER TEST.xlsb
    19.3 KB · Affichages: 13
Solution
Bonjour @Phil69970, le forum,

J'ai trouvé la solution, j'ai simplement ajouté à celui de @Phil69970 un code permettant de masquer et démasquer la colonne :

VB:
Sub Copier_Ligne_suivant_DPI()
Dim Derlig%
Derlig = Range("B65536").End(xlUp).Row

Columns("F:G").EntireColumn.hidden = False

Range("B14:U" & Derlig).SpecialCells(xlCellTypeVisible).Copy Range("B" & Derlig + 1)

Columns("F:G").EntireColumn.hidden = True

End Sub

Merci à @Phil69970 pour le 1er code qui fonctionne parfaitement

Phil69970

XLDnaute Barbatruc
Bonjour @LEIYAZ, le forum

Si tu nous expliques :
Quel est le critère de filtre, dis autrement ou tu prends l'info du critère ?
Après tu filtres les données et tu copies la ligne filtrée ==> Il y en a toujours qu'une ou il peut y en avoir plusieurs lignes filtrées ?
Tu les copies à quel endroit ?

@Phil69970
 

LEIYAZ

XLDnaute Nouveau
Bonjour @Phil69970,

Mes excuses pour la réponse tardive..

Le critère du filtre sera déterminé par moi-même suivant quel numéro de référence interne je devrai copier, la ligne sera déjà filtrée suivant mon critère avant d'exécuter la macro (exemple je souhaite dupliquer la référence interne DPI0560, je filtre mon tableau sur la réf DPI0560 et j'exécute la macro de duplication.
Il n'y aura donc toujours qu'une seule ligne filtrée.

Je pensais à la copier en dessous de la ligne filtrée car cela correspond en général à la première ligne vide après le tableau.

Merci d'avance
 

Phil69970

XLDnaute Barbatruc
Bonjour @LEIYAZ, le forum

Si j'ai compris tu filtres ta ligne avec le critère que tu veux et une fois la ligne filtrée tu veux la copier après la fin fin de tableau MAIS pas dans le tableau.

Je te propose ceci :
VB:
Sub Copier_Ligne_Filtree()
Dim Derlig%
Derlig = Range("B65536").End(xlUp).Row
Range("B8:J" & Derlig).SpecialCells(xlCellTypeVisible).Copy Range("B" & Derlig + 3)
End Sub
*La ligne filtrée sera copiée à la 3eme ligne après la fin du tableau
*Si tu veux copier sur une ligne plus bas il faut modifier ==> Derlig + 3 ==> le 3 correspond à la 3eme ligne après la fin du tableau

Merci de ton retour

@Phil69970
 
Dernière édition:

LEIYAZ

XLDnaute Nouveau
Bonjour @Phil69970, le forum,

La solution fonctionne sur le fichier test, j'au juste modifié la partie Range en indiquant :
VB:
Range("B8:J" & Derlig).SpecialCells(xlCellTypeVisible).Copy Range("B" & Derlig + 1)
Ceci afin que la ligne copiée apparaisse à la suite du tableau.

Maintenant je l'ai essayé sur mon tableau de suivi sur lequel je souhaitais la macro, mais étant donné que j'ai des colonnes masquées, cela ne copie pas correctement. Les informations sont décalées..

Exemple dans le fichier test joint, j'ai masqué les colonnes E et F et les informations sont décalées à partir de la ligne D quand je copie.

Ya t-il une solution pour éviter ce décalage ?

Merci d'avance
 

Pièces jointes

  • FICHIER TEST.xlsb
    19.8 KB · Affichages: 7

LEIYAZ

XLDnaute Nouveau
Bonjour @Phil69970, le forum,

J'ai trouvé la solution, j'ai simplement ajouté à celui de @Phil69970 un code permettant de masquer et démasquer la colonne :

VB:
Sub Copier_Ligne_suivant_DPI()
Dim Derlig%
Derlig = Range("B65536").End(xlUp).Row

Columns("F:G").EntireColumn.hidden = False

Range("B14:U" & Derlig).SpecialCells(xlCellTypeVisible).Copy Range("B" & Derlig + 1)

Columns("F:G").EntireColumn.hidden = True

End Sub

Merci à @Phil69970 pour le 1er code qui fonctionne parfaitement
 

Discussions similaires

Réponses
2
Affichages
123
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…