Feuille propositions menus midi retrait : créer une macro pour les sauts de

re,

par exemple, pour la feuille "Propositions menus midi retrait", vous voulez imprimer en "landscape" sur 10 pages (max). Puis on a ce dernier chiffre du zoom. Cela dépend de votre imprimante, mais vous modifiez ce chiffre de manière que vous avez le nombre voulu mais ne pas un multiple, par exemple, la macro avait dit que le résultat serait 9 pages et le "printpreview" donne 18 page, alors il faut un chiffre plus petit, donc par exemple soustraire 10. Dès que cela passe à 9 pages, vous pouvez de nouveau ajouter en intervalles de 2, jusqu'au moment où c'est de nouveau 18 page et alors vous remettez la valeur précédente.

17menus-1.xlsm (254.95 Ko)
Sub M_print1()
     M_Preparation Sheets("Propositions menus midi retrait"), xlLandscape, 10, 45   'sur 10 pages en "landscape" et zoom de 45 (à ajuster)
End Sub

Bonsoir BsAlv,

Merci pour votre nouveau fichier qui donne enfin 10 pages. Je vais essayer de modifier le zoom, si je vous ai bien compris, par le dernier chiffre. Je m'en occuperai demain après-midi. Si vous le souhaitez, vous pouvez me tutoyer, cela ne me dérange pas. Peut-on communiquer, éventuellement, par messages privés ?

Bonnes fin de soirée et nuit. Bonne continuation. Prenez bien soin de vous.

re,

okay, mais je ne répons pas aux MPs.

le zoom est un chiffre entre 10 et 400 et ce chiffre sert à agrandir ou réduire le résultat de l'impression. Donc supposons que tu mets ce dernier chiffre à 10 (valeur la plus petite possible) et le "printpreview" te montre un nombre de pages <= le nombre de pages voulu, alors tu ajoute par exemple 10 à ce dernier chiffre et tu relance la macro. Un moment donné, le nombre de pages dans le"printpreview" change (double), donc à ce moment, le zoom est trop grand. Alors le zoom optimal sera entre l'avant-dernier et le dernier chiffre du zoom. Maintenant tu soustrais par exemple en intervalles de 2, le zoom jusqu'au moment ou le nombre de pages dans le printpreview est de nouveau <= nombre de pages voulu.

Si le zoom est okay, tu peux changer les autres propriétés du "pagesetup" dépendant de ton goût, par exemple les "margins", mais cela peut de nouveau influencer le nombre de pages et tu sera obligé de retrouver le "zoom" optimal. Donc, ce n'est pas si facile.

PS. j'ai essayé d'automatiser cela avec une macro, mais sans succès, trop difficile.

PS2. tu peux supprimer le msgbox, il ne sert à rien mais peut t'aider à expliquer les choses.

Bonjour BsAlv,

Je te remercie pour ces précisions. Je vais donc voir tout cela cette après-midi.

Si je modifie le zoom, que doit-il se passer et que dois-je voir ? J'ai essayé de modifier le zoom de propositions menus midi retrait, à l'aperçu, je n'ai rien vu de spécial ni aucune modification visible. À l'aperçu, impossible de lire les lignes, c'est trop petit. J'ai imprimé votre code et j'essaie de comprendre, d'où les questions suivantes :

If iZoom = 0 Then iZoom = 100 que signifie cette instruction ?

i = WorksheetFunction.CountIf(.Range("A1:A10000"), "Numéro du menu") c'est quoi ce 10000 (le nombre de lignes ? )

For i = iStep + 1 To 1000 Step iStep c'est quoi ce 1000 (aucune suggestion à vous faire)

With .PageSetup : les zéros indiqués à certains endroits correspondent aux marges que j'ai mentionnées dans la mise en page ?

.LeftHeader = " " : pour d'autres également, que signifie cette instruction (sa propriété reste vide).

Arr = Evaluate("if(A1:A10000=""Numéro du menu"", Row(A1:A10000), le 7)") : c'est bien le 7 ? Que représente le 7
For i = iStep + 1 To 1000 Step iStep
Ligne = Application.Small(Arr, i) : variable non définie.

Dans ton fichier, ce problème ne se pose pas.

16menus.zip (304.31 Ko)

Bonjour BsAlv,

Si j'ai bien compris, on choisit un des trois M.Print (avec le recours à globalconstantes) puis le programme va dans la procédure M.Préparation et fait ses calculs pour savoir où placer les sauts de page, combien de pages que cela va donner. Il est donc inutile que je crée une procédure M.Préparation_Retraite, M.Préaration_journalière, M.Préparation_MVMWE ? Le msgbox va se modifier automatiquement également ? Question toujours sans réponse : si je modifie le zoom, où en verrais-je le résultat ? Dans les M.Print, il est fait mention de 10 pages : or cela est valable uniquement pour MMR. Pour journaliers et viandes midi weekend, c'est respectivement supérieur et inférieur 18 et 3).

Arr = Evaluate("if(A1:A10000=""Numéro du menu"", Row(A1:A10000), le 7)") : c'est bien le 7 ? Que représente le 7

ce n'est pas "le 7" mais "1E7", donc la notation scientifique de la valeur 10.000.000, une valeur plus grande que le nombre de lignes dans la feuille (+1.048.000). Donc cette ligne crée une matrice (disons une liste dans une colonne de 10.000 valeurs (égal au nombre de lignes de A1:A10000) et chaque élément est oubien 1E7 (donc ce chiffre) si la ligne n'est pas "Numéro du menu" oubien le numéro de la ligne, si la ligne l'est. Et puis on traite toutes les valeurs en séquence ascendante qui sont plus petites que 1E7 (10.000.000).Donc dans la feuille "...midi retrait" ce sera 2, 16, 30, 44, 58, 72, 86, 100, 114, ...,,478,492,506 et 520. Tout le reste est 1E7

vos 3 macros qui appèlent la macro "M_Préparation" avec ses 3+1 variables seront :

Sub M_Print_Midi_Retrait()
     'xlLandscape : Indique l'orientation de page lors de l'impression de la feuille de calcul.xlLandscape 2 _
      Mode Paysage, xlandscape 1 : Mode portrait. Sur dix pages en "Landscape" et zoom de 45 (à ajuster).
     M_Préparation Sheets("Propositions menus midi retrait"), xlLandscape, 10, 45
End Sub

Sub M_Print_Journalier()
     'xlLandscape : Indique l'orientation de page lors de l'impression de la feuille de calcul.xlLandscape 2 _
      Mode Paysage, xlandscape 1 : Mode portrait. Sur dix pages en "Landscape" et zoom de 45 (à ajuster).
     M_Préparation Sheets("Propositions menus journaliers"), xlLandscape, 18, 45 'ici 18 pages et le zoom de 45 encore à adapter
End Sub

Sub M_Print_Viandes_MWE()
     'xlLandscape : Indique l'orientation de page lors de l'impression de la feuille de calcul.xlLandscape 2 _
      Mode Paysage, xlandscape 1 : Mode portrait. Sur dix pages en "Landscape" et zoom de 45 (à ajuster).
     M_Préparation Sheets("Propositions menus viandes MWE"), xlLandscape, 3, 45  'ici 3 pages et le zoom de 45 encore à adapter
End Sub

Vous verrez le résultat provisionel sur l'écran et dans le coin bas&gauche, on indique le nombre de pages (par exemple "page 1 de 10") et si ce nombre est plus petit ou égal au nombre de pages que vous voulez pour ce menu (vos chiffres 10, 18 ou 3), vous pouvez agrandir le "zoom", ce dernier chiffre qui est maintenant 45 pour les 3. Vous faitez cela manuellement et pour chaque rapport et en intervalles de 5, donc 50, puis 55, 60 ... jusqu'au moment où le nombre de pages se double dans le coin gauche&bas. Alors, ce chiffre est devenu trop grand et vous devez reculer par exemple en pas de -2 jusqu'au moment où le nombre de pages et de nouveau okay. C'est quelque chose que je ne sais pas automatiser et qui dépend un peu du choix de votre imprimante. Et c'est normal que ce dernier chiffre (initial=45) ne sera pas le même pour les 3 macros.

image

Pour "...midi retrait", vous voyez ce message, donc en total 38 menus (=38 "Numéro du menu" dans votre colonne A) et max 10 pages = 4 menus sur une page.

page 1 = les 4 premiers menus

page 2 commence au 5ième menu, donc on insère une saute de page juste avant celui, dans ma séquence ici dessus le 5ième, c'est 58, donc page2 commence avec ligne 58-1=57, puis le 9ième = "114", page 3 commence à la ligne 114-1=113, etc

2, 16, 30, 44, 58, 72, 86, 100, 114, ...,,478,492,506 et 520

et ".HPageBreaks.Add Before:=.Cells(Ligne - 1, "A")"

Bonjour BsAlv,

Merci pour ces informations. Merci de voir le message d'hier de 16h58 et de confirmer ou d'infirmer ce que j'ai écrit. Merci d'y apporter des compléments d'information si tu le juges nécessaire.

Bonnes journée et continuation. Prends bien soin de toi.

Merci. Je n'arrive pas à copier l'image de menu midi retraite pour la transférer dans mon fichier. Est-ce possible et, si oui, comment procéder ?

Sauf RightFooter= _
n° de page et total nombre de pages.
.RightFooter = "&P de &N" : je n'ai pas compris le sauf RightFooter.

Dans votre fichier, exécution de Print1 : dépassement de capacité.

9menus-bsalv.xlsm (245.52 Ko)

Dans mon fichier; une erreur également en exécutant Print1 : incompatibilité de type sur cette ligne :

If Ligne < Rows.Count Then .HPageBreaks.Add before:=.Cells(Ligne - 1, "A") Else Exit For

14menus-2026.xlsm (269.49 Ko)

print1, c'était une réponse à une question,il y a quinze jours,supprimez-la

Bonsoir BsAlv,

Je supprime quoi et où ?

Feuille Propositions menus midi retrait : sélectionner toute la feuille (ou sélectionner uniquement le tableau, le problème est identique), supprimer; Accueil; format, format de cellule, onglet bordure, clic sur aucune; Feuille propositions menus midi retrait : onglet couleur de remplissage : cocher la case aucun remplissage. La feuille propositions menus midi retrait est entièrement vide, prête à être remplie. Clic sur développeur, 1) Clic sur macros, clic sur Générer propositions mmr, clic sur l'onglet exécuter puis clic sur la macro M_print1 puis clic sur l'onglet exécuter : incompatibilité de type. 2) clic sur macros, clic sur M_print1 (sans passer par générer propositions mmr), clic sur l'onglet exécuter : erreur : incompatibilité de type (la feuille reste vide) : la ligne suivante s'entoure de jaune :

If Ligne < Rows.Count Then .HPageBreaks.Add before:=.Cells(Ligne - 1, "A") Else Exit For

Merci de me répondre rapidement car j'ai besoin de la réponse afin de pouvoir traiter les deux autres feuilles propositions.

avec votre dernier fichier "menu-2026" et sans la macro "print1"

8menus-2026-2.xlsm (255.44 Ko)

Bonjour BsAlv et Jean-Paul,

Merci de m'aider à résoudre ces deux problèmes.

Feuille Propositions menus midi retrait : sélectionner toute la feuille (ou sélectionner uniquement le tableau, le problème est identique), supprimer; Accueil; format, format de cellule, onglet bordure, clic sur aucune; Feuille propositions menus midi retrait : onglet couleur de remplissage : cocher la case aucun remplissage. La feuille propositions menus midi retrait est entièrement vide, prête à être remplie. Clic sur développeur, 1) Clic sur macros, clic sur Générer propositions mmr, clic sur l'onglet exécuter puis clic sur la macro M_print1 puis clic sur l'onglet exécuter : incompatibilité de type. 2) clic sur macros, clic sur M_print1 (sans passer par générer propositions mmr), clic sur l'onglet exécuter : erreur : incompatibilité de type (la feuille reste vide) : la ligne suivante s'entoure de jaune :

Dans votre fichier, exécution de Print1 : dépassement de capacité.

menus-bsalv.xlsm (245.52 Ko)

Dans mon fichier; une erreur également en exécutant Print1 : incompatibilité de type sur cette ligne :

If Ligne < Rows.Count Then .HPageBreaks.Add before:=.Cells(Ligne - 1, "A") Else Exit For

menus-2026.xlsm (269.49 Ko)

re,

je suis un bénévole et j'essaie à répondre au mieux possible, donc ma réponse de dimanche passé était "print1, c'était une réponse à une question,il y a quinze jours,supprimez-la", donc j'ai supprimé ce "print1" et remplacé par 3 autres (une par feuille) dans ma réponse de ce matin

Bonjour à tous,

Dans mon fichier; une erreur également en exécutant Print1 : incompatibilité de type sur cette ligne :

Avez vous regardé la valeur des variables i et iStep ? Si vous effacez toutes les lignes ou leurs contenu les valeurs retournées seront 0 pour i et iStep. Donc 0/0 = la tête à Toto . Enfin plutôt coup de pied de VBA. Car vous tentez d'arrondir (Ceiling.Match) une valeur qui est en erreur. Donc pour que cette procédure fonctionne il faut laisser les données sur la feuille.

Dans mon fichier; une erreur également en exécutant Print1 : incompatibilité de type sur cette ligne :

Là encore si vous regardez de plus prêt le ligne :

Arr = Evaluate("if (A1:A533=""Numéro du menu"",row(A1:A533),1e7)")

Vous verrez que la fonction Evaluate renvoie une erreur (2015).

Quand on utilise la fonction Evaluate il faut impérativement gérer les erreurs et les retour non voulu.

Donc sur la ligne : If Ligne < Rows.Count Then .HPageBreaks.Add before:=.Cells(Ligne - 1, "A") Else Exit For Vous testez si une erreur est inférieure à Rows.count. La blague...

Il y aurait beaucoup d'autres choses à dire mais bon...

la macro "print1" est démodée, c'était une version de 2 semaines passées.

Voir mon PJ de 11:49 et oubliez le passé.

Bonjour BsAlv, Jean-Paul

Désolé de vous avoir dérangé inutilement, mais je n'ai pas eu de message m'informant d'une réponse, ni à 11h49, ni à 13h54. De même pour les réponses de Jean-Paul. C'est parfait ainsi Merci beaucoup.

Bonjour BsAlv et Jean-Paul,

J'ai compris les commentaires de Jean-Paul. J'ai repris l'ancien fichier de BsAlv (avant celui d'hier) et j'ai refait les mêmes manipulations et j'ai toujours eu le message de dépassement de capacité. J'ai fermé le fichier sans l'enregistrer puis j'ai l'ouvert à nouveau. J'ai refait les mêmes manipulations et là, au lieu de cliquer sur M_Print1, j'ai cliqué sur GénérerPropositionsMMR, la feuille s'est remplie; ensuite, j'ai cliqué sur M_Print1 et plus de message d'erreur. Je vous ai fait donc perdre votre temps inutilement, j'en suis très désolé. Je vais voir avec mon propre fichier et voir ce que cela va donner. Il y avait une erreur sur Rows. J'ai repris mon fichier et refait mes manipulations et j'ai toujours le mesage incompatibilité de type. J'ai fermé le fichier sans l'enregistrer puis je l'ai ouvert à nouveau. J'ai cliqué sur Générer propositions MMR, la s'est remplie; ensuite, j'ai cliqué sir M_Print1 et erreur : incompatibilité de type sur la ligne suivante :

If Ligne < Rows.Count Then .HPageBreaks.Add before:=.Cells(Ligne - 1, "A") Else Exit For

Passage de la souris sur cette ligne : Ligne = erreur 2015; Rows.count : 1048576;Cells(Ligne - 1, "A") incompatibilité de type

Mrci de m'expliquer le résultat du passage de la souris sur la ligne.

7menus.xlsm (291.12 Ko)

Bonjour à tous,

@Budget,

Mrci de m'expliquer le résultat du passage de la souris sur la ligne.

J'ai l'impression que vous ne lisez pas correctement nos posts.

Je vous ai déjà expliqué que la variable ligne était en erreur, car la fonction Evaluate renvoyait une erreur.

Juste pour le fun une application qui crée un nombre de menus par rapport à une liste. (Les temps de calculs sont long ne pas mettre 365 menus dans la quantité) Mais bon qui gère plus d'une semaine de menu à la fois ?

Bonjour Jean-Paul,

Cela ne m'explique pas les contenu du passage de la souris sur la ligne erronée. D'autre part, il y a une erreur dans votre fichier : variable non définie.

Rechercher des sujets similaires à "feuille propositions menus midi retrait creer macro sauts"