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:
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:
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:
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
bonsoir Ormonth, le forum,
Citation:
Pour diverses raisons tu as besoin d’imprimer des données sous des « masques » d’impression différents.
> OUI
Citation:
Les données imprimées sont identiques mais disposées différemment selon le masque.
> OUI
Citation:
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.
Citation:
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)
Citation:
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:
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
bonjour Ormonth, le forum
Citation:
n'est pas un select case qui ferait le boulot, mais le type de modèle lui-même
Alors là, je m'y perds.
Lorsque, je choisis le modèle dans la "UserForm". J'affiche la feuille adéquate pour montrer le modèle choisi. Donc pas de code dans "Worksheet_Activate". Pourquoi un "workbook" ?
A l'ouverture du "workbook", la personne est actuellement libre de créer un modèle puis de lancer la saisie par le "UserForm".
ESVBA