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
| Public Function OuvreLettreType(LaRequete As String, LeDOC As String, Parametre As String) As Boolean
'les paramètres sont du type "NOM_PARAM1=VALEUR_PARAM1;NOM_PARAM2=VALEUR_PARAM2;..."
Dim PathDot As String
Dim Rst As DAO.Recordset
Dim MyReq As DAO.QueryDef
Dim objWord As Object
Dim objDoc As Object
Dim LeChamps As DAO.Field
Dim LesParams() As String
Dim Couple() As String
Dim i As Integer
Dim TempValeur As Variant
OuvreLettreType = False
PathDot = DLookup("Chemin", "tblLink", "Base='PathDot'")
If Dir(PathDot & LeDOC) = "" Then
MsgBox "Le model de ce courrier '" & LeDOC & "' est introuvable." & vbCrLf & _
"Vérifiez s'il n'a pas été supprimé, déplacé ou renommé.", vbCritical, "Erreur"
Exit Function
End If
DoCmd.Echo True, "Génération de la lettre en cours..."
' faire du pointeur de la souris un sablier (ou autre) avec Hourglass
DoCmd.Hourglass True
On Error GoTo err_req
'ouverture de la requête qui va servir à la création du document
Set MyReq = CurrentDb.QueryDefs(LaRequete)
'affectation des paramètres
LesParams = Split(Parametre, ";")
For i = 0 To UBound(LesParams)
Couple = Split(LesParams(i), "=")
MyReq.Parameters(Couple(0)) = Couple(1)
Next i
'création d'un recordset sur la requête
Set Rst = MyReq.OpenRecordset
On Error GoTo 0
'création d'un objet word
Set objWord = CreateObject("Word.Application")
'ajout d'un nouveau document basé sur le model passé en paramètre
Set objDoc = objWord.Documents.Add(Template:=PathDot & LeDOC, _
NewTemplate:=False) 'NewTemplate:=False, DocumentType:=0)
'parcours de tous les champs de la requête
For Each LeChamps In Rst.Fields
'replacement de toutes les occurences "{{CHAMPS}}" du document par le contenu du même champs de la requête
objWord.Selection.Find.ClearFormatting
objWord.Selection.Find.Replacement.ClearFormatting
With objWord.Selection.Find
.Text = "{{" & LeChamps.Name & "}}"
TempValeur = Rst(LeChamps.Name)
'formatage de la date (s'il s'agit d'une date)
If IsDate(TempValeur) Then TempValeur = CStr(Format(TempValeur, "dd/mm/yy"))
.Replacement.Text = IIf(IsNull(TempValeur), "", TempValeur)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
objWord.Selection.Find.Execute Replace:=wdReplaceAll
Next LeChamps
'{{AUJOURDHUI}}
objWord.Selection.Find.ClearFormatting
objWord.Selection.Find.Replacement.ClearFormatting
With objWord.Selection.Find
.Text = "{{AUJOURDHUI}}"
.Replacement.Text = CStr(Format(DATE, "dddd dd mmmm yyyy"))
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
objWord.Selection.Find.Execute Replace:=wdReplaceAll
'repassage des bouton de défilement en mode page (il était en mode rechercher à cause de la manip' précédante)
objWord.Application.Browser.Target = wdBrowsePage
'apparition de Word
objWord.Visible = True
'libération de tous les objects
Set Rst = Nothing
Set MyReq = Nothing
Set objWord = Nothing
Set objDoc = Nothing
Set LeChamps = Nothing
DoCmd.Hourglass False
OuvreLettreType = True
Exit Function
err_req:
DoCmd.Hourglass False
'libération de tous les objects
Set Rst = Nothing
Set MyReq = Nothing
Set objWord = Nothing
Set objDoc = Nothing
Set LeChamps = Nothing
MsgBox "Une erreur s'est produite lors de l'ouverture des données nécessaires à la génération de la lettre." & vbCrLf & _
"L'erreur est la suivante : " & Err.Description, vbCritical, "Erreur"
End Function |
Partager