RESOLU: Impression avec numérotation automatique

targa

XLDnaute Junior
Bonjour,
J'ai un modèle de feuille de réception, dans chacune de celle-ci possède un numéro de dossier unique qui commence par le numéro indiqué en cellule E4, puis additionne et numérote 20 feuilles (feuil1 à feuil20) selon la mention du texte en cellule E10.

Je souhaiterai simplifier et supprimer ttes ces feuilles 1 à 20 ou en garder une uniquement, car dans le cas actuel, j'imprime 20 feuilles à chaque fois.

J'aimerai pour le futur, mettre le chiffre de commencement (E4) et ensuite le nombre de page (cellule E10) que l'on souhaite imprimer.

Par exemple:
Si je mets 10 feuilles à imprimer en cellule E7, il faudrait que 10 feuilles s'impriment avec la numérotation 14-320 à 14-329 (14 faisant référence à l'année en cellule A1)

Si je mets début de numérotation 400 en cellule E4 et 5 feuilles à imprimer en cellule E7, il faut que 5 feuilles s'impriment avec la numérotation 14-400 à 14-404 (14 faisant référence à l'année en cellule A1)

Voilà, j'espère mettre bien fait comprendre, et un grand merci pour votre aide! :)

Cordialement
 

Pièces jointes

  • FEUILLE RECEPTION.xlsm
    502.4 KB · Affichages: 48
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Impression avec numérotation automatique

Bonjour targa, bonjour le forum,

14 faisant référence à l'année en cellule A1
Dans ton fichier exemple, il n'y as rien dans la cellule A1 de l'onglet Base ? Le code ci-dessous fonctionne si cette cellule est renseignée par l'année : 2014 ou 14. Il faudra l'adapter si c'est une date qu'il devrait y avoir en A1. Bref, difficile de trouver une solution avec un fichier exemple ne correspond pas aux explications...

J'ai tapé 2014 en A1 de l'onglet Base pour que le code ci-dessous fonctionne :
Code:
Sub impression()
Dim B As Object 'déclare la variable B (onglet Base)
Dim O As Object 'déclare la variable O (Onglets)
Dim A As Byte 'déclare la variable A (Année)
Dim NUM As Integer 'déclare la variable NUM (NUMéro)
Dim NB As Integer 'déclare la variable NB (NomBre)
Dim ND As String 'déclare la variable ND (Numéro de Dossier)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)

Set B = Sheets("Base") 'définit l'onglet B
A = IIf(Len(B.Range("A1").Value) = 4, Right(B.Range("A1").Value, 2), B.Range("A1").Value) 'définit l'année A (si c'est une date complète qu'il devrait y avoir dans A1 il faudra adapter)
NUM = CInt(B.Range("E4")) 'définit le numéro NUM
NB = CInt(B.Range("E7").Value) 'définit le nombre NB
ND = CStr(A & "-" & NUM) 'définit le numéro de dossier ND
For Each O In Sheets 'boucle sur tous les onglet du classeur
    If O.Range("A4").Value = ND Then I = O.Index: Exit For 'si la cellule A4 de l'onglet est égale à ND, récupère l'index de l'onglet, sort de la procédure
Next O 'prochain onglet de la boucle
For J = I To I + (NB - 1) 'boucle de J = I à J = NB - 1
    ActiveWindow.Sheets(J).PrintOut Copies:=1 'imprime l'onglet
    'Debug.Print ND, NB, Sheets(J).Range("A4")
Next J 'prochaine valeur de J
End Sub
Le fichier modifié :
 

Pièces jointes

  • Targa_v01.xlsm
    526.2 KB · Affichages: 44
  • Targa_v01.xlsm
    526.2 KB · Affichages: 51
  • Targa_v01.xlsm
    526.2 KB · Affichages: 68

targa

XLDnaute Junior
Re : Impression avec numérotation automatique

Bonjour Robert! :)

Merci pour ton fichier ! :)

Et bien cela va bien, au début il y avait justement l'année en cellule A1 sous forme de formule qui me donné 14 pour 2014.
Oui désolé entre deux j'avais modifié le fichier en voulant simplifier et j'ai pas mis à jour le texte dans ma demande. Désolé
J'ai juste à cacher ensuite la colonne, cela ira très bien.

Heuuuu, petit prob tout de même, j'ai testé ton fichier, mais apparemment chez moi j'ai un ptit souci, le code VBA bug. voir image ci-dessous:
alarme.jpg

Aurais-tu une solution?
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Impression avec numérotation automatique

Bonjour Targa, bonjour le forum,

Aïe ! C'est justement la seule ligne que j'ai récupérée de ton code à toi... Quand j'ai testé j'ai commenté cette ligne et activée celle en dessous (actuellement commentée).
Peut-être en faisant :
Code:
For J = I To I + (NB - 1)
     Sheets(J).Select
     Activewindow.ActiveSheet.Printout Copies:+1
Next I
 

targa

XLDnaute Junior
Re : Impression avec numérotation automatique

Bonjour Robert, bonjour le forum,

Merci déjà pour ton aide! :)

Aaah, c'est embêtant tout ça, j'ai testé ta proposition de code, mais j'ai encore une alarme, il me mets erreur de compilation, erreur de syntaxe... :-( bouhouhou.

Est-ce que quelqu'un d'autre dans le formum aurait une solution?

Merciiii ;)
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Impression avec numérotation automatique

Bonjour Targa, bonjour le forum,

C'est de ma faute car je n'ai pas testé le code avant de te le soumettre. C'est maintenant chose faite et ça devrai aussi fonctionner chez toi :
Code:
Sub impression()
Dim B As Object 'déclare la variable B (onglet Base)
Dim O As Object 'déclare la variable O (Onglets)
Dim A As Byte 'déclare la variable A (Année)
Dim NUM As Integer 'déclare la variable NUM (NUMéro)
Dim NB As Integer 'déclare la variable NB (NomBre)
Dim ND As String 'déclare la variable ND (Numéro de Dossier)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set B = Sheets("Base") 'définit l'onglet B
A = IIf(Len(B.Range("A1").Value) = 4, Right(B.Range("A1").Value, 2), B.Range("A1").Value) 'définit l'année A (si c'est une date complète qu'il devrait y avoir dans A1 il faudra adapter)
NUM = CInt(B.Range("E4")) 'définit le numéro NUM
NB = CInt(B.Range("E7").Value) 'définit le nombre NB
ND = CStr(A & "-" & NUM) 'définit le numéro de dossier ND
For Each O In Sheets 'boucle sur tous les onglet du classeur
    If O.Range("A4").Value = ND Then I = O.Index: Exit For 'si la cellule A4 de l'onglet est égale à ND, récupère l'index de l'onglet, sort de la procédure
Next O 'prochain onglet de la boucle
For J = I To I + (NB - 1) 'boucle de J = I à J = NB - 1
    Sheets(J).Select 'active l'onglet
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False 'imprime l'onglet actif
    'Debug.Print ND, NB, Sheets(J).Range("A4")
Next J 'prochaine valeur de J
B.Select 'sélectionne l'onglet Base
Application.ScreenUpdating = True 'afficge les rafraîchissements d'écran
End Sub
 

targa

XLDnaute Junior
Re : Impression avec numérotation automatique

Bonjour robert, bonjour à tous,

Pas de problème Robert, c'est déjà bien aimable à toi de vouloir m'aider ;)

merci pour la modif de ton code, mais tu vas rire, j'ai toujours une alarme. :rolleyes:
Voici: il me mets Erreur d'exécution 9: L'indice n'appartient pas à la sélection.
Alarme VBA.png

Tu y arriveras, j'en suis certain. ;)

En attendant je te remet le fichier à jour, comme il devra être lorsqu'il sera finit.

Donc pour petit rappel, dans l'onglet base, on indique en cellule E4, le début du commencement de la numérotation et en cellule E7, la quantité de feuille à imprimer, et la numérotation qui suit par rapport au nombre de feuille que l'on imprime.
Soit, dans l'exemple du fichier ci-contre, 5 feuilles de l'onglet Feuil1 devraient être imprimée avec une numérotation allant de: 14-320 à 14-324.
Cette numérotation se trouve en cellule (A4:C4) de l'onglet Feuil1.
Voilà, se petit rappel,et pour ceux aussi qui éventuellement prendraient la discussion en cours. ;)

Merci Robert, merci à tous! :)
 

Pièces jointes

  • Targa_v01.xlsm
    52.5 KB · Affichages: 31
  • Targa_v01.xlsm
    52.5 KB · Affichages: 38
  • Targa_v01.xlsm
    52.5 KB · Affichages: 37
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Impression avec numérotation automatique

Bonjour targa, bonjour le forum,

P... c'est la même feuille avec juste le numéro de dossier qui change ! Je viens de m'en apercevoir maintenant...
Bon c'est normal que ça plantait vu qu'en A4 de l'onglet Feuil1 tu avais la formule =Base!B1. Comme j'avais tout effacé dans la colonne B, A4 renvoyait : 0, J était égal à 0 et Sheet(0) = plantage...
Du coup, maintenant que j'ai enfin compris (sois indulgent je n'ai qu'un seul neurone...) j'ai complètement modifié le code. Plus de formule en A4, ce sont les renseignements de l'onglet Base (l'année, le numéro de départ et le nombre) qui renvoient le numéro de dossier dans la boucle avant d'imprimer. Un seul onglet suffit avec ce code :
Code:
Sub impression()
Dim B As Object 'déclare la variable B (onglet Base)
Dim F As Object 'déclare la variable O (Onglets)
Dim A As String 'déclare la variable A (Année)
Dim NUM As Integer 'déclare la variable NUM (NUMéro)
Dim NB As Byte 'déclare la variable NB (NomBre)
Dim ND As String 'déclare la variable ND (Numéro de Dossier)
Dim I As Integer 'déclare la variable I (Incrément)

Set B = Sheets("Base") 'définit l'onglet B
Set F = Sheets("Feuil1") 'définit l'onglet F
A = CStr(B.Range("A1").Value) 'définit l'année A
NUM = CInt(B.Range("E4")) 'définit le numéro NUM
NB = CByte(B.Range("E7").Value) 'définit le nombre NB
F.Select 'active l'onglet F
For I = NUM To NUM + (NB - 1) 'boucle de I = NUM à I = NUM + (NB - 1)
    ND = CStr(B.Range("A1") & "-" & I)
    F.Range("A4").Value = ND
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False 'imprime l'onglet actif
    'Debug.Print ND, NB, Sheets(J).Range("A4")
Next I 'prochaine valeur de J
F.Range("A4").ClearContents 'efface le contenu de la cellule A4 de l'onglet F
B.Select 'sélectionne l'onglet Base
End Sub
Le fichier :
 

Pièces jointes

  • Targa_v02.xlsm
    50.3 KB · Affichages: 35

targa

XLDnaute Junior
Re : Impression avec numérotation automatique

Yeeeh,
pas de soucis je t'en tiens vraiment pas rigueur.:eek:

Oui..., presque ça marche, mais désolé y encore une ptite alarme, après avoir fini d'imprimer, il me met encore l'alarme impossible de modifier une cellule fusionnée. !!!???
Encore une ptite solu pour moi.

Et merci pour ton dévouement, car moi j'y suis totalement perdu, tu es mon sauveur...;)
en attendant je te souhaite un bon appétit!
A+
 

targa

XLDnaute Junior
Re : Impression avec numérotation automatique

C'est bon Robert!
J'ai pas encore ton niveau pour le VBA, mais j'ai réussi à solutionner le dernier petit problème de cellule fusionnée.

J'ai tout simplement remplacé dans l'avant avant dernière ligne, le code qui sélectionne la cellule pour effacement.
Comme c'est une cellule fusionnée j'ai mis ceci:
Code:
F.Range("A4:C4").ClearContents 'efface le contenu de la cellule A4 de l'onglet F

voilà affaire résolue.

Un tout grand merci à toi Robert, pour avoir passé du temps et de m'avoir solutionné mon problème.;)

Je mets pour ceux qui cela intéresserait, le fichier finale

Excellente journée à tous
 

Pièces jointes

  • Targa_v03_finale.xlsm
    50.2 KB · Affichages: 44
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : RESOLU: Impression avec numérotation automatique

Bonjour Targa, bonjour le forum,

Oui c'est ça ! Mais encore une fois je suis vert de rage car j'ai testé le code et ça marchait. Juste avant d'envoyer le fichier j'ai vu qu'il y avait en A4 le dernier numéro de la boucle . Je me suis dit qu'il valait mieux l'effacer. J'ai rajouter la ligne sans tester... Et paf ! Encore désolé...
 

targa

XLDnaute Junior
Re : RESOLU: Impression avec numérotation automatique

Salut Robert, Salut le forum,

Lol, pas de problème, l'essentiel c'est que ça fonctionne. C'était une modif qui au moins était à ma portée. :eek:

Merci pour tout et je te souhaite un bon week-end.

Cordialement
 

Statistiques des forums

Discussions
312 162
Messages
2 085 858
Membres
103 005
dernier inscrit
gilles.hery