Impression et numérotation page aléatoire

Bonsoir

voici une partie du code en essayant de comprendre ce que vous dites...

    ' vous rendez visible les feuilles à imprimer
    Sheets("OP-MA ML (Ion 1)<").Visible = True
    Sheets("OP-MA ML (Ion 1)>").Visible = True
    Sheets("FM-MLC (Ion 2)<").Visible = True
    Sheets("FM-MLC (Ion 2)>").Visible = True
    Sheets("FM-MLC (Ion 3)<").Visible = True
    Sheets("FM-MLC (Ion 3)>").Visible = True
    Sheets("FM-MLC (Ion 4)<").Visible = True
    Sheets("FM-MLC (Ion 4)>").Visible = True
    Sheets("FM-MLC (Ion 5)<").Visible = True
    Sheets("FM-MLC (Ion 5)>").Visible = True
    Sheets("FM-MA (Ion 6)<").Visible = True
    Sheets("FM-MA (Ion 6)>").Visible = True
    Sheets("FM-MA (Ion 7)<").Visible = True
    Sheets("FM-MA (Ion 7)>").Visible = True
    Sheets("FM-MLC (Ion 8)<").Visible = True
    Sheets("FM-MLC (Ion 8)>").Visible = True
    Sheets("Cran de Bille Ion").Visible = True
    Sheets("Foret MSM10 Ion").Visible = True
    Sheets("Foret W1B81 Ion").Visible = True
    Sheets("Foret W1B90 Ion").Visible = True

    ' et voici les feuilles non concerné par l’impression donc vous les ccacher

    Sheets("Calcul IonBond").Visible = False
    Sheets("Récap envoie IonBond").Visible = False
    Sheets("Total IonBond").Visible = False
    Sheets("achat-catalogue jour IonBond").Visible = False
    Sheets("Expéditions IonBond Jour").Visible = False
    Sheets("Expédition IonBonD Semaine").Visible = False
    Sheets("Couts par RG IonBond").Visible = False
    Sheets("Expéditions IonBond mois").Visible = False

    ' ensuite on lance une boucle pour compter le nombre de page total à imprimer
    ' exemple : 2 pages pour le premier onglet, 1 page pour le deuxième onglet, 3 pages sur le troisième onglet
    ' total de page à imprimer 6 pages, on met 6 en mémoire dans la variable NB_P (nombre de page)
    Dim i As Integer, NB_P As Integer
    NB_P = 0
    For i = 1 To Worksheets.Count
        If Sheets(i).Range("AA1").Value > 0 And Sheets(i).Visible = True Then
            NB_P = NB_P + (Sheets(i).HPageBreaks.Count + 1) * (Sheets(i).VPageBreaks.Count + 1)
        End If
    Next i

    ' ensuite on sélectionne toutes les feuilles à imprimmer elles doivent être visible et avoir la cellule AA1>0
    ' on utilise une boucle qui teste toutes les feuilles, et si les deux conditions sont respectées
    ' alors on ajoute l'onglet à la sélection
    ' cette boucle fait une sélection multiple de type "CTRL" comme vous pourriez le faire sous Excel
    ' avec des clic successif sur les onglets voulus avec la touche CTRL appuyée
    Dim Feuille As Worksheet
    For Each Feuille In ActiveWorkbook.Sheets
    If Feuille.Range("AA1").Value > 0 And Feuille.Visible = True Then
        Feuille.Select Replace:=False
    End If
    Next Feuille

    ' on gère la mise en page de l'impression
    Selection.PageSetup.FirstPageNumber = 1 ' on commence la numérotation automatique des pages à 1
    Selection.PageSetup.RightHeader = "&P" & "/" & NB_P ' on incrémente donc automatiquement de 1 à 6 avec une mise en forme de
                                                        ' tupe 1/6, 2/6, 3/6 etc où 6 est la valeur mise en mémoire avec NB_P

    ' et là on imprime la sélection
    ActiveWindow.SelectedSheets.PrintOut

@ bientôt

LouReeD

Bonjour LouReed j'ai fait l'essai mais la macro bloque sur " Selection.PageSetup.FirstPageNumber = 1 " voir l'image merci pour votre aide

erreur macro impression

Bonsoir,

voir le fichier joint ! Chez moi ça marche, il faut l'adapter à votre fichier.

Le principe :

Par défaut, toutes les feuilles imprimables on leur mise en page de définie comme sur la photo ci-dessous hors code VBA :

impression

Ensuite le code cherche la première feuille à imprimer afin de la sélectionner.

puis la boucle sélectionne toutes les feuilles à imprimer avec la boucle qui test si A1<>"" (dans mon fichier) et si la feuille est visible.

Ensuite on demande simplement d'imprimer, et grâce à la mise en page par défaut de toutes les feuilles, la numérotation est directement gérée par Excel, donc beaucoup plus simple !!!

@ bientôt

LouReeD

Bonsoir LouReed, ok macro marche mais un petit problème il imprime toutes les pages même si " AA1 " et vide es-que c'est la formule en " AA1 " qui fait que c'est non vide ?

Merci pour ton aide et ta patience.

Bonjour,

attention, dans mon fichier, c'est la cellule A1 qui est testée, alors si vous avez fait un copier/coller, il vous faut modifier le A1 en AA1

@ bientôt

LouReeD

Bonjour LouReed oui j'ai modifier les adresses " A1 " en " AA1 "

Bonsoir,

ce n'est pas du à cela car sur le fichier joint la feuille 2pages1 à une formule en A1 qui donne le résultat nul et elle n'est pas prise dans le preview de l'impression....

Est-ce que le fichier joint fonctionne chez vous ?

Avez vous "mise en page" toutes les feuilles sur votre fichier ?

@ bientôt

LouReeD

Bonsoir LouReed, oui le fichier marche chez moi je récupère le code je modifie A1 en AA1 voir mon code simplifier pour essai mais non j'ai aperçu de toute mes feuilles même si AA1 et vide ?

Mise en page idem a votre fichier, a part que je mais en pied de page

Sub voire()

    Sheets("OP-MA ML (Ion 1)<").Visible = True
    Sheets("OP-MA ML (Ion 1)>").Visible = True
    Sheets("FM-MLC (Ion 2)<").Visible = True
    Sheets("FM-MLC (Ion 2)>").Visible = True
    Sheets("FM-MLC (Ion 3)<").Visible = True
    Sheets("FM-MLC (Ion 3)>").Visible = True
    Sheets("FM-MLC (Ion 4)<").Visible = True
    Sheets("FM-MLC (Ion 4)>").Visible = True
    Sheets("FM-MLC (Ion 5)<").Visible = True
    Sheets("FM-MLC (Ion 5)>").Visible = True
    Sheets("FM-MA (Ion 6)<").Visible = True
    Sheets("FM-MA (Ion 6)>").Visible = True
    Sheets("FM-MA (Ion 7)<").Visible = True
    Sheets("FM-MA (Ion 7)>").Visible = True
    Sheets("FM-MLC (Ion 8)<").Visible = True
    Sheets("FM-MLC (Ion 8)>").Visible = True
    Sheets("Cran de Bille Ion").Visible = True
    Sheets("Foret MSM10 Ion").Visible = True
    Sheets("Foret W1B81 Ion").Visible = True
    Sheets("Foret W1B90 Ion").Visible = True

    Sheets("Calcul IonBond").Visible = False
    Sheets("Récap envoie IonBond").Visible = False
    Sheets("Total IonBond").Visible = False
    Sheets("achat-catalogue jour IonBond").Visible = False
    Sheets("Expéditions IonBond Jour").Visible = False
    Sheets("Expédition IonBonD Semaine").Visible = False
    Sheets("Couts par RG IonBond").Visible = False
    Sheets("Expéditions IonBond mois").Visible = False
    Sheets("Référence").Visible = False
    Sheets("FM ESSAI IonBond").Visible = False
    Sheets("Enveloppe IonBond").Visible = False
    Sheets("Détail IonBond").Visible = False
    Sheets("Les modifs apporttées").Visible = False
    Sheets("Zap").Visible = False
    Sheets("Liste").Visible = False

' --------------------------------------

    Dim i As Integer, NB_P As Integer
    Dim First_Page_Imprime As String

    First_Page_Imprime = ""
    NB_P = 0

    ' on cherche la première feuille devant être imprimée
    For i = 1 To Worksheets.Count
        If Sheets(i).Range("AA1").Value <> "" And Sheets(i).Visible = True Then
            First_Page_Imprime = Sheets(i).Name
            Exit For
        End If
    Next i

    ' on sélectionne la première feuille à imprimer
    Sheets(First_Page_Imprime).Select

    ' ensuite on sélectionne toutes les feuilles à imprimmer elles doivent être visible et avoir la cellule AA1>0
    ' on utilise une boucle qui teste toutes les feuilles, et si les deux conditions sont respectées
    ' alors on ajoute l'onglet à la sélection
    ' cette boucle fait une sélection multiple de type "CTRL" comme vous pourriez le faire sous Excel
    ' avec des clic successif sur les onglets voulus avec la touche CTRL appuyée
    Dim Feuille As Worksheet
    For Each Feuille In ActiveWorkbook.Sheets
        If Feuille.Range("AA1").Value <> "" And Feuille.Visible = True Then
            Feuille.Select Replace:=False
        End If
    Next Feuille

    ' on n'a plus à gerer la mise en page de l'impression car c'est déjà fait par défaut sur toutes les pages
    ' et là on imprime la sélection
    ActiveWindow.SelectedSheets.PrintPreview
    'ActiveWindow.SelectedSheets.PrintOut

' --------------------------------------

End Sub

Bonsoir,

reste plus que le mode pas à pas pour "voir" où cela coince, si je puis dire...

Pour ce faire, sous VBA, au niveau du code faite un clic gauche sur la marge de la fenêtre de code vba, un cercle rouge va apparaître : c'est un point d'arrêt d'exécution de code, une fois la procédure d'impression lancée, lorsque le code arrivera à ce point, il s'arrêtera, il vous suffira d'appuyer sur [F8] pour passer à la ligne de code suivante (pas à pas), l'avantage c'est qu'en mettant le pointeur de souris sur les variables du code, vba vous affiche leur valeur, et cela permet de "voir" les erreurs comme par exemple Range("AA1") <>"" avec range("AA1")= à vide...

Pour supprimer ce point d'arrêt il suffit de recliquer dessus...

@ bientôt

LouReeD

Bonjour LouReed et merci j'ai fait pas à pas je voie qu'il compte les feuilles ( 81 ) mais il sont toute cacher sauve les 20 concernées par l’impression, je vois qu'il vérifie si vide ou pas mais coche les feuilles même si vide ?

Bonjour LouReed voici des impressions d’écran de la macro pas à pas, mais je ne la comprend pas ?

b a

Bonjour,

en fait Feuille.Range("AA1").value <>""

devrait donner comme résultat en info bulle soit : vide, soit "" ou bien le nom de la feuille testée.

hors là il y a comme info : <variable objet ou variable de bloc With non définie>, ceci indique que VBA ne "connaît" pas Feuille !

Il y a un problème dans la définition Feuille... mais là je cale car chez moi ça marche bien !...

Votre fichier est trop gros pour me l'envoyer ? sinon regardez votre MP...

@ bientôt

LouReeD

Bonsoir un grand merci à LouReed pour la solution et désoler du retard pour clore le poste

voici la réponse de LouReed

      Dim i As Integer, NB_P As Integer
    Dim First_Page_Imprime As String

    First_Page_Imprime = ""
    NB_P = 0

    ' on cherche la première feuille devant être imprimée
    For i = 1 To Worksheets.Count
        If Sheets(i).Range("AA1").Value <> "" And Sheets(i).Visible = True Then
            First_Page_Imprime = Sheets(i).Name
            Exit For
        End If
    Next i

    ' on sélectionne la première feuille à imprimer
    Sheets(First_Page_Imprime).Select

    ' ensuite on sélectionne toutes les feuilles à imprimmer elles doivent être visible et avoir la cellule AA1>0
    ' on utilise une boucle qui teste toutes les feuilles, et si les deux conditions sont respectées
    ' alors on ajoute l'onglet à la sélection
    ' cette boucle fait une sélection multiple de type "CTRL" comme vous pourriez le faire sous Excel
    ' avec des clic successif sur les onglets voulus avec la touche CTRL appuyée
    Dim Feuille As Worksheet
    For Each Feuille In ActiveWorkbook.Sheets
        If Feuille.Range("AA1").Value <> "" And Feuille.Visible = True Then
            Feuille.Select Replace:=False
        End If
    Next Feuille

    ' on n'a plus à gerer la mise en page de l'impression car c'est déjà fait par défaut sur toutes les pages
    ' et là on imprime la sélection
    ActiveWindow.SelectedSheets.PrintPreview
    'ActiveWindow.SelectedSheets.PrintOut

Bonjour,

et merci à vous pour votre merci

Donc cela fonctionne ? je suis content pour vous !

@ bientôt

LouReeD

Rechercher des sujets similaires à "impression numerotation page aleatoire"