Transposer automatiquement tableau en maquette

Bonjour à tous,

J'ai tenté de chercher mon cas sur le forum avec des termes que je pense similaires mais ne suis pas parvenu à trouver mon bonheur.

Je m'explique :

1- J'ai une base de donnée (somme toute relativement simple)

qexn

2- et souhaite manipuler ces données afin de les mettre en forme et obtenir une maquette semblable à ceci

x0k5

3- Cette maquette doit être ensuite répétée x20 pour couvrir une page comme ceci (ici la dernière ligne n'est pas visible).

rkwb

J'ai réussi la mise en page et chacune des 20 duplicata fait référence à la première en jaune.

Ma problématique est la suivante

Je cherche à faire en sorte qu'Excel crée automatiquement une page de chaque ligne présente dans la base de donnée.

Peu importe que cela se fasse sur la même feuille de calcul ou sur des onglets distincts.

J'espère être assez clair et que l'un d'entre vous pourra m'aider car je m'arrache un peu les 3 cheveux qu'il me reste.

bonjour

as-tu pensé à la fonction publipostage d'étiquettes ?

https://www.youtube.com/watch?v=jlk4hIqaDAw

Bonjour Moupa,

Il s'agit de publipostage,

il vous faut créer un modèle d'étiquette sous Word,

insérer les champs de la base de données,

une police code barre,

paramétrer l'impression à 18 (6x3) étiquettes par page

Merci à tous, effectivement le publipostage est idéal pour ça, je n'y avait pas du tout songé.

J'ai réussi à configuré le tout sans problème.

Reste cependant un détail :

-- Le publipostage ne présente qu'un seul exemplaire de chaque ligne présente dans mon excel d'origine.

cdap

-- Or je souhaite que chaque étiquette soit répétée autant de fois que spécifiées dans la colonne Qté de mon excel de base.

q44u

J'ai peur qu'il faille passer par du VBA .... mais clairement je suis une quiche en la matière donc si je pouvais éviter

Toute suggestion est la bienvenue.

Bonjour Moupa,

Pour imprimer X exemplaires de la même étiquette,

recopiez la première X-1 fois sur la même page,

et imprimer une seule ligne de la base de données.

Merci njhub mais j'avais plutôt d'en l'esprit que la réplication des étiquettes se fasse en automatique.

En effet la masse de Barcode a créer est titanesque et bien trop sujette à erreur si manipulation utilisateur.

re

à ma connaissance, il n'y a pas de solution directe

le plus simple est donc de sélectionner les lignes dans Excel, et de les copier autant de fois que nécessaire

si tu veux 10 exemplaires de la même adresse, tu devras en avoir 10 dans ton fichier

(trie en fonction de la colonne importante pour que les étiquettes identiques se suivent)

si tu le fais 1 fois /jour c'est assez rapide (et pour une fois, je pense que ça peut se mettre en VBA par simple enregistrement)

si c'est 10 fois/jour, je te conseille un logiciel d'étiquetage

Avery ?

Vous avez besoin de quinze étiquettes par produit, une page en contient seize, la dernière n'est pas perdue pour autant.

En imprimant une feuille complète vous vous facilitez la vie, et vous pourrez même l'enregistrer pour la réutiliser.

Arf !

J'ai lu sur une page qu'il était au pire possible de passer par une VBA directement dans le fichier Word pour ne pas avoir à manipuler le fichier source.

Cela te semble-t-il envisageable ?

re

aucune idée

si c'est dans Word, poser la question sur un forum Word.

bon travail

Bonjour

On peut gérer le "enregistrement suivant" avec un si basé sur le champ nombre mais il faut aussi un compteur.

Je vais essayer de retrouver cela...

Bon, j'ai réussi à créer la macro Excel me permettant de dupliquer toutes mes lignes en autant de qtés définie en colonne J

si cela peut servir à certain, voici le rendu :

Sub InsertAndCopy()
    Dim i%, j%, n% 
    With ActiveSheet 
        n = .Cells(.Rows.Count, 12).End(xlUp).Row 
        Application.ScreenUpdating = False
        For i = n To 1 Step -1 
            If IsNumeric(.Cells(i, 10)) Then  
                j = .Cells(i, 10) - 1 
                If j > 0 Then
                    .Range("A" & i & ":M" & i).Copy 
                    .Range("A" & i + 1 & ":M" & i + j).Insert xlShiftDown
                End If
            End If
        Next i
    End With
    Application.CutCopyMode = False 
    MsgBox "Données Dupliquées", vbInformation
End Sub

Mais s'il y avait bien un truc que je n'avais pas anticipé c'est que le publipostage de Word ne semble pas compatible avec les fichier .xlsm

Tout ça pour ça...

L'un d'entre vous aurait une idée ?

RE

Word lit le xlsm comme le xlsx : vérifie tes paramètres de sécurité.

Merci 78chris mais j'ai beau avoir vérifié dans tous les sens rien n'y fait.

Si je déporte la macro dans un autre fichier, cela fonctionne mais dès que le code VBA est intégré au classeur ... Word ne parvient pas à lire le fichier xlsm

capture d ecran 2018 09 20 a 11 20 24

RE

J'ai bien des publipostages sur de sources xlsm sur 2010 et je viens de tester sur 2016 sans souci

Donc il y a un autre problème dans ton fichier

Merci Chris mais j'ai même tout refais depuis un fichier vierge et en faisant proprement les choses ... idem.

Après je ne sais pas si cela a un impact : je travaille sur Office pour OSX.

Sur un forum dédié, j'ai découvert que selon comment serait codé le VBA, Office Mac ne réagit pas pareil.

Il existerait 3 langages :

  • Content Controls (non supporté par Apple)
  • Active-X Controls (non suivi par Windows)
  • Legacy Form Controls (fonctionne sur les 2 plateformes.

L'un d'entre vous saurait-il me dire si mes 2 macros ont la bonne syntaxe ?

Macro qui vide la feuille excel des précédents enregistrement

Sub Effacer()
    With ActiveSheet
        dlf = .Range("L" & Rows.Count).End(xlUp).Row
        .Range("A2:M" & dlf).ClearContents
        MsgBox "Données effacées", vbInformation
    End With
End Sub

Macro qui duplique les lignes selon la qté spécifiée dans l'Excel.

Sub InsertAndCopy() 
    Dim i%, j%, n%
    With ActiveSheet
        n = .Cells(.Rows.Count, 12).End(xlUp).Row  
        Application.ScreenUpdating = False
        For i = n To 1 Step -1 
            If IsNumeric(.Cells(i, 10)) Then  
                j = .Cells(i, 10) - 1 
                If j > 0 Then
                    .Range("A" & i & ":M" & i).Copy 
                    .Range("A" & i + 1 & ":M" & i + j).Insert xlShiftDown
                End If
            End If
        Next i
    End With
    Application.CutCopyMode = False
    MsgBox "Données Dupliquées", vbInformation
End Sub

Si besoin, je vous ai joint les fichiers pour illustrer le problème.

Merci de votre aide.

44macro.xlsm (24.95 Ko)
Rechercher des sujets similaires à "transposer automatiquement tableau maquette"