VB6 - Filtre automatique

Résolu
vero6272 Messages postés 2 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 27 novembre 2007 - 26 nov. 2007 à 12:51
vero6272 Messages postés 2 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 27 novembre 2007 - 27 nov. 2007 à 17:56
Bonjour,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





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.



J'aimerais ensuite que seules les feuilles qui ont été remplies soit imprimées en pdf.

Feuilles : "Trades", "GGG", "XXX", "UTG"
 






<colgroup>

<col style=\"WIDTH: 60pt\" span=\"7\" width=\"80\" />

</colgroup>

----

 ,
 ,
 ,
 ,
 ,
 ,
 ,

----

 ,
 ,
 ,
 ,
 ,
 ,
 ,

----

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 <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??><st1:personname w:st="on" productid="la feuille Trades">la feuille Trades</st1:personname>






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 <st1:personname w:st="on" productid="LA QUE CELA BLOQUE">LA QUE CELA BLOQUE</st1:personname>, je voudrais aller dans des feuilles existantes nommées "XXX" "GGG" etc...
'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))










 









'Si je supprime l'ajout de la nouvelle feuille cela ne fonctionne pas
'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 <st1:personname w:st="on" productid="la feuille Trades">la feuille Trades</st1:personname>





MaFeuille.Select






 






'Supprime les colonnes M et N après le traitement






MaFeuille.Columns("M:N").Delete








 









 








End Sub








 









 







Merci d'avance de votre aide, je lis plein de bouquins mais je débute et tout cela est encore très compliqué.

2 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
27 nov. 2007 à 00:22
Si j'ai bien compris, il faudrait que tu vérifies l'existence de la feuille avant de la créer.
Quelque chose comme

For Each Feuille In ActiveWorkbook.Worksheets
    If Sheets(MaCellule.Value) = Feuille.Name then ' elle existe déjà
       Trouvé = True
       Exit For
    End If

Next

If Trouvé Then  'elle existe
    Sheets(MaCellule.Value).Activate

Else  'elle n'existe pas
    'Création d'une nouvelle feuille
End If

MPi²
3
vero6272 Messages postés 2 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 27 novembre 2007
27 nov. 2007 à 17:56
Oui effectivement je cherche à aller dans les feuilles existantes quand il y en a.
Cela m'a permis sinon de trouver la solution dans mes lignes
CopyToRange:=Sheets(MaCellule.Value).Range("A6")
Je faisais Sheets(MaCellule) sans mettre .Value dans les parenthèses
Merci beaucoup, je me lance dans la suite du fichier.
3
Rejoignez-nous