Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 10h51   #1
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Par défaut Problème migration de 2003 vers 2010

Bonjour,

L'application que je viens de développer sous ACCESS 2003 est terminée et fonctionnelle. Mais l'entreprise où je suis va migrer sur Seven et le pack Office 2010. Je suis donc en train d'effectuer les tests et d'y apporter les corrections.

J'utiliserais donc ce topic pour les différents problèmes rencontrés (sauf avis contraire des modérateurs).

Le premier problème rencontré était qu'il fallait installer La bibliothèque "Microsoft Office 2003 Web Components" (cela peut être utile pour certains). Mais là je suis tombé sur un message que je ne comprends pas lorsque je veux ouvrir un formulaire avec un graphique :
Citation:
Envoyé par ACCESS2010
Erreur automation:
L'appelant est en train de diffuser un appel asynchrone et ne peut pas effectuer d'appel sortant au nom de cet appel.
VBE bloque sur :
Code :
Set vlChart = Me.ole_graph.Object.Application.Chart
Quelqu'un a-t-il une idée ?
__________________
L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 11h24   #2
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 256
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 256
Points : 1 872
Points : 1 872
Bonjour,

Ca fait un moment que je travaille sur cette migration, actuellement sans succès. Le parc client est hétérogène avec de plus en plus de PC sous w7 et des office allant de 2000 à 2010.

Actuellement la seule solution qui fonctionne est la suivante :
- je développe en access 2000 sur XP (ce qui m'interdit de changer mon PC car je n'arrive pas à installer office 2000 sous w7)
- j'installe sur chaque PC client un runtime access de la même version que son office

Vos avis m'intéressent mais il semble que la compatibilité ascendante soit bien mieux assurée que la compatibilité descendante. Le développeur a donc intérêt à utiliser un logiciel le plus vieux possible
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 11h52   #3
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Merci Nico pour ta contribution malheureusement je n'ai pas cette souplesse et il faut absolument que je trouve une solution.

A priori c'est le seul problème qui me reste à résoudre (et pas des moindres, c'est ce qui permet aux administrateurs de l'appli d'exploiter les résultats).

Voici mon code, peut-être que je m'y suis mal pris (même si ça marche sous 2003).

Code :
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
Option Compare Database
Option Explicit
 
Private vlChart As Graph.Chart, vlDataSheet As Graph.DataSheet
Private Const cstRqt As String = "TRANSFORM round(Sum(totalReel),0) AS totalH " & _
                                 "SELECT Left([nomMois],4) AS Mois, calculMoyenneGraph([IDmois]) as Moyenne " & _
                                 "FROM R_tableauMensuel " & _
                                 "GROUP BY Left([nomMois],4), IDmois " & _
                                 "ORDER BY IDmois "
 
Private Sub AffPourcent()
 
    Dim X As Integer, i As Integer, j As Integer, totalMois As Long
 
    ' Pour chaque série du graph
    For X = 1 To vlChart.SeriesCollection.Count
        With vlChart.SeriesCollection(X)
            ' Si on est sur une analyse mensuelle (histogrammes)
            If Forms("F_exploitation").fra_analyse = 1 Then
                ' Si on a coché la case permettant d'afficher les pourcentages et que la série n'est pas la courbe
                If Me.chk_pourcent And .ChartType <> 4 Then
                    .HasDataLabels = True           ' On affiche les étiquettes
                    For i = 1 To .DataLabels.Count  ' Pour chaque étiquette
                        If Forms("F_exploitation").fra_donnees = 3 Then ' Si il s'agit d'afficher les performances
                            .DataLabels(i).ShowValue = True             ' L'étiquette affichera les valeurs
                        Else                                            ' Sinon
                            ' On calcule la somme du mois
                            totalMois = 0
                            For j = 2 To vlChart.SeriesCollection.Count
                                totalMois = totalMois + vlDataSheet.Range(VBA.Chr(64 + j) & i).Value
                            Next j
                            ' Si cette somme est nulle, on lui attribue zéro sinon on lui attribue le %
                            If totalMois <> 0 Then
                                .DataLabels(i).Caption = round(100 * (vlDataSheet.Range(VBA.Chr(64 + X) & i).Value / totalMois), 0) & " %"
                            Else
                                .DataLabels(i).Caption = "0 %"
                            End If
                        End If
                        ' Mise en forme des étiquettes
                        .DataLabels(i).Font.Size = 8
                        .DataLabels(i).Font.Background = xlBackgroundOpaque
                        .DataLabels(i).Interior.ColorIndex = 2
                    Next i
                Else                                ' Sinon
                    .HasDataLabels = False          ' On masque les étiquettes
                End If
            Else    ' Sinon (si on est sur une analyse annuelle : courbes)
                .HasDataLabels = Not .HasDataLabels
                If .HasDataLabels Then
                    ' Mise en forme des étiquettes
                    .DataLabels.Font.Size = 8
                    .DataLabels.Font.Background = xlBackgroundOpaque
                    .DataLabels.Interior.ColorIndex = 2
                End If
            End If
        End With
    Next X
 
End Sub
 
Private Sub chk_pourcent_Click()
 
    AffPourcent     ' Voir plus haut
 
End Sub
 
Private Sub Form_Open(Cancel As Integer)
 
    Dim strSQL As String, strService As String, i As Integer
 
    ajustFenetre
 
    CommandBars("MenuForm").Enabled = True ' Active la barre de menus personnalisée
 
    Set vlChart = Me.ole_graph.Object.Application.Chart
    Set vlDataSheet = vlChart.Application.DataSheet
    boolEditGraph = False
    strService = " : Global QC"
 
    ' Modification de la source du graph en fonction des choix de l'utilisateur
    With Forms("F_exploitation")
        Select Case .fra_analyse
            Case 1  ' Mensuelle => Histogramme
                Me.lbl_etiquettes.Caption = "Afficher les pourcentages"
                Select Case .fra_donnees
                    Case 1  ' Heures
                        vlChart.ChartType = xlColumnStacked
                        strSQL = cstRqt
                    Case 3  ' Performances
                        vlChart.ChartType = xlColumnClustered
                        strSQL = "TRANSFORM IIf(Sum([totalReel])=0,0,Round((Sum([Theorique])/Sum([totalReel]))*100,0)) & '%' AS Perf " & _
                                 "SELECT Left([nomMois],4) AS Mois, '100 %' AS [100%] " & _
                                 "FROM R_tableauMensuel " & _
                                 "GROUP BY Left([nomMois],4), IDmois " & _
                                 "ORDER BY IDmois "
                End Select
 
                If .fra_etat = 2 Then
                    strSQL = strSQL & "PIVOT nomService;"
                Else
                    strSQL = strSQL & "PIVOT categorie;"
                End If
 
            Case 2  ' Annuelle => Courbe
                vlChart.ChartType = xlLine
                Me.lbl_etiquettes.Caption = "Afficher les valeurs"
                Select Case .fra_donnees
                    Case 1  ' Heures
                        strSQL = "SELECT Left([nomMois],4) AS Mois, " & _
                                 "round(Sum(Moy),0) AS Moyenne, round(Sum(totalReel),0) AS Réel, " & _
                                 "round(Sum(Prev),0) AS Prévisionnel, round(Sum(Theorique),0) AS Théorique " & _
                                 "FROM R_tableauMensuel " & _
                                 "GROUP BY Left([nomMois],4), IDmois " & _
                                 "ORDER BY IDmois;"
                        If .fra_etat = 2 Then strSQL = cstRqt & "PIVOT nomService;"
                    Case 3  ' Performances
                        strSQL = "SELECT Mois, ETP([Moyenne]," & DCount("*", "R_mois", "IDmois<>0") & "/12) AS [ETP moyen], " & _
                                 "ETP([Réel],[NbreSemaine]) AS [ETP réel], " & _
                                 "ETP([Prévisionnel],[NbreSemaine]) AS [ETP prévisionnel], " & _
                                 "ETP([Théorique],[NbreSemaine]) AS [ETP théorique] " & _
                                 "FROM R_annuelHeures " & _
                                 "GROUP BY Mois, ETP([Moyenne]," & DCount("*", "R_mois", "IDmois<>0") & "/12), ETP([Réel],[NbreSemaine]), " & _
                                 "ETP([Prévisionnel],[NbreSemaine]), ETP([Théorique],[NbreSemaine]), IDmois " & _
                                 "ORDER BY R_annuelHeures.IDmois;"
                        If .fra_etat = 2 Then strSQL = "TRANSFORM ETP(Sum([totalReel]),[NbreSemaine]) AS ETP " & _
                                                       "SELECT Left([nomMois],4) AS Mois, Moyenne " & _
                                                       "FROM R_tableauMensuel " & _
                                                       "INNER JOIN (SELECT IDmois, Round((Sum([reel])/(29.75*[NbreSemaine]))/DCount('*','T_services','IDservice<>3'),1) AS Moyenne " & _
                                                                   "FROM R_totalMensuel GROUP BY IDmois, NbreSemaine) AS R1 " & _
                                                       "ON R_tableauMensuel.IDmois = R1.IDmois " & _
                                                       "GROUP BY Left([nomMois],4), R_tableauMensuel.IDmois, R_tableauMensuel.NbreSemaine, R1.moyenne " & _
                                                       "ORDER BY R_tableauMensuel.IDmois " & _
                                                       "PIVOT R_tableauMensuel.nomService;"
                End Select
        End Select
        Me.ole_graph.RowSource = strSQL
 
        ' Modification du titre de l'axe des ordonnées
        If .fra_donnees = 1 Then
            vlChart.Axes(xlValue).AxisTitle.Caption = "Nbre d'heures"
        ElseIf .fra_analyse = 1 Then
            vlChart.Axes(xlValue).AxisTitle.Caption = "%age"
        Else
            vlChart.Axes(xlValue).AxisTitle.Caption = "ETPs"
        End If
 
        ' Changement du titre du graph
        Select Case .fra_etat
            Case 2
                strService = " : Par service"
            Case 3
                .md_service.SetFocus
                strService = " : " & .md_service.Text
        End Select
        vlChart.ChartTitle.Text = "Bilan des " & strTypDonnees & VBA.Chr(10) & _
                                  " sur l'année " & .txt_annee & strService
        If .chk_produit Then
            .md_produit.SetFocus
            vlChart.ChartTitle.Text = vlChart.ChartTitle.Text & " - " & .md_produit.Text
        End If
    End With
 
    ' Affecte le nom et le prénom de la personne loguée sous Windows à l'étiquette "Opérateur"
    Me("lbl_operateur").Caption = "Opérateur : " & NomPrenom(VBA.Environ("USERNAME"))
 
End Sub
 
Private Sub ole_graph_Updated(Code As Integer)
 
    Dim i As Integer
    Set vlChart = Me.ole_graph.Object.Application.Chart
 
    ' Mise en forme du graphique
    For i = 1 To vlChart.SeriesCollection.Count
        With vlChart.SeriesCollection(i)
            If i = 1 Then   ' Pour la première série : moyenne ou référence
                .ChartType = xlLine     ' courbe
                .Border.ColorIndex = 3  ' rouge
                .Border.Weight = xlThick    ' épais
            Else
                Select Case Forms("F_exploitation").fra_analyse
                    Case 1  ' Mensuelle(histogrammes)
                        .Border.ColorIndex = 1
                        .Border.Weight = xlThin
                        .Fill.TwoColorGradient msoGradientVertical, 1
                    Case 2  ' Annuelle(courbes)
                        .Border.ColorIndex = i + 2
                        .Border.Weight = xlMedium
                End Select
            End If
        End With
    Next i
 
End Sub
__________________
L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 13h07   #4
Membre actif
 
Avatar de antoinev2
 
Inscription : septembre 2008
Messages : 124
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : septembre 2008
Messages : 124
Points : 181
Points : 181
A tout hasard : tu as bien ajouté la référence à la bibliothèque "Office Web Components" à partir d'Office 2010?
Tu dois utiliser la même bibliothèque OWC pour Access 2010 que pour Access 2003, elle n'a pas évolué depuis.

C'est déjà pas mal car certaines choses très pratiques ne sont plus disponibles dans Access 2010 (par exemple le contrôle Calendar ActiveX...)
antoinev2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h01   #5
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Merci antoine de te pencher sur mon cas mais, comme je l'ai dit dans mon premier message, j'ai installé et activé la bibliothèque Microsoft Office 2003 Web Components. Le problème ne vient pas de là. Je continue de chercher mais si quelqu'un a des pistes, je suis preneur.
__________________
L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 13h43   #6
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bonjour,

Je me pose une question :
Dans l'en-tête du module, je déclare une variable (Private vlChart As Graph.Chart). D'après ce que j'ai compris, ça me permet d'y stocker un objet Chart et de l'appeler nimporte où dans le module. Or, sous 2003, le fait de l'initialiser sur l'évènement Form_Open ne me permetait pourtant pas de l'appeler sur l'évènement ole_graph_Updated. Je réinitialise donc la variable dans cet évènement (Set vlChart = Me.ole_graph.Object.Application.Chart). J'ai l'impression que le problème vient de là. Mais si je mets cette ligne en commentaire, j'ai une erreur comme quoi ma variable objet n'est pas définie....

Je continue de chercher mais je ne cracherai pas sur un coup de main
__________________
L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 14h16   #7
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
A priori j'ai résolu le problème !

J'ai placé le code de l'évènement ole_graph_Updated à la fin de l'évènement Form_Open. Et je n'ai plus de problème. Reste à savoir pourquoi j'avais placé ce code qui permet de mettre en forme le graphique sur l'évènement Updated du graph....Il me semble que sous 2003 ça coinçait....
__________________
L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h52.


 
 
 
 
Partenaires

Hébergement Web