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
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 :
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 SubBonsoir,
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,
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.PrintOutBonjour,
et merci à vous pour votre merci
Donc cela fonctionne ? je suis content pour vous !
@ bientôt
LouReeD


