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

Conception Discussion :

Publipostage dans Excel : Conception code VBA pour modèles d'impression


Sujet :

Conception

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Publipostage dans Excel : Conception code VBA pour modèles d'impression
    bonsoir le forum,

    je m'explique :
    je cherche à créer plusieurs modèles d'impression à partir des mêmes données.

    Le type de données est dans l'entête d'un tableau.
    L'emplacement désigné pour les données est à l'intersection de la ligne du type de modèle avec la colonne du type de données.
    LEs données dans des contrôles sur une "UserForm"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                          TypeInfo1                     TypeInfo2             TypeInfo_x
    Modele 1       EmplacementDe1-1      EmplacementDe2-1         ...
    Modele 2       EmplacementDe1-2      EmplacementDe2-2         ...
    Modele x        ...

    Cas concret :(le mien)
    Actuellement, depuis une "UserForm" et un tableau XL2007, j'ai récupéré la plage des entêtes et de la ligne intéressante dans ce tableau.


    Pour chaque valeur de l'entête, j'ai un traitement différent pour la valeur contenu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exemple : "Nom"          est en "A1:A5"   et affecte la valeur d'une TxtBox TxtNom
                  "ImageLogo" est en "A2:C5"   et affecte la valeur d'une Shape ShaLogo
                  "Photo"        est en "C6:F10" et affecte la valeur d'une Shape ShaPhoto 
                  "Ref"            est en "D1"      et affecte la valeur d'une Txtbox TxtREf
                   ...
    Je souhaiterais connaitre la meilleure manière de faire cela.

    Je pense immédiatement à quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For Each c in RangeLigneDonne
                 select case NomColonne
                    Case "Nom"
     
                    case "ImageLogo"
     
                    case...
     
                    case else
     
      End Select
    next c
    Mais ça ne m'apparait pas comme très bon.

    Avez-vous une autre solution ?
    Un autre idée de fonctionnement ?

    Merci.


    ESVBA

  2. #2
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    je cherche à créer plusieurs modèles d'impression à partir des mêmes données.
    Pas sur d'avoir saisi le contexte, dans ce genre de situation, pour éviter des traitements lourds de mise en forme, j'utilise justement des modèles.. de classeur en xltx via un Workbooks.Add.

    A construire, c'est du dessin à la base et on répartit les données voulues.

    cordialement,

    Didier

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonjour Ormonth,
    ...et on répartit les données voulues.
    justement, suivant le modèle, je dispose mes informations à différents endroits de la feuille (1 feuille = 1 modèle).

    Suivant le modèle, les emplacements sont stockées dans un tableau sur une autre feuille (pour pouvoir y ajouter d'autres modèles plus tard).

    Le traitement est le même pour chaque nom de colonne (type texte, image...) quelque soit le modèle. Seul l'emplacement change. Le nombre de colonne est fixe (sauf action de ma part) et vaut une trentaine.

    En y réfléchissant mieux, c'est un publipostage dans Excel.


    Ma question :
    Quel est le meilleur moyen de réaliser cela ?

    La boucle avec des "select case" ? Ca fonctionnera.
    J'ai un doute sur la manière de m'y prendre.

    ESVBA

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Je j’arrive pas à me représenter la chose, qu’est ce qui est vrai dans la suite, ou peux-tu expliciter la chose ?

    Tu as une feuille de données (ou un tableau intelligent 2007 ?) ou sont toutes tes données.

    Pour diverses raisons tu as besoin d’imprimer des données sous des « masques » d’impression différents.

    Les données imprimées sont identiques mais disposées différemment selon le masque.

    Les données imprimés proviennent de ce qui figure à un instant T dans un USF.

    L’USF ne sert qu’à sélectionner les modèle (masque) voulu et selon le choix différentes données (variables selon le masque-modèle) sont mises récupérées dans la base, mises en place et imprimées.

    Les données choisies sont des colonnes entières, des plages, des cellules ?

    cordialement,

    Didier

  5. #5
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonsoir Ormonth, le forum,
    Pour diverses raisons tu as besoin d’imprimer des données sous des « masques » d’impression différents.
    > OUI

    Les données imprimées sont identiques mais disposées différemment selon le masque.
    > OUI

    Les données imprimés proviennent de ce qui figure à un instant T dans un USF.
    > OUI, prévu de faire une sauvegarde par la suite si l'utilisateur le désire.

    L’USF ne sert qu’à sélectionner les modèle (masque) voulu et selon le choix différentes données (variables selon le masque-modèle) sont mises récupérées dans la base, mises en place et imprimées.
    > OUI sauf que l'USF set aussi à la saisie des données (et choix du modèle)

    Tu as une feuille de données (ou un tableau intelligent 2007 ?) ou sont toutes tes données.
    Les données choisies sont des colonnes entières, des plages, des cellules ?
    > Dans le "UserForm", je fais la saisie de données (texte, liste de textes, images) et à la fin je sélectionne un modèle existant.

    Mon code se base sur le numéro du modèle pour aller chercher les emplacements des informations saisies dans le tableau "intelligent" 2007.
    donc 1 modèle = 1 ligne du tableau

    Les modèles (que de la mise en forme) sont actuellement pré-établis sur des feuilles séparées. On affiche la feuille en fonction du modèle choisi. Ensuite, j'y place les informations répérées dans un tableau XL2007.

    En colonne de ce tableau, les différents emplacements pour un type de saisie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      1er  colonne = N°Modèle ex: 3
      2me colonne = Nom        ex: A1
      3me colonne = Adresse   ex: B1
    ...
    10me colonne = Logo        ex: A3:B5
    ...
    Donc en lisant la seconde colonne, je place en "A1" le "Nom" qui est saisi dans la textbox nommée "TxtNom".

    En lisant, la 10e colonne, je place le "Logo" en "A3:B5" se trouvant dans le contrôle picture "ImgLogo".

    J'espère être clair cette fois.



    Comment coder ?
    Je fais une boucle dans laquelle je teste chaque entête de colonne pour savoir que faire. => 30 colonnes = 30 tests !

    Peut-on faire mieux ? (euh, plus simple)



    ESVBA

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    bonsoir,

    très vite fait, il est tard

    je relirai plus en détail, en attendant, ma prmière réaction consisterait à dire que le mettrai le code voulu dans le Workbook open du modèle choisi, le dit code ventilant les infos.

    Donc ce n'est pas un select case qui ferait le boulot, mais le type de modèle lui-même

    cordialement,

    Didier

Discussions similaires

  1. Erreur gestion excel via code VBA dans access pour importation
    Par blacklolou dans le forum VBA Access
    Réponses: 4
    Dernier message: 11/01/2013, 10h24
  2. [AC-2003] Code VBA pour importer un fichier Excel dans access
    Par granddebutant dans le forum VBA Access
    Réponses: 5
    Dernier message: 24/01/2012, 14h51
  3. Réponses: 1
    Dernier message: 09/11/2010, 15h50
  4. [XL-2007] Code VBA pour lire données d'un tableau dans Excel
    Par PierreL dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/10/2009, 19h31
  5. Code VBA pour communication avec un port série dans EXCEL
    Par Fbroom dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2008, 10h14

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