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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| '*Déclaration des variables PUBLIQUES
Option Explicit
#Const IsLateBinding = True
Sub Main()
'déclaration des variable Main
Dim Main_Path_Template As String 'Chemin de la template sur laquelle on se base pour créer les documents
Dim Main_Path_Pjt As String 'Chemin du projet dans le quel les dossiers et word doivent être créé
Dim Main_Doc_Title As String 'titre du document
Dim Main_Doc_Otp As String 'OTP Du document
Dim Main_Doc_Id As String 'ID du document
Dim Main_Doc_Rev As String 'révision du document
Dim Main_Doc_File As String 'Dossier du document
Dim Main_Doc_Status As String 'Status du document
Dim Main_Pjt_Name As String 'Nom du pojet
Dim Main_Client As String 'Nom du client
Dim Main_Client_Number As String 'Numéro GERAL du client
Dim Main_Num_Docs As Integer 'Nombre de document présent dans xl_t_LDE
Dim Main_Counter As Integer 'Compteur pour la boucle
'Affectation des variables Main A faire dans un formulaire sous word !!!
Main_Path_Template = "C:\Prive_john\FR_GERAL_A4.dotx"
Main_Path_Pjt = "C:\Prive_john"
Main_Doc_Otp = "99888"
New_project_structure Main_Path_Pjt 'Fonction qui créée les diférents dossiers de la structure d'un projet à Main_Path_Pjt
'Déclaration des objets Excel et de listObject
Dim xlApp As Excel.Application 'Objet Excel
Dim xlWbk As Excel.Workbook 'Objet fichier excel
Dim xlTable_LDE As ListObject 'Objet Tableau structuré où sont enregistré les données relatives aux documents
Dim xlTable_Var_Pjt As ListObject 'Objet tableau structuré où sont enregistré les données du projet dans l'EXCEL LDE
Set xlApp = New Excel.Application 'Nouvelle instance excel
xlApp.Visible = False 'Je cache la feuille Excel pendant l'exécution
Set xlWbk = xlApp.Workbooks.Open(FileName:=Main_Path_Pjt & "\8 - Docs de sortie\" & Main_Doc_Otp & "-PRO-0000 - LDE.xlsx") 'Ouvrir le classeur
Set xlTable_LDE = Excel.Range("xl_t_LDE").ListObject 'Affecter le ListObject tableau structuré du fichier excel LDE (permet de se passer de la sheets excel)
Set xlTable_Var_Pjt = Excel.Range("xl_t_Var_Pjt").ListObject 'Affecter le ListObject tableau structuré du fichier excel LDE (permet de se passer de la sheets excel)
Main_Num_Docs = xlTable_LDE.ListRows.Count 'Comptage du nombre de documents dans le tableau strucuré xl_t_LDE
For Main_Counter = 2 To Main_Num_Docs + 1 '(+1 = Ofset) Déclaration de la boucle permettant de créer l'arborescence windows ainsi que le word selon la template et l'affectation des champs (Fields)
' Ligne 1 = Entête, Ligne 2 = Premier document /!\ Premier doc = LDE
Main_Doc_Title = xlTable_LDE.Range.Cells(Main_Counter, xlTable_LDE.ListColumns("Doc_Title").Index).Value2 'Lecture de la cell à l'index "Counter" et à la colonne de nom "Doc_Title"
Main_Doc_Id = xlTable_LDE.Range.Cells(Main_Counter, xlTable_LDE.ListColumns("Doc_ID").Index).Value2 'Lecture de la cell à l'index "Counter" et à la colonne de nom "Doc_ID"
Main_Doc_Rev = xlTable_LDE.Range.Cells(Main_Counter, xlTable_LDE.ListColumns("Doc_Rev").Index).Value2 'Lecture de la cell à l'index "Counter" et à la colonne de nom "Doc_Rev"
Main_Doc_File = xlTable_LDE.Range.Cells(Main_Counter, xlTable_LDE.ListColumns("Doc_File").Index).Value2 'Lecture de la cell à l'index "Counter" et à la colonne de nom "Doc_File"
Main_Doc_Status = xlTable_LDE.Range.Cells(Main_Counter, xlTable_LDE.ListColumns("Doc_Status").Index).Value2 'Lecture de la cell à l'index "Counter" et à la colonne de nom "Doc_Status"
Main_Client_Number = xlTable_Var_Pjt.Range.Cells(2, xlTable_Var_Pjt.ListColumns("Client_Number").Index).Value2 'récupération de la valeur num client
Main_Pjt_Name = xlTable_Var_Pjt.Range.Cells(2, xlTable_Var_Pjt.ListColumns("Pjt_name").Index).Value2 'récupération de la valeur de nom du prjet
Main_Client = xlTable_Var_Pjt.Range.Cells(2, xlTable_Var_Pjt.ListColumns("Client").Index).Value2 'récupération de la valeur du nom du client
New_doc Main_Path_Template, Main_Path_Pjt, Main_Doc_File, Main_Doc_Otp, Main_Doc_Id, Main_Doc_Title, Main_Doc_Rev, Main_Doc_Status, Main_Client_Number, Main_Pjt_Name, Main_Client ' Création du document word selon la template et les paramètres calculé dans la boucle for
Next Main_Counter
xlWbk.Close 'Libère le fichier Excel
xlApp.Quit 'Ferme Excel
End Sub
Private Sub New_doc(Path_Template As String, Path_Pjt As String, Doc_File As String, Doc_Otp As String, Doc_id As String, Doc_Title As String, Doc_Rev As String, Doc_Status As String, Client_number As String, Pjt_Name As String, client As String)
'*******************************************************************************************
'*Déclaration des variables locale de la sub
Dim Loc_Path_Template As String 'Chemin du template sur lequel sera créé les documents
Dim Loc_Path_Pjt 'Chemin du projet
Dim Loc_Doc_File As String 'Dossier de justification ou définition etc..
Dim Loc_Doc_Otp 'Numéro d'otp du document
Dim Loc_Doc_id 'Numéro d'identification du document
Dim Loc_Doc_Title As String 'Nom du document ainsi que sont extension (Ex: MonDoc)
Dim loc_Doc_Rev As String 'Revision du document
Dim Loc_Doc_Status As String 'Status du document
Dim Loc_Client_Number As String 'Numéo de client GERAL
Dim Loc_Client As String 'Nom du client
Dim Loc_Pjt_Name As String 'Nom du projet
Dim Sub_Doc_Id_File As String 'Id du chiffre de dossier pour reconstruction du chemein en fonction de Loc_Doc_File (de 1 à 6)
'*******************************************************************************************
'*Affectation des variables locales avec les arguments de la sub
Loc_Path_Template = Path_Template
Loc_Path_Pjt = Path_Pjt
Loc_Doc_File = Doc_File
Loc_Doc_Otp = Doc_Otp
Loc_Doc_id = Doc_id
Loc_Doc_Title = Doc_Title
loc_Doc_Rev = Doc_Rev
Loc_Doc_Status = Doc_Status
Loc_Client_Number = Client_number
Loc_Pjt_Name = Pjt_Name
Loc_Client = client
'*************** Calcul de Loc_Doc_File pour coller au chemin du serveur
If Loc_Doc_File = "PRO" Then
Sub_Doc_Id_File = "1 - PRO"
ElseIf Loc_Doc_File = "DJD" Then
Sub_Doc_Id_File = "2 - DJD"
ElseIf Loc_Doc_File = "DD" Then
Sub_Doc_Id_File = "3 - DD"
ElseIf Loc_Doc_File = "DFC" Then
Sub_Doc_Id_File = "4 - DFC"
ElseIf Loc_Doc_File = "RCI" Then
Sub_Doc_Id_File = "5 - RCI"
ElseIf Loc_Doc_File = "DU" Then
Sub_Doc_Id_File = "6 - DU"
Else
MsgBox "le dossier : ''" & Loc_Doc_File & "'' n'existe pas dans l'arborescence : ''" & Loc_Path_Pjt & "\8 - Docs de sortie\" & "''", vbOKOnly, "Mauvais dossier de document: " & Loc_Doc_File
GoTo LaFin
End If
'********************************************************************************************
'Test si fichier déjà existant pour éviter d'écraser le document sur le serveur
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\" & Sub_Doc_Id_File & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & " - " & Loc_Doc_Title & "\" & loc_Doc_Rev & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & "-[" & loc_Doc_Rev & "] - " & Loc_Doc_Title & ".docx", vbDirectory) = Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & "-[" & loc_Doc_Rev & "] - " & Loc_Doc_Title & ".docx" Then
MsgBox "Le fichier :" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & "-[" & loc_Doc_Rev & "] - " & Loc_Doc_Title & ".docx" & " éxiste déjà", vbOKOnly, "Alerte perte de données"
GoTo LaFin 'Saut vers fin de sub New_doc pour ne pas écraser le document
End If
'* Création du dossier nom de doc et du sous-dossier de la révision
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\" & Sub_Doc_Id_File & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & " - " & Loc_Doc_Title, vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\" & Sub_Doc_Id_File & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & " - " & Loc_Doc_Title
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\" & Sub_Doc_Id_File & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & " - " & Loc_Doc_Title & "\" & loc_Doc_Rev, vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\" & Sub_Doc_Id_File & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & " - " & Loc_Doc_Title & "\" & loc_Doc_Rev
End If
ElseIf Dir(Loc_Path_Pjt & "\8 - Docs de sortie\" & Sub_Doc_Id_File & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & " - " & Loc_Doc_Title & "\" & loc_Doc_Rev, vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\" & Sub_Doc_Id_File & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & " - " & Loc_Doc_Title & "\" & loc_Doc_Rev
End If
'Affectation des valeurs du documents dans les "Fields" qui sont les champs custom décrlaré dans le document word dans la partie Information
Documents.Add Loc_Path_Template 'Ajoute le document à la collection selon la template
ActiveDocument.CustomDocumentProperties("_Doc_ID").Value = Loc_Doc_id
ActiveDocument.CustomDocumentProperties("_Doc_File").Value = Loc_Doc_File
ActiveDocument.CustomDocumentProperties("_Doc_Status").Value = Loc_Doc_Status
ActiveDocument.CustomDocumentProperties("_Doc_Title").Value = Loc_Doc_Title
ActiveDocument.CustomDocumentProperties("_Doc_Rev").Value = loc_Doc_Rev
ActiveDocument.CustomDocumentProperties("_Pjt_Name").Value = Loc_Pjt_Name
ActiveDocument.CustomDocumentProperties("_Client_Number").Value = Loc_Client_Number
ActiveDocument.CustomDocumentProperties("_Client").Value = Loc_Client
'Mise à jour des Fields, du body, et des en-têtes/pied de page
Dim Sub_Doc_Sections As Sections
Dim Sub_Doc_Headers_footers As HeaderFooter
'Code pour mettre à jour les fields en-têtes et pieds de page et body à FAIRE
ActiveDocument.SaveAs FileName:=Loc_Path_Pjt & "\8 - Docs de sortie\" & Sub_Doc_Id_File & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & " - " & Loc_Doc_Title & "\" & loc_Doc_Rev & "\" & Loc_Doc_Otp & "-" & Loc_Doc_File & "-" & Loc_Doc_id & "-[" & loc_Doc_Rev & "] - " & Loc_Doc_Title & ".docx"
Documents.Close 'Fermeture du document word
LaFin:
End Sub
'Sub qui créé les dossiers d'un projet si il n'éxiste pas et qui gère la création des dossiers avec le nom du document en fonction de la LDE
Private Sub New_project_structure(Path_Pjt As String)
'*Déclaration des variables locale de la sub
Dim Loc_Path_Pjt As String 'Chemin du "\8 - Docs de sortie"
'*Affectation des variables locales avec les arguments de la sub
Loc_Path_Pjt = Path_Pjt
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\1 - PRO", vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\1 - PRO" 'Création dossier
End If
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\2 - DJD", vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\2 - DJD" 'Création dossier
End If
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\3 - DD", vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\3 - DD" 'Création dossier
End If
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\4 - DFC", vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\4 - DFC" 'Création dossier
End If
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\5 - RCI", vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\5 - RCI" 'Création dossier
End If
If Dir(Loc_Path_Pjt & "\8 - Docs de sortie\6 - DU", vbDirectory) = "" Then
MkDir Loc_Path_Pjt & "\8 - Docs de sortie\6 - DU" 'Création dossier
End If
End Sub |
Partager