Zone d'impression dynamique

Bonjour,

Est-ce que quelqu'un s'y connait en zone d'impression dynamique.

J'entre des nombres dans un formulaire (Feuilles/Doc 1) ex: Shipper no 1 à 200 et à partir des nombres entrées, ces no de Shipper vont s'afficher sur la Feuille 2.

J'ai crée des nombre de boites jusqu'à 1000 ce qui donne 22 feuilles à imprimer mais lorsque au besoin je n'ai que 2 feuilles a imprimer, je ne veut pas imprimer les 22 feuilles pour rien, donc je voudrait que la zone soit variable en fonction du dernier chiffre à imprimer et que ça arrête quand la cellule est vide.

J'ai fouillé dans des vidéos tutoriel avec la formule Décaler et Nbval mais j'y arrive pas, j'ai toujours des erreurs.

Biensûr je peut sélectionner la zone manuellement mais j'aimerais trouver une façon plus rapide pour faciliter l'utilisation.

Je vous laisse mon fichier. Merci d'avance, vous êtes toujours des pros pour l'aide ici.

11rework-test.xlsx (70.87 Ko)

Bonjour, dans l'évènement "Change" de la Feuille formulaire ajouter le code :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim derligne As Long
derligne = Range("D8").Value + 7
Worksheets("Feuille REWORK").PageSetup.PrintArea = "$A$1:$G$" & derligne
End Sub
34rework-test.xlsm (72.71 Ko)

Merci pour votre réponse. Je ne savais pas comment avoir cet événement "Change", j'en déduit que c'est en effectuant le clic droit et visualiser code et j'ai recopier dedans mais jusqu'à maintenant rien n'a changé,

Presque : placez vous sur votre onglet "Formulaire"

- aprés clic sur visualisez le code

-En haut à gauche un sélecteur affiche "Général". changez le pour "Worksheets"

Vous verrez le début du code et la fin du code.

Il suffit de copier entre ces deux lignes

Dim derligne As Long
derligne = Range("D8").Value + 7
Worksheets("Feuille REWORK").PageSetup.PrintArea = "$A$1:$G$" & derligne

Ensuite faites un test et changer le Shipper début puis tentez un aperçu impression pour verifier le nombre de pages.

Malheureusement cela ne fonctionne pas, mais merci beaucoup pour l'effort.

Est-ce qu'il y a un moyen plus simple sans utiliser les codes mais avec la fonction Decaler.

Non une zone d'impression par formule pas possible.

Seule une macro peu le faire mais je ne comprends pas pourquoi mon fichier en retour fonctionne alors que le votre non ?

Vous devez faire un enregistrer-sous et changer le format de votre fichier Xlsx pour le format Xlsm sinon les macro ne sont pas

concervées.

Par ailleurs si dans votre original les informations ne sont pas exactement au même endroit alors le code ne peux pas fonctionner.

J'ai coder uniquement pour l'exemple que vous avez envoyé.

Re Bonjour,

Alors j'ai repris le fichier que vous avez envoyez, en allant visualiser le code, je vois que c'est écrit exactement ce que vous avez écrit comme code.

Je l'ai sauvegarder avec le format qui prend en charge les macros. Je l'ai ouvert à nouveau, sélectionner une zone d'impression de 1 a 50 au départ, ensuite je vais dans visualisation et j'ai bien la zone de 1 à 50. Je vais ensuite dans formulaire inscrire 150 au lieu de 50, je retourne dans aperçu pour voir si la zone d'impression a changer pour imprimer jusqu'à 150 et dans l’aperçu j'ai perdu les 50 lignes de la zone que j'avais sélectionnée au départ, il ne reste que la première ligne du tableau, soit A8.

Dans le fichier exemple que vous avez transmis :

Le plus grand numéro se trouve en Cellule Shipper Début . soit D8

Dans votre original est-ce bien la même chose ou le plus grand est inversé et se trouve en shipper Fin ?

Si le plus grand chiffre est en Shipper fin il faut changer dans le code la cellule qui indique le nombre de ligne :

'Si plus grand chiffre en Shipper début :
derligne = Range("D8").Value + 7

'Si plus grand chiffre en Shipper fin
derligne = Range("D10").Value + 7

Re Bonjour, Je suis vraiment désolé de vous avoir fait travailler autant. Effectivement dans les Formules en Cellule B les deux possibilités existent.

La Formule de la Cellule B =SIERREUR(SI(B8=Formulaire!$D$10;" ";SI(Formulaire!$D$8<Formulaire!$D$10;B8+1;B8-1));"")

J'opterai donc, autant que possible, de toujours y aller à Rebours, car je ne pense pas qu'on puissent faire les deux possibilités en code en même temps.

Un immense merci à vous, pour votre temps et votre grande patience, vous êtes réellement très très douée.

Re bonjour,

Et si les deux possibilités sont possibles : il suffit d'ajouter une condition pour le calcul de derligne.

On vérifie si D8 et plus grand que D10

Dim derligne As Long
If Range("D8").value >Range("D10").value Then
derligne = Range("D8").Value + 7
Else
derligne = Range("D10").Value + 7
End if
Worksheets("Feuille REWORK").PageSetup.PrintArea = "$A$1:$G$" & derligne

Merci, ça fonctionne dans les deux sens mais il reste un petit Bug, si je ne part pas du chiffre 1, exemple, on a un problème du shipper 30 à 100 ou de 100 à 30, la zone d'impression ne s'arrête pas à 100 mais à peut près 30 ligne plus loin, comme si lui partait le décompte à partir de 1, donc il crée 30 lignes vides en dessous.

Effectivement si numéro départ est différent de 1 il va falloir retrancher du shipper de Fin.

C'est juste des mathématiques. 100 - 30 + 8 et on se retrouve sur la bonne ligne.

On aurait alors un code comme :

Dim derligne As Long
If Range("D8").value >Range("D10").value Then
derligne = Range("D8").Value -Range("D10").Value + 8
Else
derligne = Range("D10").Value -Range("D8").Value + 8
End if
Worksheets("Feuille REWORK").PageSetup.PrintArea = "$A$1:$G$" & derligne

Ça fonctionne Super, merci énormément pour votre aide. J'aimerais tellement avoir vos connaissances en Excel.

J'aurais une autre question. Comme je m'y connais absolument pas avec le VBA je ne fait que regarder des Tuto. Donc j'ai regarder pour créer un bouton RESET et Impression.

J'ai créer un bouton RESET sur ma page de formulaire, il fonctionne. Ensuite j'en crée un deuxième qui s'appelle Impression.

C'est là que ca se corse.

Est-ce Normal que le code du deuxième bouton se mettre en dessous du premier et comment dire au bouton Impression que l'active Sheet n'est pas le formulaire mais bien le deuxième onglet Feuille Rework où la zone d'impression dynamique se retrouve.

Sub Bouton1_Cliquer()
Sheets("Formulaire").Range("D4:D14").Value = ""
End Sub

Private Sub Bouton2_Clic()
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub

Merci.

Bonjour.

Pour un bouton "imprimer" indiquez le nom de votre feuille :

Private Sub Bouton2_Clic()
Worksheets("Feuille REWORK").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub
Rechercher des sujets similaires à "zone impression dynamique"