Tri et extraction colonne
Bonjour,
J'ai à ma dispostion un fichier se présentant en 6 colonnes.
La colonne NuméroClient est importante car je dois trier les numéros (ça je sais faire) puis extraire les lignes correspondantes à ce numéro. J'aurais donc besoin d'aide pour réaliser ceci.
Le problème étant que j'ai plusieurs fois le même numéro de client dans la colonne.
Merci bien!
Bonjour,
Quelques questions pour comprendre
- extraction de quelle colonne (A, B, CD, AA, ???)
- extraction vers où ?
- quel numéro de client on choisit pour la ligne si plusieurs numéros identiques
Un fichier sera le bienvenu ....
bonjour,
voici un code qui fait le copie des lignes (triées) avec le même numéro de client en colonne A et les répartit dans des nouvelles feuilles
Sub extract()
' feuille des clients
Set ws1 = Worksheets("clients")
' i ligne client en cours
i = 1
' première ligne avec numéro de client en cours
plc = 1
' numéro de client en cours
nplc = ws1.Cells(plc, 1)
' on boucle sur les lignes clients
While ws1.Cells(i, 1) <> 0
' si numéro de client trouvé sur la ligne <> numéro de client en cours
If ws1.Cells(i, 1) <> nplc Then
'on ajoute une nouvelle feuille
Set ws2 = Worksheets.Add
ws2.Name = nplc
'on y copie les lignes avec ce numéro de clients
ws1.Rows(plc & ":" & i - 1).Copy ws2.Cells(1, 1)
' on prend note du nouveau numéro de client et de son numéro de prmière ligne
plc = i
nplc = ws1.Cells(i, 1)
End If
' on prend la ligne client suivante
i = i + 1
Wend
' traitement pour le dernier client
If i > plc + 1 Then
'on ajoute une nouvelle feuille
Set ws2 = Worksheets.Add
ws2.Name = nplc
'on y copie les lignes avec ce numéro de clients
ws1.Rows(plc & ":" & i - 1).Copy ws2.Cells(1, 1)
End If
Set ws1 = Nothing
Set ws2 = Nothing
End Subh2so4 a écrit :bonjour,
voici un code qui fait le copie des lignes (triées) avec le même numéro de client en colonne A et les répartit dans des nouvelles feuilles
Sub extract() ' feuille des clients Set ws1 = Worksheets("clients") ' i ligne client en cours i = 1 ' première ligne avec numéro de client en cours plc = 1 ' numéro de client en cours nplc = ws1.Cells(plc, 1) ' on boucle sur les lignes clients While ws1.Cells(i, 1) <> 0 ' si numéro de client trouvé sur la ligne <> numéro de client en cours If ws1.Cells(i, 1) <> nplc Then 'on ajoute une nouvelle feuille Set ws2 = Worksheets.Add ws2.Name = nplc 'on y copie les lignes avec ce numéro de clients ws1.Rows(plc & ":" & i - 1).Copy ws2.Cells(1, 1) ' on prend note du nouveau numéro de client et de son numéro de prmière ligne plc = i nplc = ws1.Cells(i, 1) End If ' on prend la ligne client suivante i = i + 1 Wend ' traitement pour le dernier client If i > plc + 1 Then 'on ajoute une nouvelle feuille Set ws2 = Worksheets.Add ws2.Name = nplc 'on y copie les lignes avec ce numéro de clients ws1.Rows(plc & ":" & i - 1).Copy ws2.Cells(1, 1) End If Set ws1 = Nothing Set ws2 = Nothing End Sub
Merci beaucoup c'est exactement que je recherche à un détail près. J'aimerais que de nouveaux fichiers excel se créent et non des feuilles.
En tout cas merci à toi!
La colonne client étant la colonne B, comment faire pour commencer à trier à partir de celle-ci?
bonjour,
code adapté pour prendre numéro de client en colonne B, (ils doivent être triés) et créer des fichiers plutôt que des feuilles
Sub extract()
' feuille des clients
Set ws1 = Worksheets("clients")
' i ligne client en cours
i = 1
' plc première ligne avec numéro de client en cours
plc = 1
' nplc numéro de client en cours
nplc = ws1.Cells(plc, "B")
' on boucle sur les lignes clients
While ws1.Cells(i, "B") <> 0
' si numéro de client trouvé sur la ligne <> numéro de client en cours
If ws1.Cells(i, "B") <> nplc Then
'on cree un nouveau classeur ajoute une nouvelle feuille nommé d'après le numéro de client
Set wb = Workbooks.Add
Set ws2 = wb.Worksheets(1)
ws2.Name = "client " & nplc
'on y copie les lignes avec ce numéro de clients
ws1.Rows(plc & ":" & i - 1).Copy ws2.Cells(1, 1)
' on sauve le classeur créé,nommé d'après le numero de client, dans le répertoire par défaut d'excel
wb.SaveAs ws2.Name & ".xlsx"
'on le ferme
wb.Close
' on prend note du nouveau numéro de client et de son numéro de permière ligne
plc = i
nplc = ws1.Cells(i, "B")
End If
' on prend la ligne client suivante
i = i + 1
Wend
' traitement pour le dernier client
'on cree un nouveau classeur ajoute une nouvelle feuille
Set wb = Workbooks.Add
Set ws2 = wb.Worksheets(1)
ws2.Name = "client " & nplc
'on y copie les lignes avec ce numéro de clients
ws1.Rows(plc & ":" & i - 1).Copy ws2.Cells(1, 1)
' on prend note du nouveau numéro de client et de son numéro de prmière ligne
' on sauve le classeur créé, dans le répertoire par défaut d'excel
wb.SaveAs ws2.Name & ".xlsx"
'on le ferme
wb.Close
Set ws1 = Nothing
Set ws2 = Nothing
set wb=nothing
End SubJe te remercie un milliard de fois et encore ce n'est pas assez, je ne sais comment te remercier
Un grand merci à toi !