Bonjour!
Je m'excuse d'avance si ce problème a déjà été abordé mais j'ai vraiment essayé de chercher partout et il n'y a nulle part ce sujet.
J'ai crée un etat (Access 2003) lié à une requête de sélection. Le problème est que les actions sur l'etat par code VBA (Impression, aperçu) ne donne pas le même résultat que ces même actions faites à la main.
En fait, j'ai essayé de faire à la main l'option "regrouper" pour que çà commence à la même ligne. ie: j'ai crée une table triée (temporaire) où certaines informations sont souvent répétitives (sauf la dernière colonne) donc je fais un premier traitement pour supprimer ces informations répétitives (en ne les gardant que sur un seul enregistrement à chaque fois).
Après ce traitement, quand je crée/imprime l'etat lié à cette table (ou par la requête qui y est liée), les champs qui étaient censé être vides y apparaissent non vides. Mais quand j'ouvre l'etat à la main (après avoir fermé le formulaire contenant le code), ces même champs sont bien vides.
voilà la partie du code concernée (Table_temp1 est la table temporaire où je récupère mes informations, PDF_P est le nom du PDFCréator)
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 'ouverture d'un etat Public Sub Ouvre_Etat() Dim req As String Dim Definition As Variant Dim Report_Name As String Dim Req_Name As String Dim i As Integer Dim Exist_Impr As Boolean Exist_Impr = False Report_Name = "Liste par Base" Req_Name = "Req_par_base" DoCmd.SetWarnings (False) DoCmd.RunSQL "delete * from Table_temp1;" DoCmd.RunSQL "insert into table_temp1 " & _ "SELECT distinct user.nom, user.prénom, user.[code entité]+"" ""+user.entite AS [Entité], user.admin_profile+"" ""+list_admin_profiles.description AS Profile, habilitations.work_space_id+"" ""+list_dealbook.workspace_name AS [Dealbook associé] " & _ "FROM [User], list_admin_profiles, list_dealbook, habilitations, habilitation_aux_bases_fermat " & _ "WHERE (user.user=habilitations.user And habilitations.work_space_id=list_dealbook.work_space_id And user.admin_profile=list_admin_profiles.cd_admin_profile And user.user=habilitation_aux_bases_fermat.user And habilitation_aux_bases_fermat.base_fermat=""" & Form_Le_Formulaire.Detail_Report.Value & _ """ and isnull(habilitation_aux_bases_fermat.[date suppression])) order by user.nom;" Call Traite_Table_Temp1 DoCmd.SetWarnings (True) ' Set Definition = CurrentDb.QueryDefs(Req_Name) ' Definition.sql = req ' Definition.Close For i = 0 To Application.Printers.Count - 1 If Application.Printers(i).DeviceName = PDF_P Then Exist_Impr = True Next If Exist_Impr = True Then Set Application.Printer = Application.Printers(PDF_P) 'DoCmd.OpenReport Report_Name, acViewPreview DoCmd.OpenReport Report_Name, acViewNormal Else If MsgBox("Export au Format PDF impossible car l'application '" & PDF_P & "' est introuvable depuis ACCESS" & Chr(10) & _ "Voulez-vous Exporter les résultats en format HTML?", vbCritical + vbYesNo, "PDFCreator introuvable") = vbYes Then DoCmd.OutputTo acOutputReport, "Liste par base", acFormatHTML, Nom_html_sortie, True End If End If End Sub
procédure pour enlever les informations répétitives de la table temporaire (nom + prenom toujours unique)
J'espère que quelqu'un pourrait m'aider sur ce point car là je n'y comprend plus rien
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 Private Sub Traite_Table_Temp1() Dim i As Integer Dim bo As Boolean Dim req As String Dim TNom As String Dim TPrenom As String Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset TNom = "" TPrenom = "" cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentDb.name & "" req = "SELECT * FROM Table_temp1;" rst.Open req, cnn, adOpenDynamic, adLockOptimistic If Not rst.EOF Then rst.MoveFirst Do bo = False If TNom = rst![nom] And TPrenom = rst![prénom] Then bo = True If bo = True Then rst![nom] = " " rst![prénom] = " " rst![Entité] = " " rst![profile] = " " Else TNom = rst![nom] TPrenom = rst![prénom] End If rst.MoveNext Loop Until rst.EOF End If rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing End Sub
Merci!
Edit: je n'arrive pas à savoir si les mises à jour de la table ne sont effectives qu'après le fermeture de cette procédure (peu probable) ou c'est l'affichage de l'Etat qui prend l'"Etat" de la table à une date antérieure (ptêt qui sait) ou encore c'est juste un problème de l'etat (mais pourquoi alors quand on ouvre à la main tout est bien comme il faut ).
Partager