Copier les lignes selon une valeur

Fermé
JBABIN - 15 avril 2016 à 21:52
 Jbabin - 18 avril 2016 à 17:22
Bonjour,

J'ai un fichier contenant un tableau ou on retrouve toutes les transactions pour chaque nom de conseiller. Je veux créer une macro qui créera un nouveau fichier pour chaque conseiller (avec le nom du conseiller) et coller toutes les lignes associés à ce conseiller dans le fichier. Les noms se trouve dans la colonne D.

Merci

A voir également:

2 réponses

melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
16 avril 2016 à 09:13
bonjour,

voici le fichier avec la macro :
https://www.cjoint.com/c/FDqhm4rcAj0


voici la macro :
Sub conseiller()

lignesource = 2
'on nomme la variable source pour le classeur d'origine
Source = ActiveWorkbook.Name

'on prend le nom du collaborateur en ligne i et en colonne 4
Do While Sheets("sheet1").Cells(lignesource, 4) <> ""

'on enregistre le nom du collaborateur dans la variable name
Name = Sheets("sheet1").Cells(lignesource, 4)

'on vérifie que le collaborateur n'a pas déjà été traité
If Cells(lignesource, 100) = "" Then
'on ajoute 1 classeur, on l'enregistre sous le nom du collaborateur, on copie la ligne d'entête située en 1ère ligne
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=Workbooks(Source).Path & "\" & Name & ".xlsx"
Workbooks(Source).Activate
Rows(1).Copy
Workbooks(Name).Activate
Cells(1, 1).Select
ActiveSheet.Paste
lignenom = lignesource
lignedest = 2

'on va balayer le classeur source pour trouver toutes les lignes correspondant au collaborateur
Workbooks(Source).Activate

Do While Sheets("sheet1").Cells(lignenom, 4) <> ""

'si le nom = nom du classeur alors
If Sheets("sheet1").Cells(lignenom, 4) = Name Then

'on va copier la ligne collabo dans son classeur
Rows(lignenom).Copy
Workbooks(Name).Activate
Cells(lignedest, 1).Select
ActiveSheet.Paste
Workbooks(Name).Activate
Workbooks(Source).Activate
'un indicateur permettant d'indiquer les lignes traitées
Sheets("sheet1").Cells(lignenom, 100) = "X"
lignedest = lignedest + 1
End If
lignenom = lignenom + 1
Loop
'on sauve et ferme le classeur collabo
Workbooks(Name).Save
Workbooks(Name).Close

End If
lignesource = lignesource + 1

Loop


Workbooks(Source).Activate
Columns(100).Clear

End Sub
0
Bonjour,

avec 2-3 ajustement, la macro a fonctionné!!

Merci beaucoup Melanie
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 309
16 avril 2016 à 14:16
Bonjour Jbabin et le forum,

Il serait intéressant que l'on puisse la structure du tableau source et nous préciser le nombre de lignes (environ) de ton tableau

pour cela
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci par un clic droit sur le lien proposé dans le message de réponse

Dans l’attente

0