IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA : impression automatique d'étiquette prix supermarché


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut VBA : impression automatique d'étiquette prix supermarché
    Bonjour à tous,

    Je ne suis pas certain de poster au bon endroit, si c'est le cas, veuillez m'en excuser.

    Je souhaite créer un fichier Excel d'impression des étiquettes prix pour un supermarché. N'ayant pas de base en VBA, j'ai tenté d'effectuer cela via l'enregistrement de macro mais j'arrive à une limite que je ne peux pas surmonter.

    Le contexte : Il s'agit d'un format d'étiquette en magasin classique, avec le nom du produit, son origine et son prix. La dimension ne doit pas etre modifiée car elle sera imprimée ensuite. Le contenu de l'étiquette par contre est modifiable. L'employé peut donc changer le nom du produit, son prix etc en fonction de l'étiquette qu'il doit imprimer.

    J'ai donc créé le format d'étiquette souhaité, et un bouton qui copie cette étiquette, puis colle cette même étiquette sur une autre feuille, de sorte qu'après la rédaction d'une étiquette sur le fichier Excel, l'employé clique sur le bouton et l'étiquette est envoyée sur une seconde page pour impression lorsqu'il a terminé.
    Le but étant de rédiger une étiquette, presser le bouton pour "l'enregistrer" (la coller en realité) sur une seconde feuille, rédiger une seconde étiquette, presser le bouton etc.
    De sorte que lorsque l'employé a terminé de rédiger toutes ses étiquettes, il imprime simplement la feuille avec toutes les étiquettes ainsi enregistrées (collées).

    Le problème c'est que l'enregistreur de macro ne me permet pas (je crois) d'indiquer à Excel que la cellulle est déjà remplie (par l'étiquette prcédente) et qu'il faut donc qu'il colle l'étiquette 2 lignes en dessous de l'étiquette collée précédemment. Il s'agit d'une fonction décallage avec VBA il me semble.

    Il faudrait en realité que lorsque l'employé clique sur le bouton, cela colle l'étiquette sur la seconde feuille, et insère également 2 lignes en dessous de cette même étiquette afin que l'étiquette suivante ne soit pas collée par dessus la première.

    En espérant que l'explication soit claire, merci d'avance pour vos réponses.

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 128
    Points : 188
    Points
    188
    Par défaut
    Hello,

    Les supermarchés ont déjà un logiciel interne qui gère tout plein de truc, dont l'étiquetage !!

    En général, ces logiciels utilisent des codes de format (ex: code 43 permet d'imprimer 24 étiquettes sur une feuille A4)
    Tu n'a pas a créer ce genre d'application, elles existent déjà et sont développées en interne.

    Près de l'imprimante tu trouvera certainement un placard avec plein de feuille pré-imprimée avec différents format, et ça tu ne peux pas le changer. Car les étiquettes doivent respecter les normes imposées par l'enseigne.

    Désolé de ne pas t'aider dans ta recherche de VBA, mais tu ne peux pas créer ton propre système d'impression d'étiquettes.

    Slooby

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour Slooby et merci pour ta réponse.

    Je suis conscient que les supermarchés ont un système propre et celui-ci est bien développé mais il ne peut pas gérer mon problème.

    Je m'explique, je suis dans un pays ou le système de caisse est peu avancé, ce qui fait que certains articles sont gérés par le système, mais pas la totalité des articles.

    Ce qui fait que les fruits et légumes sont étiquetés à la main par l'employé, qui créé les etiquettes via un template Excel, qui les imprime puis les découpe.
    Je sais que cela peut paraitre archaique, mais il s'agit de la seule solution à court terme, c'est pour cela que ma question se porte sur le VBA afin de simplifier ce process.

    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 665
    Points : 5 803
    Points
    5 803
    Par défaut
    Citation Envoyé par CorentinB49 Voir le message
    j'ai tenté d'effectuer cela via l'enregistrement de macro mais j'arrive à une limite que je ne peux pas surmonter.
    Post ton code (avec la balise code #) et on verra ce qu'on peut faire.

    Le problème c'est que l'enregistreur de macro ne me permet pas (je crois) d'indiquer à Excel que la cellulle est déjà remplie (par l'étiquette prcédente) et qu'il faut donc qu'il colle l'étiquette 2 lignes en dessous de l'étiquette collée précédemment.
    L'enregistreur de macro ne peux pas le faire mais une petite retouche du code devrait suffir.

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour halaster08 et merci de ta réponse,

    Mon code est en fait juste un copy past pour l'instant.

    Je ne sais pas comment fonctionne la balise désolé, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Eticheta()
    '
    ' Eticheta Macro
    '
     
    '
        Range("D4:G10").Select
        Selection.Copy
        Sheets("Printing F & V").Select
        ActiveSheet.Paste
    End Sub
    Merci

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272

  7. #7
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut, merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Eticheta()
    '
    ' Eticheta Macro
    '
     
    '
        Range("D4:G10").Select
        Selection.Copy
        Sheets("Printing F & V").Select
        ActiveSheet.Paste
    End Sub

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 665
    Points : 5 803
    Points
    5 803
    Par défaut
    Citation Envoyé par CorentinB49 Voir le message
    Je ne sais pas comment fonctionne la balise désolé
    C'est le bouton avec ce symbole #


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Sub Eticheta()
    '
    ' Eticheta Macro
    '
     
    '
        Range("D4:G10").Select
        Selection.Copy
        Sheets("Printing F & V").Select
        ActiveSheet.Paste
    End Sub
    Ok ça c'est pour le premier. Comme tu n'indique pas de plage pour le coller je suppose que c'est en A1
    On peut déjà virer les select inutiles comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Sub Eticheta()
    Range("D4:G10").Copy Sheets("Printing F & V").range("A1")
    End Sub
    Ensuite on peut demander a VBA de chercher la dernière ligne non vide via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Printing F & V").range("A" & rows.count).end(xlup).row
    Et donc remplacer le 1 de A1 par cette formule + un décalage pour séparer tes étiquettes ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Sub Eticheta()
    Range("D4:G10").Copy Sheets("Printing F & V").range("A" & Sheets("Printing F & V").range("A" & rows.count).end(xlup).row + 2)
    End Sub

  9. #9
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Au vu de tes explications je pense que c'est bien ce que je recherche à faire, en revanche lorsque je lance le code, cela ne fonctionne pas.

    Les cellulles sur lesquelles je souhaite coller sont fusionnées, j'ai une boite de dialogue qui m'indique que je ne peux pas coller à cause de cela.

    Je suis pourtant obligé de conserver le format comme il est. Y a t-il un moyen de coller malgré les cellulles fusionnées ?

    Merci

  10. #10
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 665
    Points : 5 803
    Points
    5 803
    Par défaut
    malgré les cellulles fusionnées
    Noooooooooooooooooooooon pas les fusions, c'est le mal !
    Les fusions sont particulièrement horribles a gerer en VBA, je ne saurais pas t'aider plus sur ce coup là.
    Peut être faudrait-il essayer une image de la plage.

  11. #11
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Peut être faudrait-il essayer une image de la plage.
    En réalité c'est la dimension de l'étiquette que je souhaite conserver, que les cellulles soit fusionnées ou non sur ma feuille "printing" est indifférent.

    Si je fais un collage en tant qu'image cela fonctionnera ?

    Merci

  12. #12
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 665
    Points : 5 803
    Points
    5 803
    Par défaut
    Je viens d'essayer avec une fusion et je n'ai pas de message d'erreur, peux tu mettre un imprim écran de ton étiquette? La description complète de l'erreur aussi.

    En réalité c'est la dimension de l'étiquette que je souhaite conserver
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A4:B10").Copy
    Sheets("Sheet4").Range("A" & Sheets("Sheet4").Range("A" & Rows.Count).End(xlUp).Row + 2).PasteSpecial xlPasteColumnWidths

  13. #13
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Excusez moi pardon, mais je suis surpris.

    Word a tout ce qu'il faut pour imprimer toutes sorte d'étiquettes. Des planches d'étiquettes pareilles ou bien des planches d'étiquettes différentes. Cela fonctionne un peu comme du publipostage.

  14. #14
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Effectivement, c'est bien l'option Publipostage de Word qui semble la plus indiquée pour ce cas.

    On crée une table dans Excel puis on va dans Word et on lie les champs du Publipostage à la table Excel.

  15. #15
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Je viens d'essayer avec une fusion et je n'ai pas de message d'erreur, peux tu mettre un imprim écran de ton étiquette? La description complète de l'erreur aussi.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A4:B10").Copy
    Sheets("Sheet4").Range("A" & Sheets("Sheet4").Range("A" & Rows.Count).End(xlUp).Row + 2).PasteSpecial xlPasteColumnWidths
    Bonjour et désolé pour le délai,

    Il n'y a en fait pas de message d'erreur, la macro copie bien mon étiquette mais ne la colle pas sur la feuille suivante :

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Sub Eticheta()
     
    Range("D4:G10").Copy
    Sheets("Printing F & V").Range("D" & Sheets("Printing F & V").Range("A" & Rows.Count).End(xlUp).Row + 2).PasteSpecial xlPasteColumnWidths
    End Sub
    Et voici l'étiquette :
    Nom : Capture.JPG
Affichages : 2019
Taille : 21,0 KoNom : Capture.JPG
Affichages : 2019
Taille : 21,0 Ko

    Concernant les remarques suivantes, j'ai bien conscience qu'il ne s'agit pas de la solution la plus optimisée. Malheureusement, si je veux faire appliquer ce process, il faut que la solution soit la plus simple possible et sans changement complet dans les habitudes des managers. En faisant uniquement via Excel, je suis certain que cette solution sera effectivement appliquée.

    Le simple fait de devoir passer par Word et de gérer la liaison entre 2 documents posera problème au quotidien pour les magasins.

    Merci

  16. #16
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 665
    Points : 5 803
    Points
    5 803
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Sub Eticheta()
     
    Range("D4:G10").Copy
    Sheets("Printing F & V").Range("D" & Sheets("Printing F & V").Range("D" & Rows.Count).End(xlUp).Row + 2).PasteSpecial xlPasteColumnWidths
    End Sub

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Le simple fait de devoir passer par Word et de gérer la liaison entre 2 documents posera problème au quotidien pour les magasins.
    le publipostage dans Word, permettrait de ne faire aucune modification dans Word et un filtre élaboré dans Excel mettrait à jour la base de données Xls du publipostage!

    il n'y à rien de plus simple, sauf avoir de bonnes raisons ou ne pas pouvoir utiliser Word!
    Dernière modification par AlainTech ; 30/08/2016 à 10h35. Motif: Correction balises

  18. #18
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    OK après quelques tests la solution Publipostage Word me semble effectivement plus simple.

    Le seul truc c'est qu'il faudrait que je simplifie encore la procédure. Est-il possible d'ajouter un bouton avec une macro pour rafraichir les données (après que le manager a terminé d'entrer toutes ses nouvelles etiquettes), ainsi qu'un bouton pour lancer la fusion et l'impression via le fichier word final (pour éviter qu'il entre dans le menu de publipostage) ?

    Merci

  19. #19
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 665
    Points : 5 803
    Points
    5 803
    Par défaut
    Est-il possible d'ajouter un bouton avec une macro pour rafraichir les données (après que le manager a terminé d'entrer toutes ses nouvelles etiquettes), ainsi qu'un bouton pour lancer la fusion et l'impression via le fichier word final
    Je ne connais absolument pas le publipostage, je ne pourrais donc t'aider plus si tu pars vers cette solution.

    Mais en utilisant l'enregistreur de macro de word tu devrais obtenir facilment le code pour lancer le publipostage.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Comme dit plus haut, Word gère parfaitement le publipostage!

    Le document Word contient en lui toutes les informations la source de données du publipostage, la position des champs dans le document ainsi que le format de papier.

    Chaque colonne du fichier Excel représente un champ de publipostage et chaque ligne un enregistrement du publipostage.

    Plus besoin de retoucher le document Word !

    Il suffi par conséquent de modifier les données dans la source du publipostage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub XlsPublipostage()
    'Supprestion des enciennnes étiquettes
    'Ajout des nouvelles étiquette
    ThisWorkbook.Save 'enregistrement du fichire en vu du publipostage!
    ImpressionPublipostage "C:\Users\rdurupt\Desktop\Etiquettes.docx"
    End Sub
     
    Sub ImpressionPublipostage(FichierEttiquettes As String)
    Dim Wrd As Object, doc As Object, Imprimante As String
    Set Wrd = CreateObject("Word.application")
    Set doc = Wrd.Documents.Open(FichierEttiquettes)
    Wrd.Visible = True
    Imprimante = Application.ActivePrinter 'on recupre l'imprimante par défaut
         ' Application.Dialogs(xlDialogPrinterSetup).Show  'Si tu veux que l’utilisateur modifie lui-même l’imprimante !
      Application.ActivePrinter = "Imprimante Étiquette" 'on sélectionne l'imprimante pou les étiquettes
        With doc.MailMerge 'on génère le publipostage en direction de l'imprimante
            .Destination = 1
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = 1
                .LastRecord = -16
            End With
            .Execute Pause:=False
        End With
    doc.Close False: Wrd.Quit
    Set doc = Nothing: Set Wrd = Nothing
    pplication.ActivePrinter = Imprimante 'on redonne l'imprimante par défaut au système.
    End Sub
    Dernière modification par Invité ; 30/08/2016 à 09h38.

Discussions similaires

  1. [VBA-E]Impression automatique de plusieurs PDF
    Par guntag2 dans le forum Excel
    Réponses: 3
    Dernier message: 09/05/2007, 23h07
  2. Réponses: 5
    Dernier message: 21/01/2007, 19h31
  3. [VBA]Macro d'impression automatique
    Par olivier45fr dans le forum SDK
    Réponses: 5
    Dernier message: 27/11/2006, 11h04
  4. [CR] débuter l'impression sur une étiquette X
    Par theflamme dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 11/01/2005, 08h47
  5. [VBA]répondre automatiquement à un msgbox
    Par gromite dans le forum Général VBA
    Réponses: 11
    Dernier message: 13/01/2004, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo