Programmation VBA - Trier et coller dans une fenêtre définie

Bonjour,
Pour faire de la facturation en fin de mois je souhaite faire un tri dans la liste des achats des clients et extraire les commandes de chaque client pour les coller dans la feuille correspondant à leur facture.
Pour l’instant ma macro tri mais colle dans une nouvelle feuille qu’elle nomme à chaque fois, je voudrais qu’elle colle dans la feuille du client concerné déjà intitulée au nom de ce même client et formatée pour la facture.

Clients Date Produit B/S Qty Prix Total
XXX 08-oct Thé A 150 10,00 1 500,00
GGG 08-oct Café A 400 20,00 8 000,00
XXX 08-oct Jus A 250 15,00 3 750,00
GTZ 08-oct Jus A 65 15,00 975,00
XXX 20-oct Thé A 100 10,00 1 000,00
UTG 21-oct Thé A 50 10,00 500,00

Voilà ce que j’ai pour l’instant

Sub FiltrerClient_Click()

Dim MaFeuille As Worksheet
Dim NouvFeuille As Worksheet
Dim MaListeTrades As Range
Dim NbLignes As Integer
Dim MaCellule As Range

Set MaFeuille = Sheets(“Trades”)
'ListeTrades = zone de cellules nommées commençant en A3 et finissant à la fin de la liste
Set MaListeTrades = Range(“ListeTrades”)

'Extrait la liste des clients dans une zone de la feuille Trades
MaListeTrades.Columns(“A:A”).AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Range(“M1”), Unique:=True

NbLignes = Cells(Rows.Count, “M”).End(xlUp).Row

'Paramètre la zone de Critères
'Le critère porte uniquement sur le champ Clients
Range(“N1”).Value = Range(“A3”).Value
For Each MaCellule In Range(“M2:M” & NbLignes)

'Inscrit le nom du client en tant que critère
MaFeuille.Range(“N2”).Value = MaCellule.Value

'C EST LA QUE CELA BLOQUE, je voudrais aller dans des feuilles existantes et non pas en créer de nouvelles.
'Ajoute une nouvelle feuille dans le classeur en dernière position
Set NouvFeuille = Sheets.Add(, After:=Worksheets(Worksheets.Count))

'Attribue le nom du Client dans la nouvelle feuille
NouvFeuille.Name = MaCellule.Value

'Extrait les produits des clients dans la nouvelle feuille
MaListeTrades.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets(“Trades”).Range(“N1:N2”), _
CopyToRange:=NouvFeuille.Range(“A6”), _
Unique:=False
Next

'Sélectionne la feuille Trades
MaFeuille.Select

'Supprime les colonnes M et N après le traitement
MaFeuille.Columns(“M:N”).Delete

End Sub

Merci d’avance, je lis plein de bouquins mais j’ai encore beaucoup de mal car je débute.
Edité le 26/11/2007 à 09:45

Pour atteindre une feuille existante, tu fais
sheets(“le_nom_de_la_feuille”).activate.
Donc pour toi, ca devrait donner
sheets(MaCellule).activate.

Merci beaucoup, mais quand je remplace
Set NouvFeuille = Sheets.Add(, After:=Worksheets(Worksheets.Count))
par
Set NouvFeuille = Sheets(MaCellule)
cela ne fonctionne pas
:frowning:

Je ne comprends pas très bien ce que tu veux faire.
Tu veux creer une nouvelle feuille ou aller dans une feuille qui existe déjà ?
Dans le deuxième cas, il suffit simplement que tu l’actives, comme je t’ai dit dans mon premier message

En fait je voudrais créer toutes mes feuilles clients pour faire la mise en page de la facture avant de laisser agir la macro qui remplira les cases des achats effectués.
J’aimerais donc que au lieu de créer une nouvelle feuille puis de la nommer au nom du client trié, et d’y coller les données extraites il sache reconnaitre la feuille qui existe déjà et aller y coller les données du client correspondant.

J’essaye de sauter l’étape :
Set NouvFeuille = Sheets.Add(, After:=Worksheets(Worksheets.Count))

Pour aller directement à
NouvFeuille.Name=MaCellule.Value
MaListeTrades.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets(“Trades”).Range(“N1:N2”), _
CopyToRange:=NouvFeuille.Range(“A6”), _
Unique:=False
Next

Je voudrais qu’il sache qui est NouvFeuille, mais cela ne fonctionne pas. Je ne vois pas sinon à quelle étape je pourrais faire Sheets(MaCellule).Activate comme tu le préconise.
Merci beaucoup pour ton aide

Effectivement, tu ne dois pas avoir besoin de visualiser la nouvelle feuille, donc pas d’activate dans ton cas.
Par contre, ta façon de l’adresser ne doit pas être bonne.
essaie
CopyToRange:=sheets(MaCellule).Range(“A6”)

J’avais essayé et cela ne marche pas

Ca y est enfin !!!
CopyToRange:=Sheets(MaCellule.Value).Range(“A6”), _
J’avais essayé le .value mais en dehors des parenthèses, et MaCellule seul ne suffisait pas.
Merci beaucoup de ton aide, il me reste encore plein de choses à faire dans ce petit programme, sommes, numérotation des factures, insertion de dates, impressions pdf, je repars dans mes bouquins pour la suite.
Faut-il beaucoup de temps pour maitriser VBA ?

Si tu te limites au VBA appliqué à excel, ce n’est pas très compliqué.
Par contre, il manque un peu de rigueur.
Il y a de bonnes habitudes à prendre, comme par exemple de déclarer systématiquement les variables les variables qu’on utilise
Et aussi bien faire la part des choses, entre ce qu’on fait faire à excel (le maximum), et ce qu’on fait faire au VBA
Il faut aussi un certain temps pour s’habituer à la doc associée, mais une fois qu’ on en a fait le tour, on s’aperçoit qu’elle contient en fait beaucoup de choses.