XL 2013 Creer une VBA pour imprimer le résultat d'un filtre avec une boucle

vince287875008

XLDnaute Nouveau
Bonjour à tous,
Petite macro simple je pense mais il me manque la création de la boucle et la déclaration de variable…. Non en faite tout j’ai bien essayé avec le vba et l’enregistrement de macro mais parton d’une feuille blanche.
Voila pour les données j’ai un fichier de 15.000 ligne ou plus selon les jours le fichier n’est jamais identique celle la mise en forme est constante.
Sur ce fichier en colonne B je dois filtrer avec un numéro d’article et imprimerie résultat du filtre puis recommencer pour environ 150 articles par jours (1h de perdu alors que Excel sait gérer ça seul).
Ce que je veux automatiser c’est simplement :
Importer une liste de 150 ou 200 numéros qui serviront de filtre et qui seront par exemple sur l’onglet nommé import1.
Filtrer sur l’onglet nommé 2 par exemple cette liste fraichement importée pour imprimer le résultat du filtre et recommencer ..
Donc ma vba doit avoir une variable on dira F qui soit une boucle
Une idée ?
 

vince287875008

XLDnaute Nouveau
Bon je dois créer une boucle sur ca

Sheets("Feuil1").Select
Range("A1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("24-07-2019").Select
ActiveSheet.Range("$A$1:$Y$306").AutoFilter Field:=5, Criteria1:="11200144"
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False


Je déclare donc ma variable:
Dim XXX As Variant
XXX = range("A1").select

mais après comment metttre ma boucle pour que la variable déscente d'une ligne a chaque fois jusqu'à ce que la cellule soit = à 0

Merci
 

job75

XLDnaute Barbatruc
Bonjour vince287875008, bienvenue sur XLD,
Importer une liste de 150 ou 200 numéros qui serviront de filtre et qui seront par exemple sur l’onglet nommé import1.
C'est sur ces numéros qu'il faut faire une boucle pour les filtrer dans l'onglet adéquat.

Je ne comprends pas ce que vient faire le copier-coller là-dedans.

Rappel : en VBA il est inutile voire nuisible de sélectionner, évitez les Select et autre Activate.

A+
 

vince287875008

XLDnaute Nouveau
Bon voila a quoi ressemble le fichier.
Sur l'onglet result j'ai donc une liste avec des champs ... de taille entre 150 et 1500 lignes cela dépend des jours.
Sur l'onglet liste j'ai mes articles a filtre en colonne E sur l'onglet result.

La boucle doit être lancé un nombre de fois égale au nombre de ligne dans le fichier liste (ok ça avec un nbsomme sur la colonne A on est ok)
La strucuture du fichier est toujours la meme

Par contre il se peut que les articles présent sur l'onglet liste ne soit pas dans l'onglet champs et donc l'impression resort vide par grave.
 

Pièces jointes

  • Test.xls.xlsx
    18.3 KB · Affichages: 17

job75

XLDnaute Barbatruc
Bonjour vince287875008, chris,

Je ne vois pas l'intérêt de la feuille "Extrait", voyez le fichier joint et cette macro :
VB:
Sub Imprimer()
Dim c As Range
With Sheets("Result").[A1].CurrentRegion
    For Each c In Sheets("Liste").[A1].CurrentRegion
        .AutoFilter 5, c 'filtre automatique
        .Parent.PrintPreview 'pour tester
        '.Parent.PrintOut 'pour imprimer
    Next
    .AutoFilter 'RAZ
End With
End Sub
La feuille "Result" est mise en page : 1 page en largeur, orientation Paysage.

A+
 

Pièces jointes

  • Imprimer(1).xlsm
    30.3 KB · Affichages: 27

vince287875008

XLDnaute Nouveau
Je veux rajouter un petit trier avant l'impression le mieux c'est de la mettre dans la macro RAZ ou plutôt dans la boucle ?
ActiveWorkbook.Worksheets("Extrait").Sort.SortFields.Add Key:=Range("B2:B50") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
ActiveWorkbook.Worksheets("Extrait").Sort.SortFields.Add Key:=Range("G2:G50") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("Extrait").Sort
.SetRange Range("A1:Y50")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
 

job75

XLDnaute Barbatruc
Le plus simple est de trier au départ la feuille "Result" sur les colonnes E, B, G :
VB:
Sub Imprimer()
Dim c As Range
With Sheets("Result").[A1].CurrentRegion
    .Sort .Columns(5), xlAscending, .Columns(2), , xlAscending, .Columns(7), xlAscending, Header:=xlYes 'tri sur 3 colonnes
    For Each c In Sheets("Liste").[A1].CurrentRegion
        .AutoFilter 5, c
        .Parent.PrintPreview 'pour tester
        '.Parent.PrintOut 'pour imprimer
    Next
    .AutoFilter 'RAZ
End With
End Sub
 

Pièces jointes

  • Imprimer(2).xlsm
    30.7 KB · Affichages: 7

job75

XLDnaute Barbatruc
Si l'on veut qu'à la fin la feuille "Result" soit remise dans l'ordre initial :
VB:
Sub Imprimer()
Dim P As Range, c As Range
With Sheets("Result").[A1].CurrentRegion
    Set P = .Columns(.Columns.Count + 2)
    P(1) = 1
    P.DataSeries 'numérotation
    .EntireRow.Sort .Columns(5), xlAscending, .Columns(2), , xlAscending, .Columns(7), xlAscending, Header:=xlYes 'tri sur 3 colonnes
    For Each c In Sheets("Liste").[A1].CurrentRegion
        .AutoFilter 5, c
        .Parent.PrintPreview 'pour tester
        '.Parent.PrintOut 'pour imprimer
    Next
    .AutoFilter 'RAZ
    .EntireRow.Sort P, xlAscending, Header:=xlYes 'remise dans l'ordre initial
    P.ClearContents 'RAZ
End With
End Sub
 

Pièces jointes

  • Imprimer(3).xlsm
    31.3 KB · Affichages: 33

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren