XL 2010 Macro pour modifier les params d'impression ?

ManuXZ

XLDnaute Junior
Bonsoir la communauté!!! ;-))

Je dois modifier les paramètres d'impression pour imprimer des invitations.
Au départ, j'avais commencé à créer une macro "à la mano" (qui ne fonctionnait pas....:-(() et je me suis dit ,
mais bien sûr !!! , utilisons l'enregistreur de macro !!! ; il m'a généré une macro (params complets d'édition !!! (je n'ai donc conservé que les lignes qui m'intéressaient !) mais snif, cela ne modifie pas plus les params d'impression...

PS: Il faut:
1/ saisir le nbre d'invitations,
2/ cliquer sur bouton "effacer feuille3" puis
3/ sur le bouton "edition feuille3"
4/ et je vais dans menu, fichier, imprimer
mais je constate que les marges personnalisées n'ont pas été changées ???

La macro :Result-final


Auriez-vous qqs idées ?

Merci bcp pour votre aide! (sûrement un truc tout bête !!;-)) )
 

Pièces jointes

  • TEST-EDITION.xlsm
    33 KB · Affichages: 12

TooFatBoy

XLDnaute Barbatruc
par ce qe clearcontents déformate et défusionne aussi
tout du moins sur ce fichier
Tu veux dire avec ta macro 🙃 :
Enrichi (BBcode):
Sub clearPage()
    With Feuil2
        derlig = .Cells(Rows.Count, "A").End(xlUp).Row
        If derlig = 18 Then Exit Sub
        .Range("A19:A" & derlig).EntireRow.Delete
        For I = Feuil2.Shapes.Count To 2 Step -1: DoEvents: Feuil2.Shapes(I).Delete: Next
        .Range("G2,F4,A8,C10,C12,C13,A16,A18") = ClearContents
    End With
End Sub



T'es sûr que ce n'est pas à cause d'un petit problème dans le contrôle de ta macro ClearPage, que tu as l'impression que ça défusionne, alors qu'en fait ça supprime juste les lignes ?
Un simple <19 à la place du =18 devrait suffire à résoudre ce problème.



Il y a aussi un problème dans ta macro de remplissage des invitations : ça n'inscrit pas toutes les données de la feuille de saisie.



Si tu corriges ces petites erreurs, ainsi que celle de la borne supérieure, et que tu remplaces le "For Each Cel" pour éviter de boucler inutilement sur 50000 cellules, alors ça devrait être pas mal.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour
@TooFatBoy
non le "=clearcontents" c'est une erreur de frappe dans mon code c'est bien ". clearcontents"
et je te garantie que ca efface oui mais ça défusionne et déformate aussi
mais je le redis ca le fait sur sur son fichier
mais quand je teste vite fait sur un fichier vierge 2013 ca le fait pas
 

patricktoulon

XLDnaute Barbatruc
re
on optimise un peu plus
comme tout le monde est content
plus de boucle for each
le clearcontents comprends les fusions
VB:
Sub clearPage()
    With Feuil2
        derlig = .Cells(Rows.Count, "A").End(xlUp).Row
        If derlig <= 18 Then Exit Sub
        .Range("A19:A" & derlig).EntireRow.Delete
        For I = Feuil2.Shapes.Count To 2 Step -1: DoEvents: Feuil2.Shapes(I).Delete: Next
         Range("F4,A8:F8,C10:E10,C12,C13,A16:F16,A18").ClearContents
     End With
End Sub


Sub createcopy()
   Dim F As Worksheet, plage1 As Range, I&, cel As Range, cell As Range, A&
   clearPage
    Set F = Feuil2
    Set plage1 = F.[A1:G19]
    'ecriture des données
    With F
        .[A8] = Feuil1.[b4]
        .[c10] = Feuil1.[b7]
        .[c12] = Feuil1.[b10]
        .[c13] = Feuil1.[b13]
        .[A16] = Feuil1.[B19]
        .[A18] = Feuil1.[B22]
    End With
    nombre = Feuil1.[b25]

    For I = 1 To nombre - 1
        Set cel = F.Range("A" & (19 + 1) * I)
        plage1.Copy cel
        F.Shapes(I + 1).Top = cel.Top + 10
        F.Shapes(I + 1).Left = 15
      If I Mod 3 = 0 Then F.HPageBreaks.Add Before:=cel ' 1 invit par feuille A4 (mettre mod 2 pour imprimer deux invit par feuille)
     cel.Offset(1, 6) = I + 1
     Next
 
F.PrintPreview

End Sub
  1. voila pas besoin de feuil3
  2. ca fait la premiere
  3. et ca la copie à la suite en dessous dans la feuil2
  4. le numero de l'invitation est incrémenté par l'index de boucle lui même
  5. la sub clearpage efface tou sauf la première
  6. 3 invits par page
  7. pour bien cadrer 3 invit par pages je reduit dans les param imprimante à 95% de la page
le code est si simple que ca vaut même pas la peine d'en débattre
🤪
1706946676364.png

entierement refait sur 2013
 

Pièces jointes

  • TEST-EDITION.xlsm
    28.7 KB · Affichages: 3

TooFatBoy

XLDnaute Barbatruc
Ben voilà. Ce n'était pas si compliqué. ;)

C'est marrant, après que tu aies suivi mon conseils pour corriger ton code, ça donne quasiment avec le même code que moi.
Enfin... à ceci près que moi, et je ne sais pas pourquoi, je n'ai pas besoin de passer l'imprimante à 97 %.
Et aussi, dans mon code j'ai inclus la configuration de l'imprimante (marges et centrage horizontal) car c'est ce que j'avais compris de la question originelle.


[edit]
J'ai trouvé pourquoi je n'ai pas besoin de passer l'imprimante à 97 %. C'est par ce que je fais comme dans le code d'origine : je ne copie que 18 lignes et non 19, toutes les 18 lignes et non toutes les 19 lignes. 😉
[/edit]

[edit2]
Merci à patricktoulon pour son code, en particulier la partie pour recopier et effacer les images.👍
Maintenant que son code est fonctionnel j'attends de voir l'optimisation. 😅
Bonne continuation et bon week-end à tous ! 🖖
[/edit2]
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
oui chez moi il y a une ligne vide en haut et une ligne vide en bas
sinon la phrase du bas est trop basse c'est pas joli
pour le centrage et les marge je l'ai fait mano mano et j'ai plus besoin de toucher par vba
(c'est pas la peine )
c'est quoi ton code en fait je l'ai pas vu
tu fais sur la feuille 3 ou comme moi dans la feuille 2?
 

TooFatBoy

XLDnaute Barbatruc
pour le centrage et les marge je l'ai fait mano mano et j'ai plus besoin de toucher par vba
(c'est pas la peine )
Oui, c'est pas mal non plus comme idée. 👍

J'avais aussi fait ça, mais après je me suis dit que si un cambrioleur venait chez moi, utilisait le PC et l'imprimante, et qu'il déconfigurait l'imprimante, après ça pouvait merder lors de la prochaine impression d'une invitation. 😅



c'est quoi ton code en fait je l'ai pas vu
tu fais sur la feuille 3 ou comme moi dans la feuille 2?
Il y a le code que j'avais posté et qui a été optimisé par le demandeur (voir #21).

Mais le code dont je parlais en #36, tu ne l'as effectivement pas vu puisque je ne l'ai pas posté.
Comme tu as dit qu'il ne fallait utiliser que deux feuilles, je suis en fait parti de ton code (qui m'apprenait comment copier/coller des images) et je l'ai modifié par rapport aux soucis que je rencontrais en le faisant tourner (par exemple : suppression de lignes si la cellule A18 n'était pas remplie, une invitation de trop).

Donc ton code final et "mon code" qui est en fait le tien modifié par moi, sont quasiment identiques.


Sur ce, bon week-end 🖖
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
pour info
quand tu copie un plage et qu'une image s'y trouve elle est copiée avec
par contre quand tu copie une seule cellule qui contient une petite image elle n'est pas copiée
A MOINS QUE !!!
tu précède la ligne "cellule.copy" par
Application.CopyObjectsWithCells = True
comme ca tu le saura
;)
demo.gif
 

TooFatBoy

XLDnaute Barbatruc
pour info
quand tu copie un plage et qu'une image s'y trouve elle est copiée avec
par contre quand tu copie une seule cellule qui contient une petite image elle n'est pas copiée
A MOINS QUE !!!
tu précède la ligne "cellule.copy" par
Application.CopyObjectsWithCells = True
comme ca tu le saura
Cool. Merci !

Maintenant je le sais. Et j'ai même compris le principe. ;)
Malheureusement, pas sûr que je ma mémoire s'en rappelle quand j'en aurais besoin... :(
 

Franc58

XLDnaute Occasionnel
re
on optimise un peu plus
comme tout le monde est content
plus de boucle for each
le clearcontents comprends les fusions
VB:
Sub clearPage()
    With Feuil2
        derlig = .Cells(Rows.Count, "A").End(xlUp).Row
        If derlig <= 18 Then Exit Sub
        .Range("A19:A" & derlig).EntireRow.Delete
        For I = Feuil2.Shapes.Count To 2 Step -1: DoEvents: Feuil2.Shapes(I).Delete: Next
         Range("F4,A8:F8,C10:E10,C12,C13,A16:F16,A18").ClearContents
     End With
End Sub


Sub createcopy()
   Dim F As Worksheet, plage1 As Range, I&, cel As Range, cell As Range, A&
   clearPage
    Set F = Feuil2
    Set plage1 = F.[A1:G19]
    'ecriture des données
    With F
        .[A8] = Feuil1.[b4]
        .[c10] = Feuil1.[b7]
        .[c12] = Feuil1.[b10]
        .[c13] = Feuil1.[b13]
        .[A16] = Feuil1.[B19]
        .[A18] = Feuil1.[B22]
    End With
    nombre = Feuil1.[b25]

    For I = 1 To nombre - 1
        Set cel = F.Range("A" & (19 + 1) * I)
        plage1.Copy cel
        F.Shapes(I + 1).Top = cel.Top + 10
        F.Shapes(I + 1).Left = 15
      If I Mod 3 = 0 Then F.HPageBreaks.Add Before:=cel ' 1 invit par feuille A4 (mettre mod 2 pour imprimer deux invit par feuille)
     cel.Offset(1, 6) = I + 1
     Next
 
F.PrintPreview

End Sub
  1. voila pas besoin de feuil3
  2. ca fait la premiere
  3. et ca la copie à la suite en dessous dans la feuil2
  4. le numero de l'invitation est incrémenté par l'index de boucle lui même
  5. la sub clearpage efface tou sauf la première
  6. 3 invits par page
  7. pour bien cadrer 3 invit par pages je reduit dans les param imprimante à 95% de la page
le code est si simple que ca vaut même pas la peine d'en débattre
🤪
Regarde la pièce jointe 1189871
entierement refait sur 2013
Bonjour, je vais me permettre l'une ou l'autre petite remarque en toute bienveillance.
1. Dans la macro clearPage, comme on est dans une boucle With Feuil2, je ne l'écrirais plus dans la boucle for...next et je ferais: For I = .Shapes.Count To 2 Step -1: DoEvents: .Shapes(I).Delete: Next
2. Dans la macro createCopy, pour éviter d'écrire Feuil1 à chaque ligne, je ferais une double boucle with comme ceci:
VB:
    With F
        With Feuil1
            .[A8] = .[b4]
            .[c10] = .[b7]
            .[c12] = .[b10]
            .[c13] = .[b13]
            .[C15] = .[B16]
            .[A16] = .[B19]
            .[A18] = .[B22]
        End With
    End With
au passage, dans ton code il manque la valeur de Feuil1.[B16] qui doit aller dans Feuil2.[C15]
3. Pour éviter les problèmes de fusion/défusion, j'utilise l'alignement centré sur plusieurs colonnes, on obtient le même résultat qu'une fusion mais chaque cellule reste indépendante.

La structure du code ne change pas, c'est purement cosmétique ;)
 

Franc58

XLDnaute Occasionnel
re
VB:
 With F
        With Feuil1
            .[A8] = .[b4]
            .[c10] = .[b7]
            .[c12] = .[b10]
            .[c13] = .[b13]
            .[C15] = .[B16]
            .[A16] = .[B19]
            .[A18] = .[B22]
        End With
    End With
bonsoir
tu n'est pas serieux là... si !!??
🤪 on marche sur la 🙃
et il n'y a plus de problème de défusion
je vais laisser @TooFatBoy te répondre
ben quoi, on parlait pas d'optimiser au maximum? 😂😂
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 275
Membres
103 170
dernier inscrit
HASSEN@45