IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Problème migration de 2003 vers 2010 [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Set vlChart = Me.ole_graph.Object.Application.Chart
    Quelqu'un a-t-il une idée ?

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    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

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    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 : 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
    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

  4. #4
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut
    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...)

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    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.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    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

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    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....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Problème migration 2003 vers 2010
    Par skywaukers dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/09/2013, 10h02
  2. Migration Excel 2003 vers 2010
    Par Shereen dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2013, 21h05
  3. [Débutant] Migration WSS 2003 vers 2010
    Par babacrt dans le forum Installation
    Réponses: 2
    Dernier message: 18/07/2012, 13h34
  4. Migration mdb 2003 vers adp 2010
    Par jloois dans le forum Projets ADP
    Réponses: 4
    Dernier message: 03/05/2010, 21h11
  5. Réponses: 4
    Dernier message: 05/07/2009, 21h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo