bonjour
je développe actuellement une application qui génère à la volée des reports en utilisant l'automation word. je voudrai savoir si il y a un moyen pour détecter le passage d'une page à une autre dans mon report .
cordialement.
bonjour
je développe actuellement une application qui génère à la volée des reports en utilisant l'automation word. je voudrai savoir si il y a un moyen pour détecter le passage d'une page à une autre dans mon report .
cordialement.
merci les gars, vous etiez nombreux à consulter ma question. mais y'aurait pas un entre vous qui puisse me donner un tuyau? c'est question de vie ou de mort pour moi![]()
Alors... t'es mort!Envoyé par kinganasius
Plus sérieusement, quand une question n'obtient pas de réponse, il vaut mieux se demander pourquoi plutôt que de se la jouer dramatique.
Si, au moins, tu nous avais montré ton code, on aurait une petite idée d'où tu en es.Envoyé par kinganasius
N'oubliez pas de cliquer surquand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
voila le code qui me permet de générer le dit état :
1. l'ouverture du document:
2. Extraction des données qui vont alimenter un mon état:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim doc As New word.Application Dim path_file = "c:\templates\liste_taux.doc" Dim liste_taux As word.Document = doc.Documents.Open(FileName:=path_file) doc.Selection.HomeKey() doc.Visible = False
3. Remplissage du tableau par les données extraites de la base de données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 'calculer le nombre de type de dossier Dim req1 As String = "select count(*) from TYPE_DOSSIER" Dim rs1 As New OracleCommand(req1, conn) rs1.CommandType = CommandType.Text Dim nbr_typ As OracleDataReader = rs1.ExecuteReader() nbr_typ.Read() Dim i As Integer = nbr_typ.Item(0) + 1 Dim req2 As String = "select TD_LIBELLE,TD_TAUX_CNIA, TD_TAUX_CNOPS, TD_PLAFOND_CNIA, TD_PLAFOND_CNOPS from TYPE_DOSSIER" Dim rs2 As New OracleCommand(req2, conn) rs2.CommandType = CommandType.Text Dim list_typ_dos As OracleDataReader = rs2.ExecuteReader()
4. le problème que je n'arrive pas à résoudre jusqu'à maintenant est que je n'arrive pas à executer la partie du code ci-dessous à chaque fois que mon état s'étale sur une nouvelle page (avoir la même entête de tableau sur chaque page de mon état.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Dim k As Integer k = 2 Dim tableau As word.Table tableau = liste_taux.Tables.Add(Range:=doc.Selection.Range, NumRows:=i, NumColumns:=5) tableau.Borders.Enable = True tableau.Rows.HeadingFormat = True tableau.Range.Font.Size = 10 tableau.Range.Font.Name = "Verdana" Dim q As Integer = 0 While list_typ_dos.Read() And k <= i MsgBox(doc.Selection.Information(word.WdInformation.wdFirstCharacterLineNumber)) tableau.AutoFitBehavior(1) tableau.Cell(k, 1).Range.Text = list_typ_dos.Item(0) tableau.Cell(k, 2).Range.Text = Str(Val(list_typ_dos.Item(1)) * 100) + " %" tableau.Cell(k, 3).Range.Text = Str(Val(list_typ_dos.Item(2)) * 100) + " %" tableau.Cell(k, 4).Range.Text = Str(list_typ_dos.Item(3)) + " dhs" tableau.Cell(k, 5).Range.Text = Str(list_typ_dos.Item(4)) + " dhs" k = k + 1 q += 1 End While doc.PrintOut() liste_taux.Close(0) doc.Quit() conn.Close()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 tableau.Cell(k, 1).Range.Text = "Libellé" tableau.Cell(k, 2).Range.Text = "Taux CNIA" tableau.Cell(k, 3).Range.Text = "Taux CNOPS" tableau.Cell(k, 4).Range.Text = "Plafond CNIA" tableau.Cell(k, 5).Range.Text = "Plafond CNOPS"
Même si ton environnement de développement est VB6, tu fais appel à de la programmation VBA.
A ce titre, je vais déplacer ta question dans le sous-forum VBA pour que les spécialistes en la matière puissent y jeter un oeil.
Je suppose que tu n'y verras pas d'inconvénient.
N'oubliez pas de cliquer surquand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
Pourquoi ne pas utiliser un modèle Word vide avec un saut de page ...
Voici un exemple de code que j'utilise :
A placer dans un module
Dans un document word, je place des flagsque je remplace ensuite par les valeurs souhaitées.<monflag>
Utilises un code particulier dans ton document word pour spécifier un saut de ligne, page, ... et remplace le ensuite par le code VBA qui convient.
++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Dim wdApp As Object ' Fonction qui retourne une chaîne Public Function GenerateDocument(sTags As String, sValues As String, SsourcePath As String, SdestPath As String) As String On Error GoTo ErrHandler Dim arrTags() As String, arrValues() As String, iLoop As Integer Dim iPosition As Integer, iCheckError As Integer iCheckError = 0 Set wdApp = CreateObject("Word.Application") iCheckError = 1 'Ouvre le fichier modèle à partir du chemin spécifié (envoyé par le fichier ASP _ en tant que paramètre). Une référence au nouveau document Word, fondé sur le modèle, _ est créée sur le serveur : wdApp.Documents.Open SsourcePath 'Récupération de toutes les valeurs obtenues à partir du fichier ASP, _ dans le tableau arrTags, en utilisant la fonction Split. La virgule sert de _ séparateur afin de séparer les valeurs de balise dans le fichier ASP : arrTags = Split(sTags, ", ") 'Stocke les valeurs correspondant aux valeurs en entrée dans le tableau arrValues. _ Le caractère pipe (|) est utilisé comme séparateur arrValues = Split(sValues, " | ") 'Traitement par itération des balises du tableau arrTags et utilisation _ de la fonction Rechercher/Remplacer (en utilisant un script VBA) pour trouver _ les balises du tableau, dans le document Word créé, en les remplaçant par les _ valeurs correspondantes du tableau arrValues. La série de virgule correspond à _ certains paramètres optionnels de la méthode Find.Execute qui n 'ont pas été _ définis. Nous ne nous intéressons ici qu'à la mise en uvre des options _ MatchWholeWord, ReplaceWith, et ReplaceAll (représentées ici par la constante _ numérique 2). 'Contournement d'un bug word : impossibilité de rechercher/remplacer des chaînes_ 'de plus de 255 caractères For iLoop = 0 To UBound(arrTags) If Len(arrValues(iLoop)) < 255 Then sTampon = arrValues(iLoop) iPosition = InStr(sTampon, "ZZRetCharZZ") If iPosition > 0 Then wdApp.Selection.Find.ClearFormatting With wdApp.Selection.Find .Text = arrTags(iLoop) .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With wdApp.Selection.Find.Execute Do While iPosition > 0 wdApp.Selection.TypeText Text:=left(sTampon, iPosition - 1) wdApp.Selection.TypeParagraph sTampon = right(sTampon, Len(sTampon) - (iPosition + 10)) iPosition = InStr(sTampon, "ZZRetCharZZ") Loop 'On affiche la dernière partie ! wdApp.Selection.TypeText Text:=sTampon Else wdApp.ActiveDocument.Content.Find.Execute arrTags(iLoop), , True, , _ , , , , , sTampon, 2 End If Else 'Si la chaîne est plus longue 'If arrTags(iLoop) = "<phrase_4>" Or arrTags(iLoop) = "<nom_agent>" Then sTampon = arrValues(iLoop) iPosition = InStr(sTampon, "ZZRetCharZZ") If iPosition > 0 Then wdApp.Selection.Find.ClearFormatting wdApp.Selection.Find.Text = arrTags(iLoop) wdApp.Selection.Find.Execute Do While iPosition > 0 wdApp.Selection.TypeText Text:=left(sTampon, iPosition - 1) wdApp.Selection.TypeParagraph sTampon = right(sTampon, Len(sTampon) - (iPosition + 10)) iPosition = InStr(sTampon, "ZZRetCharZZ") Loop 'On affiche la dernière partie ! wdApp.Selection.TypeText Text:=sTampon End If 'End If End If Next iLoop 'Enregistre le document à l'endroit spécifié wdApp.ActiveDocument.SaveAs SdestPath 'Ferme le document, quitte et release wdApp.ActiveDocument.Close wdApp.Quit Set wdApp = Nothing 'Retourne un flag success et quitte la fonction GenerateDocument = "Success" Exit Function 'Routine de gestion d'erreur. Retourne le message d'erreur, 'si une erreur s'est produite durant le processus. ErrHandler: If iCheckError = 0 Then 'Gestion des logs Global_ErrorLog = "Erreur dans la génération du rapport : " & SdestPath Global_ErrorLog = Global_ErrorLog & vbCrLf & "Impossible de charger le composant Word.Application" Call SaveLogFile("DocumentObject", Global_ErrorLog, LOG_FILENAME, sModeDebug) GenerateDocument = "Impossible de charger le composant Word.Application" Exit Function End If 'Quitte et libère le word document objet wdApp.ActiveDocument.Close wdApp.Quit Set wdApp = Nothing 'Construction du message d'erreur et le retourne Dim ErrMsg As String ErrMsg = "Error Number: " & Err.Number & Chr(10) & "Error Source: " & Err.Source & Chr(10) ErrMsg = ErrMsg & "Error Description: " & Err.Description & Chr(10) GenerateDocument = ErrMsg 'Gestion des logs Global_ErrorLog = "Erreur dans la génération du rapport : " & SdestPath Global_ErrorLog = Global_ErrorLog & vbCrLf & ErrMsg Global_ErrorLog = Global_ErrorLog & vbCrLf & "sTags = " & sTags Global_ErrorLog = Global_ErrorLog & vbCrLf & "sValues = " & sValues Call SaveLogFile("DocumentObject", Global_ErrorLog, LOG_FILENAME, sModeDebug) Exit Function End Function
Partager