Impression conditionnelle

Bonjour à tous,

Voila ma problématique :

Dans ma feuille Excel, j'ai une première colonne avec des numéros.

Une 2ème colonne avec des codes (AA,BB,CC,...)

Est il possible de filtrer puis de lancer une impression en dissociant les codes :

Je voudrais que lors du lancement de l'impression, lors d'un changement de code, cela sépare les page.

En gros, je ne souhaite pas avoir sur une même page, 2 codes différents.

Merci d'avance pour votre retour

Jess

Bonjour,

Je dirais un truc comme ceci :

Sub filtre_impression()
'on crée une liste avec tous tes codes uniques qui se trouvent dans la colonne B. 
Set mondico = CreateObject("Scripting.Dictionary")
a = Range([B2], [B1048576].End(xlUp)).Value
For Each c In a
    mondico(c) = ""
Next c

' on colle ces critères uniques dans la cellule E1. Tu peux changer la cellule, voire mettre ceci sur une autre feuille. Il doit y avoir moyen de rester tout en mémoire, sans rien écrire, mais je ne maîtrise pas encore bien ça. 
[E1].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)

'on fait une boucle sur chaque critère unique qu'on vient de coller en cellule E1. 
For Each c In [E1].CurrentRegion.Cells
' On filtre la colonne B (field=2) avec la 1ère valeur unique qu' on vient de coller
ActiveSheet.Range("$A$1:$B$10000").AutoFilter Field:=2, Criteria1:=c.Value

'on lance l'impression
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
'on passe à la valeur suivante 
Next
' on enlève les filtres
Selection.AutoFilter

'on efface les codes uniques qu'on a extrait
[E1].CurrentRegion.ClearContents
End Sub

Mais attention en l'état actuel des choses, ça va t'imprimer tes 900 lignes ... Pas très 2021 !

Et tu auras intérêt à bien paramétrer ton fichier avant, pour répéter les lignes d'entêtes lors de l'impression, etc.

Bonjour Joyeux Noel,

Merci cela fonctionne,

De ce fait, si je veux ajouter des codes, j'ai une manœuvre à faire ?

Tu pourrais m'expliquer le code si je souhaite le dupliquer sur un autre fichier stp ?

Merci

Bonjour,

J'ai édité le code posté hier avec les commentaires.

Si quelqu'un veut proposer une solution où on ferait tout en mémoire, sans étape intermédiaire, je suis preneur !

Bonjour Joyeux Noel,

Je viens d'ajouter des données dans d'autres colonnes (jusque la colonne M) que je souhaite ajuster sur une largeur d'une feuille.

J'ai lancée une impression et j'ai du forcer l'arrêt car mon imprimante ne s'arrêtait plus.

Y a t il quelque chose à modifier dans le code ?

Bonne soirée

Bonjour,

Je n'en sais rien, je ne suis malheureusement pas médium 😕

Bonjour à tous,

@JoyeuxNoel : A priori, après la boucle d'alimentation du dico, tu peux directement boucler sur les keys (sans collage donc) :

For Each c In dico.keys
    ActiveSheet.Range("$A$1:$B$10000").AutoFilter Field:=2, Criteria1:=c

et ensuite, on enlève le .value...

@Jess : Vous imprimez vraiment 900 fois ? Si c'est le cas, il faudra peut-être fixer une limite quelque part en rajoutant un "OK" sur une autre colonne (pour éviter d'imprimer en double). Sinon, il est possible de temporiser l'exécution avec application.wait mais je ne suis pas sûr que ce soit une bonne option...

Et pour les modifications, il faut déjà modifier au moins la zone sujette au filtre (jusqu'à la colonne M cette fois). Et pour l'ajustement, il faut utiliser la méthode .autofit dans la boucle mais sans info, c'est compliqué. Avec 13 colonnes, il faut éventuellement paramétrer la mise en page pour être sûr d'avoir une impression sur une page en largeur.

Mais JoyeuxNoel a raison, c'est pas très 2021, il vaudrait mieux créer des pdfs. Ensuite, ce serait plus simple d'imprimer en masse.

Cdlt,

Excuse moi, je n'avais pas mis mon fichier pour compréhension.

J'ai juste ajouter des colonnes de C à M.

En espérant que mon explication est claire.

@3gb

Non je n'imprime pas 900 fois.

Je souhaite juste imprimer de la colonne A à la colonne M en filtrant mes données :

Dans la colonne B, j'ai des codes (AA,BB,CC,...) chaque code appartient à une machine.

Lorsque le matin je sors mon tableau, j'ai des centaines de lignes. Je voudrais juste en appuyant sur un bouton filtrer et imprimer en fonction des codes.

Je souhaite juste que lorsque j'ai un changement de code, j'ai un changement de page.

Après, je ne suis pas contre une transformation en PDF pour un envoi numérique

Hello!

Super 3GB, merci pour l'info. J'essaierai ça.

C'est tellement virtuel pour moi ces dicos, je les utilise bêtement sans comprendre vraiment ce qu'il se passe.

Set mondico = CreateObject("Scripting.Dictionary")
a = Range([B2], [B1048576].End(xlUp)).Value
For Each c In a
    mondico(c) = ""
Next c

Par quel type de process magie cela peut-il créer une liste sans doublon des données ? Que se passe-t-il pour de vrai ? Je n'en sais rien. Du coup j'ai du mal à aller voir ce qu'on pourrait faire de mieux avec un truc que je n'ai pas vraiment compris.

Avec la fonction DECALER, au moins, on voit ce qu'il se passe

"Après, je ne suis pas contre une transformation en PDF pour un envoi numérique"

VOILÀ, ÇA, c'est 2021. Faire reposer sur d'autres le poids financier et écologique de l'impression.

Non mais !

Ca fonctionne, merci à vous en tout cas.

Mais vos réponses me font réfléchir pour ne plus à avoir à utiliser de papier. En mode 2021 !!

De ce fait, je me pose 2 questions :

1- Vous parliez de dicos, il s'agit de livres pour apprendre le VBA ?

2 - Je suis peut-être dans le futur, mais il faut oser ! :

De mon fameux fichier, à la place de faire mes impressions, est il possible d'envoyer uniquement les lignes correspondant à un code "AA" dans un fichier genre Teams ou sur mon local nommé "AA" et idem pour le code "BB" ... ?

je suis trop rêveur ? (de votre faute !)

Ah mais c'est carrément possible !

Et c'est tellement 2021! Voire 2020 ou 2019 même, mais on ne va pas chipoter ☺️

Par contre je suis claqué, mon service est terminé pour aujourd'hui.

@JoyeuxNoel : Est-ce que tu utilises le pas à pas détaillé parfois (touche F8) et regardes la fenêtre de variables locales ? Ca permet de mieux comprendre/visualiser le parcours d'une variable. Même si avec les dicos, c'est pas très clair...

En fait le dictionnaire contient des clés et des items. Chaque clé est unique et a un item associée. L'écriture :

dico(clé) = item

permet d'affecter un nouvel item à la clé spécifiée (et en même temps, quand elle n'existe pas, de créer la clé). Ca correspond à :

dico.add clé, item

Et comme la plupart du temps, seules les clés intéressent, on met dico(clé) = "" mais on pourrait très bien mettre "trucmuche" par exemple . Mais je dois avouer qu'à part ça, je n'ai pas parfaitement saisi le fonctionnement. J'ai essayé de mettre des arrays en item et je n'ai pas réussi. C'est pas encore assimilé quoi...

En tout cas, il y a une méthode dico.exists(clé) permettant de voir si une clé existe déjà. C'est assez pratique pour gérer les doublons par la suite : tu boucles et si dico.exists, tu fais rien, sinon, tu incrémentes une variable n et tu alimentes l'item n d'un tableau dynamique.

Encore la promotion de DECALER, il y en a marre^^. Mais DECALMAN sera bientôt DICOMAN !

@Jess : Comme tu l'auras compris, le dictionnaire est un objet, similaire à des tableaux dynamiques, mais qui gère automatiquement la question de l'unicité des valeurs. Mais il existe sûrement tout un tas de livres dont des dictionnaires sur VBA^^.

Oui, il est possible d'éditer un PDF après filtre et il est possible d'alimenter d'autres fichiers. Sur Teams, je ne saurais pas faire mais en local, ça parait jouable.

Merci pour ces infos !

Je ne fais que du F8 ! Par contre, je regarde l'état des variables en passant dessus avec la souris. Pas toujours bien pratique. Je vais voir pour afficher cette fenêtre !

Mais comme tu le dis, pour visualiser un dico, bon courage...

En tout cas, ton explication concernant le dico me permet de mieux comprendre tout ceci. Un grand merci !

Je t'en prie !

En général, la fenêtre variables locales se trouve sous la fenêtre d'édition du code. Sinon, il faut aller dans le menu contextuel : Affichage/fenêtre de variables locales.

Ce sera déjà mieux qu'à la souris (quoique pour les objets et les tableaux, il faut dérouler, c'est pas l'idéal). Sinon, je n'ai jamais pratiqué mais apparemment, avec la fenêtre d'exécution, ce serait encore plus clair (en mettant dans le code l'instruction debug.print). Il faudrait que j'essaie un de ces 4...

Ah oui, c'est ce qui apparaît avec ctrl + g alors ^^

Oui, ça je l'ai tout le temps affichée en fait. Mais comme je ne suis pas malin, je m'en sers mal ^^

En fait fut un temps, je l'utilisais avec debug.print effectivement.

Et puis j'ai découvert qu'on peut à tout moment vérifier des infos dessus, en tapant des choses dedans.

Par exemple "? Activecell.address"

Ou plein d'autres choses. En fait tu peux l'interroger sur tout, à tout moment. Et j'ai oublié son utilisation 1ère 😂

D'accooord ! Dans le fenêtre d'exécution tu veux dire ? Tu tapes DECALER par exemple , enfin activecell.address et obtiens l'addresse ? Mais c'est pratique ? Enfin plus que la fenêtre des variables locales ? Parce que je me vois mal me retrouver avec 12 fenêtres différentes...

Noooon j'ai écrit un pavé et ça a encore planté.

Ras le c.l d'écrire ici sur téléphone... Ça devient l'horreur 😢

Stop à la censure !

Rechercher des sujets similaires à "impression conditionnelle"