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 :

[VBA][OLE] Problème d'accès aux composants


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [VBA][OLE] Problème d'accès aux composants
    Bonjour,

    J'ai intégré des graphiques à des états Access 2000, graphiques dont les données proviennent de tables.
    Jusqu'au mois dernier, tout allait bien, mais depuis 1 mois, mes graphiques ne se mettent plus à jour quand les données des tables sont modifiées.
    En esayant d'accéder aux objets graphiques, j'ai eu les messages d'erreur suivants :
    - "Un problème est survenu lors de la communication avec le serveur OLE"
    - Assurez-vous que vous êtes connecté au serveur réseau sur lequel se trouve le serveur OLE
    - Fermez le serveur OLE, puis relancez-le,etc...
    - Réinstallez le serveur OLE pour être sur qu'il est inscrit.

    Je dois ensuite "tuer" la tâche "graph9.exe" pour débloquer mon application.

    Pour tenter de remédier au problème, j'ai déjà :
    - désinstallé mon antivirus, F-Secure (j'avais lu sur le forum MS que ca pouvait être lié à Norton AV)
    - réinstallé 3 fois MS Office.

    Mais jusque là, rien n'y fait...

    Des pistes?

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 129
    Points : 119
    Points
    119
    Par défaut
    bonjour

    regarde dans outils/références se qui est coché
    OLE automation ???

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    oui, je ne l'ai pas précisé, mais OLE Automation est bien coché dans les références...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 56
    Points
    56
    Par défaut Même cause, même effet, quel remède ?
    Même problème non-résolu jusque là

    J'ai un formulaire principal:
    - un tableau (ss_form indépendant du principal) dont la source sql se recrée à chaque lancement du form principal
    - un objet graphique avec le même système de recréation de source sql, mais qui se diffrencie avec un renommage des champs pour l'échelle.

    Ensuite je clique sur un bouton exporter, qui m'ouvre un formulaire export de choix de mode d'export
    >je clique sur un bouton JPG qui m'exporte bien l'objet graphique en JPG, mais lorsque je ferme mon form principal,

    j'ai aussi ce message
    "Un problème est survenu lors de la communication avec le serveur OLE"
    - Assurez-vous que vous êtes connecté au serveur réseau sur lequel se trouve le serveur OLE
    - Fermez le serveur OLE, puis relancez-le,etc...
    - Réinstallez le serveur OLE pour être sur qu'il est inscrit.
    Et pareil que generalgreg, j'ai remarqué que je dois fermer le processus GRAPH.EXE dans le gestionnaire des taches. Quand je retourne sur mon fichier access (pas quitter), là je peux fermer mes formulaires et tout remarche, jusqu'à ce que je relance un export JPG...etc...

    J'ai le même message d'erreur si je lance, à partir d'un bouton situé cette fois-ci le formulaire principal, l'impression de l'état associé au form. princip., puis l'export du graphe en jpg (le jpg se crée correctement):

    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
    Private Sub Commande42_Click()
    Dim ReponseJPG As VbMsgBoxResult
    Dim RepertoireJPG As String
    Dim nOmeta As String
     
    nOmeta = "Positionnement_Massique_Avion"
    RepertoireJPG = CurrentDir
     
    ReponseJPG = Msgbox("Souhaitez vous exporter le graphe au format JPEG ?", vbYesNo, "Export JPEG")
    If ReponseJPG = vbYes Then
     
        Export_JPG "" & nOmetat & "", RepertoireJPG
        Msgbox ("Export JPG Terminée")
     
    End If
    End Sub
     
    Public Sub Export_JPG(NomEtat As String, RepertoireJPG)
        Dim GraphName as string', NomGraphOLE as string
        Dim oleGrf As Object
     
        GraphName = "C:\Logo.jpg"
        'NomGraphOLE="Positionnement_Massique_Avion_graphe  j'arrive pas ttrop a écrire cette ligne, mais c pas un pb 
     
        Apercu_Etat_btn_Click 'envoi notamment mes requetes sources du form vers celles de l'etat, marche parfaitement
     
        Set oleGrf = Reports(NomEtat).Positionnement_Massique_Avion_graphe 'ou Forms(IDEM sur la ligne......)
        oleGrf.Export filename:=GraphName
        Set oleGrf = Nothing
     
        DoCmd.Close 'ferme l'etat
     
    End Sub
    J'ai ACCESS2000, OLE.Automation est enclenché également. Je précise au cas où que l'etat ne me sort qu'une page avec le tableau des items et le graphique comparatif

    Si generalgreg ou quelqu'un a déjà connu ce probleme... Help

  5. #5
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonsoir,

    Quand ce message apparait en règle générale le pointeur de l'objet OLE est perdu, concrètement Access ne sais pas ou tout du moins n'arrive pas à trouver l'objet graphique qui est censé être implémenté (via une bibliothèque d'où l'intérêt de vérifier les références). Il est possible que l'objet OLE ait été fermé et désaloué par un processus / programme externe à access (comme graph.exe) ou que le lien ait été cassé : access a enregistré l'id du pointeur au moment de la création de l'objet, l'objet a été déplacé en mémoire l'identifiant ne correspond plus -> plantage.

    Ce deuxième cas est d'autant plus dangereux que l'objet lui même en mémoire risque de ne pas être désaloué avant l'arrêt de la machine, cela signifie que l'on peu aller jusqu'à bloquer le système dans les cas extremes.

    Un autre indice est que généralement quand le pointeur est perdue l'objet deviens un rectangle blanc tout en gradant sa forme d'origine et l'accès à ses propriété propre (hors propriété commune que possède tout objet dans access) est impossible.

    Si l'acces aux propriétés de l'objets est bonne l'objet est bien instancié et lié (le pointeur n'est pas perdu) dans ce cas une redéfinition de la source de donnée devrait suffire, voir peut être un simple refresh.

    J'espère vous avoir été utile

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 56
    Points
    56
    Par défaut
    pour toutes ces indications Tonioyo, j'en prends note...

    Et je vous redis avec le code quand ce sera résolu

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 56
    Points
    56
    Par défaut résolu
    Merci Tonioya, tous les symptones que tu décris sont très pertinent, j'aurai progressé avec ça. Donc j'ai résolu le pb, tout est décri dans le pavé de code que je vous lache, un peu trop complet que vous pourriez vous y perdre...

    En gros il m'a fallu du temps pour comprendre le fonctionnement de rafraichissement de ma requête. Pour résumer mon cas, j'ai un message d'erreur quand je ne filtre pas la liste d'items, ou alors ça marche nickel quand je filtre et je sélectionne des items dans ma liste filtré

    LE CODE A L'EXTERIEUR DES ------- DEVRAIT VOUS SUFFIRE, SINON LISEZ TOUT

    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
    Public Sub btn_editer_graphe_Click()
    On Error GoTo Err_btn_editer_graphe_Click
     
    Dim ReponseJPG As VbMsgBoxResult
    Dim RepertoireJPG As String
    Dim nOmform As String
    nOmform = "Positionnement_Massique_Avion"
    RepertoireJPG = CurrentDir
     
    ReponseJPG = Msgbox("Souhaitez vous exporter le graphe au format JPEG ?", vbYesNo, "Export JPEG")
    If ReponseJPG = vbYes Then
     
        Export_JPG "" & nOmform & "", RepertoireJPG
        Msgbox ("Export JPG Terminée")
     
    End If
     
    Exit_btn_editer_graphe_Click:
        Exit Sub
    Err_btn_editer_graphe_Click:
        Msgbox Err.Description
        Resume Exit_btn_editer_graphe_Click
    End Sub
     
    Public Sub Export_JPG(Nomfor As String, RepertoireJPG)
        Dim GraphName As String ', NomGraphOLE, Nomgraph As String
        Dim oleGrf As Object
        Dim sql As String
     
        GraphName = "C:\Logo.jpg"
        sql = Forms.Positionnement_Massique_Avion.Positionnement_Massique_Avion_graphe.RowSource
     
        Apercu_Etat_btn_Click 'procédure de génération de l'état utilisée à pls autres moments
     
    'LE CODE A L'EXTERIEUR DES ------- DEVRAIT VOUS SUFFIRE, SINON LISEZ TOUT
    'Pour résumer mon cas, j'ai un message d'erreur quand je ne filtre pas la liste d'items, ou alors ça marche nickel quand je filtre et je sélectionne des items dans ma liste filtré
     
    '-------------------------------------------------------------------
    ' Dans mon cas j'ai un filtre de sélection d'item avant la génération de mon form, si on sélectionne une fonction précise, une liste d'items précise sort en conséquent
    ' Mon controle incrémentant le filtre est comme ceci : controle.value={'Filtrer";fonction1;fonction2...fonctionN) aynt pour source Table.Fonction {fonction1;fonction2...fonctionN).
    ' Filtrer est le masque de saisie.
    ' Lorsque je sélectionne dans une liste d'items pas filtrée (donc en laissant le masque de saisie Filtrer), mes requêtes n'ajoutent pas la condition where "Fonction="Forms!Fonction..."
    ' ce qui est mon souhait, mon form et etat de comparaison se génerebt bien, mais lors de l'export graphique, j'obtiens le message d'erreur,
    ' il doit y avoir un pb avec pas mal de VBA en rapport avec le filtre.
     
    ' A AJOUTER SI VOUS AVEZ UN FILTRE GENERAL (ex:fonction d'un avion) SUR VOTRE ETAT/FORM PRINCIPAL, généré après sélection avions dans le form de selection d'avion filtré ou non;
    ' LE MEME FILTRE DANS LE WHERE DE VOTRE REQUETE SOURCE DE VOTRE TABLEAU DE DONNEES MIS EN SS_ETAT/SS_FORM INDEPENDANT ;
    ' ET AUSSI LE MEME FILTRE DANS LE WHERE DE VOTRE REQUETE SOURCE DE VOTRE GRAPHIQUE QUI EST UN OBJET DE VOTRE ETAT/FORM PRINCIPAL
    ' DONC DEPENDANT DE VOTRE ETAT/FORM PRINCIPAL ET DE SON FILTRE PAR CONSEQUENT
     
    'En espérant que ça soit compréhensible si vous tombez sur le meme probleme...
     
        'ces 3 lignes suivantes sont donc toutes INDISPENSABLES (encore plus la 3e), tout ça évite d'avoir une absence de curseur sur le graphique à la fin,
        'sinon il n'est plus reconnu d'où message d'erreur probleme OLE graphique
        'Donc en fait réactualise deux fois la requête du graphique de l'état par la requête du form, qui lui ne "bouge pas" pendant la sub
        DoCmd.OpenReport Nomfor, acDesign
        Reports(Nomfor).Positionnement_Massique_Avion_graphe.RowSource = sql
        DoCmd.OpenReport Nomfor, acPreview
    '--------------------------------------------------------------------
     
        Set oleGrf = Reports(Nomfor).Positionnement_Massique_Avion_graphe 'Forms avant
        oleGrf.Export filename:=GraphName
        Set oleGrf = Nothing
     
        DoCmd.OpenReport Nomfor, acDesign
        Reports(Nomfor).Positionnement_Massique_Avion_graphe.RowSource = sql
        DoCmd.Close , , acSaveNo 'ferme état sans save, et retour au form tjs ouvert
     
    End Sub


    CA c'est fait

    Pour moi, c'est RESOLU en tout cas

  8. #8
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonjour,

    Content d'avoir pu t'aider, j'ai regardé ton code et je l'ai un peu amélioré (surtout le début).

    Les dernières opérations de la dernière fonction sont un peu floues pour moi mais c'est pas tres grave. (je comprends pas pourquoi on ferme pour rouvrir - surement pour que tu puisses tester)

    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
    'Constantes et paramètres globaux
    Const nOmform As String = "Positionnement_Massique_Avion"
    Const GraphName As String = "C:\Logo.jpg"
     
    Public Sub btn_editer_graphe_Click()
    On Error GoTo Err_btn_editer_graphe_Click
     
    Dim RepertoireJPG As String
     
     
    If Msgbox("Souhaitez vous exporter le graphe au format JPEG ?", vbYesNo, "Export JPEG") = vbYes Then
     
        Export_JPG nOmform, CurrentDir 'si on ne veux aucun espace à gauche et a droite du nomForm utiliser Trim
        Msgbox ("Export JPG Terminée")
     
    End If
     
    Err_btn_editer_graphe_Click:
        Msgbox Err.Description
    End Sub
     
    Public Sub Export_JPG(Nomfor As String, RepertoireJPG)
     
         ', NomGraphOLE, Nomgraph As String
        Dim oleGrf As Object
        Dim sql As String
     
        sql = Forms.Positionnement_Massique_Avion.Positionnement_Massique_Avion_graphe.RowSource
     
        Apercu_Etat_btn_Click 'procédure de génération de l'état utilisée à pls autres moments
     
    'LE CODE A L'INTERIEUR DES ------- DEVRAIT VOUS SUFFIRE, SINON LISEZ TOUT
    'Pour résumer mon cas, j'ai un message d'erreur quand je ne filtre pas la liste d'items, ou alors ça marche nickel quand je filtre et je sélectionne des items dans ma liste filtré
     
    '-------------------------------------------------------------------
    ' Dans mon cas j'ai un filtre de sélection d'item avant la génération de mon form, si on sélectionne une fonction précise, une liste d'items précise sort en conséquent
    ' Mon controle incrémentant le filtre est comme ceci : controle.value={'Filtrer";fonction1;fonction2...fonctionN) aynt pour source Table.Fonction {fonction1;fonction2...fonctionN).
    ' Filtrer est le masque de saisie.
    ' Lorsque je sélectionne dans une liste d'items pas filtrée (donc en laissant le masque de saisie Filtrer), mes requêtes n'ajoutent pas la condition where "Fonction="Forms!Fonction..."
    ' ce qui est mon souhait, mon form et etat de comparaison se génerebt bien, mais lors de l'export graphique, j'obtiens le message d'erreur,
    ' il doit y avoir un pb avec pas mal de VBA en rapport avec le filtre.
     
    ' A AJOUTER SI VOUS AVEZ UN FILTRE GENERAL (ex:fonction d'un avion) SUR VOTRE ETAT/FORM PRINCIPAL, généré après sélection avions dans le form de selection d'avion filtré ou non;
    ' LE MEME FILTRE DANS LE WHERE DE VOTRE REQUETE SOURCE DE VOTRE TABLEAU DE DONNEES MIS EN SS_ETAT/SS_FORM INDEPENDANT ;
    ' ET AUSSI LE MEME FILTRE DANS LE WHERE DE VOTRE REQUETE SOURCE DE VOTRE GRAPHIQUE QUI EST UN OBJET DE VOTRE ETAT/FORM PRINCIPAL
    ' DONC DEPENDANT DE VOTRE ETAT/FORM PRINCIPAL ET DE SON FILTRE PAR CONSEQUENT
     
    'En espérant que ça soit compréhensible si vous tombez sur le meme probleme...
     
        'ces 3 lignes suivantes sont donc toutes INDISPENSABLES (encore plus la 3e), tout ça évite d'avoir une absence de curseur sur le graphique à la fin,
        'sinon il n'est plus reconnu d'où message d'erreur probleme OLE graphique
        'Donc en fait réactualise deux fois la requête du graphique de l'état par la requête du form, qui lui ne "bouge pas" pendant la sub
        DoCmd.OpenReport Nomfor, acDesign
        Reports(Nomfor).Positionnement_Massique_Avion_graphe.RowSource = sql
        DoCmd.OpenReport Nomfor, acPreview
    '--------------------------------------------------------------------
     
        Set oleGrf = Reports(Nomfor).Positionnement_Massique_Avion_graphe 'Forms avant
        oleGrf.Export filename:=GraphName
        Set oleGrf = Nothing
     
        DoCmd.OpenReport Nomfor, acDesign
        Reports(Nomfor).Positionnement_Massique_Avion_graphe.RowSource = sql
        DoCmd.Close , , acSaveNo 'ferme état sans save, et retour au form tjs ouvert
     
    End Sub

Discussions similaires

  1. problème d'accès aux données sur serveur par poste client
    Par rahan_dave dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2006, 09h13
  2. Réponses: 16
    Dernier message: 07/02/2006, 14h19
  3. [Applet] problèmes d'accès aux images
    Par wwave dans le forum Interfaces Graphiques en Java
    Réponses: 18
    Dernier message: 16/09/2005, 14h42
  4. Réponses: 2
    Dernier message: 14/06/2005, 14h00
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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