XL 2010 code vba pour imprimer le nbr de pages indiquées d'onglets sélectionnés

sebbbbb

XLDnaute Impliqué
Bonsoir a toutes et tous

je bute sur un problème que j'aimerai vous soumettre.

Dans le 1er onglet du fichier en pJ se trouve un petit tableau pour indiquer quel onglet (sur les 5 au total) sera imprimé et le nbr de copie de chacun

un bouton devra pouvoir lancer l'impression

le top du top serait de lancer l'impression en mode 'copies NON assemblées

Pouvez vous m'aider svp ?

un grand merci par avance
seb
 

Pièces jointes

  • Classeur3.xlsm
    107.2 KB · Affichages: 69
Solution
??? moi aussi, j'ai Excel 2007, avec le bouton raccourci dont tu parles pour ajouter
une feuille (Maj F11) ; mais ce n'est pas pour autant que ça me crée une feuille
fantôme de nom "" ! quand j'exécute la macro qui affiche le nom des feuilles,
ça se termine bien avec la dernière feuille réelle "SWB service1" ; ça ne m'affiche
pas une fausse feuille supplémentaire "" ! là, je ne sais pas comment expliquer
cette différence de comportement (peut-être que c'est lié à une des options
d'Excel ? si oui, je ne vois vraiment pas laquelle !)
; et-tu bien sûr que tu n'as pas
de virus sur ton PC ? sinon, maintenant que la cause du plantage est connue,
le remède est simple ; mets la boucle For I ... Next I comme ceci ...

soan

XLDnaute Barbatruc
Inactif
Réponse à ton post #31 (pour la copie des feuilles)

1) tu lances Excel

2) tu ouvres ton fichier réel (= par exemple classeur "ABC")
onglet Révision, groupe Modifications, clique sur « Ôter la protection du classeur »
(bien sûr, si ton classeur réel a été protégé avec un mot de passe, il faut le saisir !)


3) tu fais Ctrl n ➯ nouveau classeur vierge (= Classeur1)

4) tu vas sur "ABC" (utilise : onglet Affichage, groupe Fenêtre, Changement de fenêtre)

5) tu sélectionnes toutes les feuilles ➯ [Groupe de travail] (c'est noté dans la barre
de titre de la fenêtre Excel)


6) tu fais un clic droit sur un des onglets du [Groupe de travail] ; choisis l'item
« Déplacer ou copier... » ; coche la case « Créer une copie » ; choisis dans la liste
du haut Classeur1 ; sélectionne ce qu'il faut pour « Avant la feuille » ; clique sur
le bouton OK ➯ les feuilles sont copiées de "ABC" sur "Classeur1", et tu es sur
Classeur1.


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Réponse à ton post #32 (pour les liaisons entre onglets)

Comme tu as sélectionné toutes les feuilles, puis que tu as copié le [Groupe de travail],
je pense que les liaisons entre les onglets ont été conservés, mais vérifie quand même,
par précaution.

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Réponse à ton post #33 (pour la copie du code VBA)

1) les 2 classeurs sont ouverts ("ABC" et "Classeur1")

2) Alt F11 pour aller sur l'éditeur VBA

3) côté gauche, il y a la fenêtre « Projet » ; si tu ne la vois pas,
fais Ctrl r : ça affiche la fenêtre « Explorateur de projets ».

===================================================

4) dans cette fenêtre « Projet », tu dois voir 2 lignes « VBAProject » (en gras) :
1 ligne pour chacun des 2 fichiers ouverts ; sélectionne tous les modules de
"ABC" et fais un glisser-déposer juste en dessous de la ligne en gras qui est
pour "Classeur1" ; ça y'est : tes modules ont été copiés ; mais attention :
ce n'est pas fini ! il faut copier aussi le code de ThisWorkbook et celui des
feuilles, ce qui n'est pas possible par glisser-déposer.

Dans le fichier que j'ai eu, il n'y a pas de code VBA dans ThisWorkbook ;
mais s'il y en a dans ton fichier réel, tu dois faire un copier/coller.


---------------------------------------------------------------------------------------

Je ne sais pas ce qu'il y a dans ton ThisWorkbook1 ; s'il est vide, ok : y'a rien
à copier/coller ; si c'est le même code que celui de ThisWorkbook, inutile de
le copier une 2ème fois ! si c'est un code différent, et qu'il te semble utile,
alors tu dois l'ajouter dans ThisWorkbook, mais pas n'importe comment !
en particulier : il ne peut pas y avoir de sub en double ! par exemple, il ne
peut y avoir qu'une seule sub Workbook_Open() ; donc n'en mets pas 2 ;
le code de Workbook_Open() de Thisworkbook1 (entre Sub et End Sub)
doit être copié/collé dans ThisWorkbook, cela juste avant le End Sub
de Workbook_Open().

Ce qui est dans le paragraphe précédent ne peut être que des généralités
vu que je ne connaît pas le code réel de ThisWorkbook1 (s'il y en a) ;
c'est en voyant le code réel qu'on peut décider au cas par cas ce qu'il est
le mieux de faire.


---------------------------------------------------------------------------------------

Pour le code VBA des feuilles, il y a déjà celui de shBL1 ; shPL1 ; shSWB1.

Peut-être y en a-t-il d'autres dans ton fichier réel ? (n'oublie rien !)

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Tu as envoyé plusieurs posts avec des questions ; j'y ai répondu successivement ;
mais 2 posts ont disparu, dont un où tu me demandais pourquoi ça boguait
(code VBA avec ligne en jaune) ; je suppose que tu les as supprimés ; pourquoi ?
tu as réussi à trouver la solution ? (si c'est ça, tant mieux ! :))

soan
 

sebbbbb

XLDnaute Impliqué
Rebonjour Soan, Kiki29
j'ai suivi les conseils de Soan et réinitialisé mon fichier de façon a ne plus avoir mon double this workbook (this workbook & this workbook1)
Tout est maintenant ok.
Le hic c'est que la macro pour imprimer a toujours un bug (même chose qu'avant). je n'y comprends rien. Voyez vous quelque chose qui pourrait clocher ?
Je m'arrache les chaveux :cool:
je précise que j'ai d'autres onglets (une centaine) qui sont cachés

1599921232770.png


1599921280523.png


merci par avance
seb
 

soan

XLDnaute Barbatruc
Inactif
Dans ton post #26, tu as mis un lien WeTransfer ; j'ai cliqué dessus, mais avant
de pouvoir télécharger ton fichier, ça demande d'accepter des conditions de
service
; je les ai lues, par précaution, et ceci ne me plaît pas :

« Nous sommes en droit de modifier nos conditions, notre service ou nos tarifs
de temps à autre. »

Alors si ça devient payant, je ne veux pas courir le risque de recevoir une facture
simplement pour avoir téléchargé un fichier ; aussi, j'ai fermé l'onglet Web sans
cliquer sur le bouton bleu « J'accepte ».


La prochaine fois que tu joins un fichier, passe par un site de partage qui n'a
pas cet inconvénient ; par exemple mon-partage.fr (c'est gratuit).

soan
 

soan

XLDnaute Barbatruc
Inactif
Je viens de voir ton post #42 ; merci pour ton info.
Ce qui suit est par rapport à ton post
#39.

----------------------------------------------------------------------------------------------------

Même si tu as encore une erreur d'exécution, je suis content que ce soit réglé
pour ThisWorkbook1 : c'est tout de même un gros souci en moins ! :)

Voyons la suite ; c'est bien après avoir cliqué sur le bouton bleu que l'erreur se produit ?
(je vais supposer que oui) ; tu es bien sûr, n'est-ce pas, que le bouton bleu appelle la sub
Impression() et pas une autre : il y a peut-être une erreur d'affectation de macro (là aussi,
je vais supposer que oui) ; en fait, dans les 2 cas, je suppose que la réponse est « oui »
car tu montres que le code VBA s'est arrêté sur la ligne jaune de la sub Impression() ;
ce paragraphe est juste par « acquis de conscience » : on élimine ce qui d'évidence,
en principe, ne devrait pas poser de problème.


Maintenant, on va faire 2 tests.

Test n° 1 : juste après Next Wsh, met Exit Sub, comme ceci :
VB:
  Next Wsh
Exit Sub
Clique sur le bouton bleu ; normalement, il ne devrait plus y avoir d'exécution ;
donc ça va confirmer que c'est ok du début de la sub jusqu'au Next Wsh.

Si c'est ok, test n° 2 :
a) supprime la ligne Exit Sub que tu viens d'ajouter
b) transforme ainsi la boucle For I ... Next I :
Code:
    For I = 0 To UBound(Ar)
      MsgBox "I = " & I & vbLf & vbLf & "feuille """ & Ar(I) & """"
'     Set Wsh = Worksheets(Ar(I))
'     If WshAct.Range("BS" & j) = Ar(I) Then
'       Nb = WshAct.Range("CD" & j)
'       If Nb > 0 Then Wsh.PrintOut Copies:=Nb ', Collate:=False
'       j = j + 1
'     End If
    Next I
Tu peux voir que j'ai ajouté la ligne avec MsgBox ; et que j'ai mis
en commentaire (texte vert) les lignes qui sont dessous (sauf le
Next I)
; pour faire ça, j'ai juste mis une apostrophe en début de
ligne, rien de plus.

Quand j'exécute la sub sur mon PC, il n'y a pas d'erreur d'exécution ;
pour chaque feuille du classeur, ça affiche ce message :

«
I = (n° de la feuille - 1, car à partir de 0)
feuille "(nom de la feuille)"
»

J'ai donc ceci :

I = 0 ; et dessous : feuille "choix"
I = 1 ; et dessous : feuille "PORT DUES"
I = 2 ; et dessous : feuille "CLEARANCE"
etc...
I = 7 ; et dessous : feuille "BL Mobile1"
I = 8 ; et dessous : feuille "PL Mobile1"
I = 9 ; et dessous : feuille "Man Mobile1"
I = 10 ; et dessous : feuille "Receipt1"
I = 11 ; et dessous : feuille "SWB service1"

Sur ton PC, avec ton fichier réel, ça va sûrement planter sur une feuille ;
cette fois, tu sauras laquelle : ce sera celle qui est juste après la feuille
dont le nom a été affiché.

Sur mon PC, ça marche bien même si des feuilles sont masquées.


------------------------------------------------------------------------------

Je te laisse déjà voir tout ça ; moi, je dois m'absenter et je ne serai pas
de retour avant plusieurs heures ; je lirai ta réponse à mon retour ;
alors même si je vais beaucoup tarder à te répondre, ne pense pas
que je laisse tomber. ;)


soan
 

soan

XLDnaute Barbatruc
Inactif
Tu as écris : « que j'ai mis en écran joint » ; tu parles bien des 2 images du post #39 ?
ou d'un autre écran joint que tu as oublié de mettre dans ton post #44 ?

Tu as écrit : « c'est ensuite que cela se gâte » ; or si les impressions sont bien lancées,
je ne vois pas pourquoi ça s'arrête tout d'un coup... sauf si justement une feuille pose
problème, ce que mon test n° 2 te permettra de déterminer : tu sauras avec précision
jusqu'à quelle feuille ça marche, la suivante faisant planter la sub
.

Tu peux aussi te servir du mode débogage pour exécuter la macro en pas à pas. A+ !

soan
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87