Personnalisation des Editions

Les éditions GPMI sont effectuées sous Word et Excel, à partir de Modèles de documents situés dans le répertoire Programmes (en général, C:\Program Files\GPMI)

Ces modèles sont les suivants :

Modèle

Usage

editions_gpmi.xls

Editions internes diverses

gpmi_bl.doc

BL Clients

gpmi_cde.doc

Commandes Clients

gpmi_cdef.doc

Commandes Fournisseurs

gpmi_dast.doc

DA de sous traitance

gpmi_dev.doc

Devis Clients

gpmi_etiq.doc

Etiquettes (remplacé par un tableau Excel spécifique)

gpmi_fac.doc

Factures Clients

gpmi_istk.doc

Inventaire Stocks

gpmi_of.doc

Ordres de Fabrication

gpmi_pstk.doc

Stocks à péremption

gpmi_trt.doc

Traites Clients

Editions Word

Il y a deux manières de personnaliser les éditions sous Word (gpmi_xxx.doc).

Présentation générale (couleurs, logos, tailles de caractères, etc...)

Contenu (informations éditées)

Présentation Générale

Ouvrez le document Word, par exemple gpmi_cde.doc :

Vous pouvez directement modifier votre logo, l’entête, le pied de page, pour y inscrire vos propres coordonnées (double click sur la zone d’entête ou de pied de page pour l’ouvrir).

Vous pouvez également modifier dans chaque cellule des tableaux :

Astuce : Pour faire disparaître le contenu d’une cellule, mettez la couleur des caractères à blanc, ainsi, la zone sera éditée en blanc sur fond blanc et sera invisible.

A ce stade, ne modifiez pas :

Contenu

Pour modifier le contenu de l’édition, c’est un peu plus compliqué, mais c’est possible. En effet, le code source du programme d’édition des trouve dans le modèle du document. Il est écrit en VBA (Visual Basic for Applications), autrement dit en macros Excel ou Word. Avec un peu de connaissances VBA, vous pourrez facilement adapter ces éditions à votre besoin.

Accédez au code de l’édition par le menu Tools (ou Outils)/Macro/Visual Basic Editor ou directement en appuyant sur Alt F11 :

La fenêtre VBA est alors affichée:

Le but de ce document n’est pas de faire un cours d’initiation au langage VBA. Vous en trouverez à foison sur le Web. Mais simplement, j’essaye de vous indiquer les principales modifications que vous pourrez faire avec un tout petit peu de connaissances VBA.

Le code source est organisé en 2 modules :

Le module accès_base est purement technique. Il permet l’accès aux tables GPMI. Vous n’avez pas, en principe, à y intervenir. Il est le même pour tous les modèles de documents GPMI.

Le module Edition contient le code propre à l’édition. Suivant les modèles, il peut contenir plusieurs macros. Celle qui vous intéresse s’appelle... Edition :

Sub Edition(base, nomlog, num_cde)

Ne changez pas les paramètres de cette subroutine ! GPMI ne saurait plus la lancer.

L’édition s’effectue de manière simple, en remplissant les cellules des tableaux du document :

ActiveDocument.Tables(1).Cell(1, 2).Range.Text correspond au premier tableau du document, et au texte de la cellule de la ligne 1, colonne 2. On lui affecte une valeur ainsi :

ActiveDocument.Tables(1).Cell(1, 2).Range.Text = "N°" & num_cde

Le caractère « & » correspond à la concaténation de chaînes de caractères, ici, on ajoute « N° » devant le numéro de commande, passé en paramètre à l’édition.

Chaque table de la base GPMI correspond à une structure particulière. L’entête de commande client, par exemple, est la table EnteteCdeCli et correspond à la structure « cce ». Le module accès_base, dans la macro Sub db_rechpos(nomfic$, nmoind), vous donne la correspondance entre le code de la structure et le nom de la table GPMI :

If nomfic$ = "cce" Then Set tb = db.OpenRecordset("EnteteCdeCli"): If nmoind = 1 Then tb.Index = "Cle_cce" Else If nmoind = 2 Then tb.Index = "Cle_cce1" Else If nmoind = 3 Then tb.Index = "Cle_cce2" Else tb.Index = "Cle_cce3"

If nomfic$ = "cbe" Then Set tb = db.OpenRecordset("EnteteBL"):     If nmoind = 1 Then tb.Index = "Cle_cbe" Else If nmoind = 2 Then tb.Index = "Cle_cbe1" Else If nmoind = 3 Then tb.Index = "Cle_cbe2" Else tb.Index = "Cle_cbe3"

If nomfic$ = "cfe" Then Set tb = db.OpenRecordset("EnteteFact"):   If nmoind = 1 Then tb.Index = "Cle_cfe" Else If nmoind = 2 Then tb.Index = "Cle_cfe1" Else If nmoind = 3 Then tb.Index = "Cle_cfe2" Else tb.Index = "Cle_cfe3"

If nomfic$ = "ccl" Then Set tb = db.OpenRecordset("LigneCdeCli"):  If nmoind = 1 Then tb.Index = "Cle_ccl" Else If nmoind = 2 Then tb.Index = "Cle_ccl1" Else If nmoind = 3 Then tb.Index = "Cle_ccl2" Else tb.Index = "Cle_ccl3"

If nomfic$ = "cbl" Then Set tb = db.OpenRecordset("LigneBLCli"):   If nmoind = 1 Then tb.Index = "Cle_cbl" Else If nmoind = 2 Then tb.Index = "Cle_cbl1" Else If nmoind = 3 Then tb.Index = "Cle_cbl2" Else tb.Index = "Cle_cbl3"

If nomfic$ = "cfl" Then Set tb = db.OpenRecordset("LigneFactCli"): If nmoind = 1 Then tb.Index = "Cle_cfl" Else If nmoind = 2 Then tb.Index = "Cle_cfl1" Else If nmoind = 3 Then tb.Index = "Cle_cfl2" Else tb.Index = "Cle_cfl3"

If nomfic$ = "mvt" Then Set tb = db.OpenRecordset("Mouvements"):  If nmoind = 1 Then tb.Index = "Cle_mvt" Else If nmoind = 2 Then tb.Index = "Cle_mvt1" Else If nmoind = 3 Then tb.Index = "Cle_mvt2" Else tb.Index = "Cle_mvt3"

nomfic$ = "cce" >> Nom de la structure

db.OpenRecordset("EnteteCdeCli") >> table de la base GPMI

La macro Sub db_rechlec(nomfic$), par exemple, vous indiquera la liaison entre les éléments de la structure et les champs correspondants de la table :

If nomfic$ = "cce" Then

cce.nc = tb("nc")

cce.cc1t = tb("cc1t")

cce.a11 = tb("a11")

cce.a21 = tb("a21")

cce.cp1 = tb("cp1")

cce.v1 = tb("v1")

cce.reg1 = tb("reg1")

cce.pays1 = tb("pays1")

cce.i1 = tb("i1")

cce.statut = tb("statut")

cce.n1 = tb("n1")

cce.cc2t = tb("cc2t")

cce.a12 = tb("a12")

cce.a22 = tb("a22")

cce.cp2 = tb("cp2")

cce.v2 = tb("v2")

etc...

cce.nc >> No de commande

Champ de la table : tb("nc")

Dans ce cas, l’élément de la structure (nc) est le même que celui du champ de la table. Ce n’est pas toujours vrai. De plus, les champs de la table eux mêmes ne sont pas toujours compréhensibles immédiatement.

Un fichier Excel vous donne la signification en clair de ces champs (Signification des champs de la Base.xls).

Avec tous ces éléments, vous pouvez être à même de modifier vous mêmes la macro Edition.

Une manière simple de supprimer l’édition d’une donnée est de mettre sa ligne correspondante en commentaire, en mettant une simple cote « ‘ » devant la ligne :

        ActiveDocument.Tables(3).Cell(ligne + 2, 6).Range.Text = ccl.ct

Ceci supprime l’affichage du code TVA.

La fin de la macro sauvegarde le document réalisé :

'sauvegarge document dans le chemin de la base : nom= cde_<num>.doc

msg1$ = base & "\cde_" & Trim$(num_cde)

ActiveDocument.Protect Password:="", NoReset:=False, Type:=2

ActiveDocument.SaveAs FileName:=msg1$, FileFormat:=wdFormatDocument _

    , LockComments:=False, Password:="", AddToRecentFiles:=True, _

    WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _

     SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _

    False

Le document est protégé contre les modifications. Pour enlever définitivement cette protection, mettez en commentaires la ligne :

ActiveDocument.Protect Password:="", NoReset:=False, Type:=2

En ajoutant une cote devant :

ActiveDocument.Protect Password:="", NoReset:=False, Type:=2

Pour sauvegarder sous un autre nom, et / ou dans un autre répertoire que celui de la base, changez la ligne :

msg1$ = base & "\cde_" & Trim$(num_cde)

Celle ci donne le chemin et le nom du document. Vous pouvez modifier le chemin en mettant, par exemple :

msg1$ = "C:\mes commandes\cde_" & Trim$(num_cde)

Editions Excel

Comme sous Word, vous pouvez changer le contenu des éditions Excel. Celles ci sont toutes un peu « brut », et correspondent à une requête directement placée dans les cellules de la feuille Edition.

Ouvrez le Visual Basic Editor, comme dans Word.

Vous trouverez :

Cette macro code_std est appelée par toutes les éditions : elle ouvre la base, exécute une requête, place ensuite les champs de la requête dans le tabeau Excel.

Vous trouverez dans le module Données_Techniques la macro :

Sub FamillesArt(base, query1, query2)

Qui vous donnera un exemple de personnalisation de l’édition.

Sheets("Edition").Cells(j, 5) fait référence à la feuille « Edition », pour la cellule de ligne « j » et de colonne 5.

J’espère que cette petite aide succincte vous aidera un peu. Si ce n’est pas suffisant, n’hésitez pas à me contacter : admin@1dustrie.com

Joël Ollivier

Manager