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 ...

kiki29

XLDnaute Barbatruc
Salut, shBL est le CodeName attribué à la feuille "BL Mobile1", à toi de tester, adapter à ton contexte.
VB:
Option Explicit

Sub Impression()
Dim i As Long, j As Long, Nb As Long
Dim Wsh As Worksheet, Ar() As String

    Application.ScreenUpdating = False
    Erase Ar
    For Each Wsh In ThisWorkbook.Worksheets
        ReDim Preserve Ar(i)
        Ar(i) = Wsh.Name
        i = i + 1
    Next Wsh

    j = 11
    For i = LBound(Ar) To UBound(Ar)
        Set Wsh = Worksheets(Ar(i))
        If shBL.Range("BS" & j) = Ar(i) Then
            Nb = shBL.Range("CD" & j)
            If Nb > 0 Then Wsh.PrintOut copies:=Nb ', Collate := False
            j = j + 1
        End If
    Next i

    shBL.Select
    Application.ScreenUpdating = True
End Sub

A lire : Sheets. PrintOut, méthode (Excel)
 

Pièces jointes

  • 1.png
    1.png
    16.7 KB · Affichages: 9
Dernière édition:

sebbbbb

XLDnaute Impliqué
bonjour kiki29
j'ai inséré le code dans mon fichier source (celui communiqué n'était qu'une partie), et j'ai un problème
serait ce parce que j'ai d'autres onglets qui s'affichent en même temps ? a noter j'ai également une multitude d'autres onglets qui sont cachés.
si le prob vient de là est il possible de sélectionner seulement les onglets listés (ou on affiche le nbr de copies a imprimer)
merci par avance
seb
 

sebbbbb

XLDnaute Impliqué
voici le code erreur que j'ai
1599469798301.png


lorsque je clique sur débogage voici ce qui apparait en jaune

For Each Wsh In ThisWorkbook.Worksheets

merci pour ton aide
seb
 

sebbbbb

XLDnaute Impliqué
EUREKA !
Je ne pratique pas l' extispicine non plus, mais j'ai trouvé le bug.
je ne sais pour quel raison j'ai 2 workbook. une qui s'appelle workbook et qui ne contient rien et le second workbook1 qui contient toutes les formules. Il suffisait donc que j'ajoute le 1.
Merci infiniment kiki29
seb
 

sebbbbb

XLDnaute Impliqué
Bonjour Kiki29, bonjour a tous

je me permets de te relancer car je me sens un peu frustré. Ton scrip fonctionne parfaitement bien mais j'aimerai le faire évoluer

en effet j'ai un fichier sur lequel j'ai enfin réussi a faire ce que je souhaitais c'est à dire, lorsque je clique sur le bouton NEW, les 5 onglets verts sont démultipliés et apparaissent avec un nom chronologique

Je souhaiterai intégré ton scrip pour que celui ci soit également opérationnel sur les nouveaux onglets créés

j'ajoute que le fichier joint est seulement un morceau du fichier mère qui lui comporte bcp plus d'onglets dont bcp sont cachés.

peut etre faut il que je fasse une autre discussion mais c'est tout de même un peu lié

merci a tous ceux qui voudront bien m'aider
seb
 

Pièces jointes

  • Classeur3.xlsm
    117.3 KB · Affichages: 3

kiki29

XLDnaute Barbatruc
Re, la procédure Impression modifiée, à toi de tester
VB:
Option Explicit

Sub Impression()
Dim i As Long, j As Long, Nb As Long, NbD As Long
Dim Wsh As Worksheet, WshAct As Worksheet, s As String, Ar() As String

    Application.ScreenUpdating = False
    Erase Ar
    For Each Wsh In ThisWorkbook.Worksheets
        ReDim Preserve Ar(i)
        If Wsh.Visible = -1 Then
            Ar(i) = Wsh.Name
            i = i + 1
        End If
    Next Wsh

    s = ActiveSheet.Name
    If InStr(s, "BL Mobile") > 0 Then
        Set WshAct = Worksheets(s)
        For i = 11 To 15
            NbD = NbCh(WshAct.Range("BS" & i))
            s = Left$(WshAct.Range("BS" & i), NbD)
            WshAct.Range("BS" & i) = s & WshAct.Range("BM3")
        Next i

        j = 11
        For i = LBound(Ar) To UBound(Ar)
            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
        WshAct.Select
    Else
        MsgBox "Sélectionnez une feuille BL Mobile" & vbCrLf & "Puis cliquez sur le bouton Impression", vbOKOnly + vbInformation
    End If
    Application.ScreenUpdating = True
End Sub

Private Function NbCh(s As String) As Long
Dim i As Long, Ch As String
    For i = 1 To Len(s)
        Ch = Mid$(s, i, 1)
        If Asc(Ch) >= 48 And Asc(Ch) <= 57 Then Exit For
    Next i
    NbCh = i - 1
End Function
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 145
Membres
103 130
dernier inscrit
FRCRUNGR