Impression étiquette VBA
Bonjour à tous,
Je suis actuellement apprentis dans une entreprise et l'on me demande de modifier une macro VBA déjà existante afin d'imprimer des étiquettes avec des paramètres variables. Pour des raisons de confidentialité, je ne vais pas pouvoir mettre mon fichier ou le vrai nom des paramètres mais je vais essayer d'expliquer au mieux.
Imaginons que je travaille dans l'agro-alimentaire et que je souhaite étiqueter des emballages de légumes. Sur l'étiquette on souhaite retrouver:
- Le nom du légume
- Le numéro de série (ils se suivent dans l'ordre croissant) ou la quantité de produit si il n'y a pas de numéro de série
- La référence dans la base de données
Actuellement ma macro consiste en un fichier Excel où l'on rentre ces trois informations, on valide, on rentre le nombre d'étiquettes que l'on souhaite, on valide et le nombre d'étiquette voulu s'imprime sur l'imprimante. Selon si on a rentré un numéro de série ou une quantité dans le critère 2, l'étiquette change automatiquement.
Ça, c'est la partie simple, sur laquelle j'ai déjà travaillé et qui est opérationnelle. Mais voilà, un collègue me demande que le numéro de série soit incrémenter en fonction du nombre d'étiquettes qu'on désire.
Exemple:
1ère entrée: - Nom: Carotte ; Numéro de série: 10 ; Référence: 12345.
2ème entrée: -Nombre d'étiquette souhaité: 20.
Et donc chaque étiquettes imprimé devra aller de 10 à 30 au niveau du numéro de série automatiquement.
J'ai beau chercher je ne trouve pas et l'incrémentation est compliqué comme notion pour moi. Si quelqu'un à une solution ou une piste du moins, cela m'aiderais beaucoup. J'espère avoir été clair sur l'énoncé car je me doute que sans support cela ne sera pas simple.
Merci :)
Bonjour, c'est trés vague sans voir le code actuellement utilisé.
Les étiquettes s'impriment une par une ?
Le numéro de départ est donné ? faut -il garder en mémoire le dernier numéro utilisé pour une prochain impression ?
Il faudrait sans doute faire une boucle dans laquelle on imprime 1 seul exemplaire puis on change le numéro pour imprimer le second et ainsi de suite
jusqu'au dernier exemplaire.
du style :
Dim numserie as long
Dim nbexemplaire as long
numserie=la valeur1 que vous rentrez =10
nbexemplaire=la valeur2 que vous rentrez nombre d'impression=20
For i=numserie to numserie +nbexemplaire ....
Référence=i
impression un exemplaire
next
Bonjour,
Je sais bien toute la difficulté de ma demande sans support. Les étiquettes sont imprimer toutes ensembles d'une traitre mais unitairement. Le numéro de départ est le numéro de série donc oui il est donné et non il ne faut pas le garder en mémoire par la suite.
J'ai essayé votre code, cela n'incrémente pas mes étiquettes.
Je ne peux pas joindre le document mais je peux vous copier deux parties de mon code:
1/ La partie où l'on demande le numéro de série ou la quantité (pas la quantité d'étiquette)
'ASSIGNATION QUANTITE PAR CONDITIONNEMENT
Worksheets("Page de Garde").Select
qte = TextQte.Value
If IsNumeric(qte) Then
Worksheets("Etiquette").Cells(4, 3).Value = TextQte.Value
'La troisième ligne changera automatiquement si on inscrit un SN ou une quantité:
Worksheets("Etiquette").Cells(4, 2).Value = "Qté :"
Me.Hide
qte_a_imprimer.Show
Else
' MsgBox ("Manque Qté ou SN Produit"), vbCritical
TextQte.SelLength = Len(TextQte.Text)
TextQte.SetFocus
GoTo RetourSN
End If
RetourSN:
'DEMANDE DU SN DE PRODUIT
Worksheets("Page de Garde").Select
qte = TextBox1.Value
If IsNumeric(qte) Then
Worksheets("Etiquette").Cells(4, 3).Value = TextBox1.Value
'La troisième ligne changera automatiquement si on inscrit un SN ou une quantité:
Worksheets("Etiquette").Cells(4, 2).Value = "Serial Number :"
Me.Hide
qte_a_imprimer.Show
Else
MsgBox ("Manque Qté ou Serial Number Produit"), vbCritical
TextQte.SelLength = Len(TextQte.Text)
TextQte.SetFocus
GoTo fin
End If
'SI OK, DEMANDER LE NOMBRE D'ETIQUETTE A IMPRIMER
Unload Me
qte_a_imprimer.Show
2/ La demande de quantité d'étiquettes à imprimer.
Private Sub CommandButton1_Click()
qte_etiquette = Textqte_etiq.Value
Dim DefautImprimante As String
If qte_etiquette < 21 Then
'Impression
Worksheets("Etiquette").PrintOut Copies:=qte_etiquette, Collate:=True, _
IgnorePrintAreas:=False
Unload Me
pupitre_de_commande.Show
Else
rep = MsgBox("ATTENTION : Quantité d'etiquettes supérieure à 20" & vbCrLf & "Voulez-vous lancer l'impression ?", vbQuestion + vbYesNo)
If rep = vbYes Then
'Impression
Worksheets("Etiquette").PrintOut Copies:=qte_etiquette, Collate:=True, _
IgnorePrintAreas:=False
Unload Me
pupitre_de_commande.Show
End If
If rep = vbNo Then
Textqte_etiq.SelStart = 0
Textqte_etiq.SelLength = Len(Textqte_etiq.Text)
Textqte_etiq.SetFocus
End If
End If
Voilà, tout le code n'a pas été développé par moi, j'espère que cela aidera plus que ça embrouillera :)
Merci beaucoup
Ca ne va pas le faire. Vous fermez le premier userform pour en ouvrir un second juste pour demander la quantité à imprimer.
Le problème c'est que dans ce cas vous ne pouvez plus faire varier le numéro de série en fonction du nombre d'exemplaire à imprimer.
Le plus simple est de modifier le premier userform pour ajouter une textbox qui demandera le nombre d'exemplaire à imprimer.
A ce moment vous pourrez utiliser cette valeur pour modifier la cellule qui contiend le numéro de série avant chaque impression.
Je m'en doutais un peu, je suis en train de faire un second document où tout est écrit sur le même UseForm, je vais essayer comme ça.
Merci beaucoup pour vos indications !
il faut créer un boucle
1. ajuster le worksheet "etiquette" comme il faut
2. copier ce worksheet & coller vers un fichier auxiliaire
3. faire x Copies de ce worksheet avec numéro ascendants
4. selectionner toutes ces feuilles et imprimer en une fois
5 supprimer ce fichier auxiliaire
6 Fin.
bonjour, comme ceci
Sub Imprimer()
Dim sLegume, sSérie, iNombre As Integer, i
'maintenant ces 3 variables sont fixe, utilisez l'inputbox plus tard
sLegume = "Carottes" 'Application.InputBox("quel légume", Type:=2)
sSérie = "ABCD123456789" ' Application.InputBox("Numéro de série", Type:=2)
iNombre = 20 'Application.Min(Application.Max(0, Application.InputBox("Numéro de série", Type:=1)), 20) 'nombre entre 0 et 20
With ThisWorkbook.Sheets("modèle") 'le modèle de chaque étiquette
.Range("B1").Value = sLegume
.Range("B2").Value = sSérie
.Range("B3").Value = 1
.Copy 'copie cette feuille dans un nouveau fichier
s = "Copie1"
ActiveSheet.Name = s 'nom de la nouvelle feuille
For i = 2 To iNombre 'dans un boucle créer x feuilles
Sheets("Copie1").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = "copie" & i
ActiveSheet.Range("B3").Value = i 'ajuster le numéro
s = s & vbLf & ActiveSheet.Name 'les noms de toutes les feuilles
Next
Sheets(Split(s, vbLf)).Select 'selectionner toutes les feuilles
Sheets("copie1").Activate
'3 options possible
'Selection.PrintPreview
'ActiveSheet.PrintOut
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\legumes.pdf", OpenAfterPublish:=True
ActiveWorkbook.Close 0
End With
End SubMerci beaucoup, je vais essayer ça !
Bonne journée à vous