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

VB.NET Discussion :

La référence d'objet n'est pas définie à une instance d'un objet [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut La référence d'objet n'est pas définie à une instance d'un objet
    Bonjour Forum
    Le titre de cette nouvelle discussion a été déjà évoqué dans plusieurs forums mais je n'ai pas trouvé une liaison en rapport avec mon problème.
    Le premier code ci-dessous fonctionnait correctement et ça fonctionne toujours dans la première application déployée.
    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
      L_Message.Text = "Extraction des données en cours..."
            Dim DocW As New Word.Application
            DocW = CreateObject("Word.Application")
            DocW.Documents.Open(DestinationFichier)
            L_Message.Text = "Début de traitement des données en cours..."
     
            'information sur l'iepp
            With DocW.Selection.Find 'civilité iepp
                .ClearFormatting()
                .Text = "civiliteiepp"
                .Replacement.ClearFormatting()
                .Replacement.Text = Strings.StrConv(CivilitéIEPP, VbStrConv.ProperCase)
                .Execute(Replace:=Word.WdReplace.wdReplaceAll, Forward:=True, Wrap:=Word.WdFindWrap.wdFindContinue)
            End With
            L_Message.Text = "Champ Civilité modifié avec succès..."
    ,
    Un matin j'ai décidé de nettoyer le code, et c'est là que je reçois le message de la référence...

    J'ai décidé donc de modifier la ligne en instanciant un objet sur la classe Word.Document (Code Ci-dessous)
    ça marchait également et j'ai pu imprimer quelques feuilles. Aujourd'hui, je décide de continuer le nettoyage et ERREUR, le même message de référence
    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
            L_Message.Text = "Extraction des données en cours..."
            Dim DocW As New Word.Application
            Dim WordDoc As New Word.Document
            WordDoc = DocW.Documents.Open(DestinationFichier)
            L_Message.Text = "Début de traitement des données en cours..."
     
            'information sur l'iepp
            With WordDoc.Content.Find 'civilité iepp
                .ClearFormatting()
                .Text = "civiliteiepp"
                .Replacement.ClearFormatting()
                .Replacement.Text = Strings.StrConv(CivilitéIEPP, VbStrConv.ProperCase)
                .Execute(Replace:=Word.WdReplace.wdReplaceAll, Forward:=True, Wrap:=Word.WdFindWrap.wdFindContinue)
            End With
            L_Message.Text = "Champ Civilité modifié avec succès..."
    D'après mes recherches, lorsqu'un objet est déclaré et vide, cela génère le message. Mais, dans mon cas, je doute que mes objets soient Nothing.

    Merci de m'aider

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    qu'est-ce que tu as fait comme nettoyage ?
    si tu as le même message sur un autre passage de code, alors il faut appliquer la même solution. Si c'est sur le même, vérifie que tu n'as pas annulé le 1er nettoyage (en remettant le code d'origine par exemple)

  3. #3
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Le premier code est un extrait du projet sur lequel je travaille. Et c'est ce code qui est dans la première application. Mais ça ne s'exécute plus.
    Le message pointe la ligne du code suivant:
    le premier code, c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With DocW.Selection.Find
    qui est pointée.

    Dans le deuxième code, c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     With WordDoc.Content.Find
    qui est pointée.

  4. #4
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Bonjour et grand merci à tous.
    Dans mes recherches sur les objets, j'ai appris les deux méthodes liées à un objet : la liaison anticipée et la liaison tardive.
    Dans mon cas, la liaison anticipée générait une erreur comme mentionné dans le titre avec l'activation de la bibliothèque Word.
    J'ai donc choisi de passer par la liaison tardive en déclarant la variable comme Object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim DocW as Object
    DocW= CreateObject("Word.Application")
    et non en l'instanciant Dim DocW as New Word.Application.

    Le problème est donc résolu.
    Mais j'aimerais qu'on m'explique le pourquoi de cette erreur parce que l'instanciation de ma variable est tout à fait correct dans le premier code ainsi que le second.
    Même en VBA, quand j'ai utilisé la classe Word.Application, la même erreur est survenue après plusieurs tests de l'application. Il a fallu que je passe par la liaison tardive pour que ça marche.

    Merci

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Et bien justement, l'instanciation de ta variable est syntaxiquement incorrect.

    Ici, tout fonctionne car tu déclares bien le type derrière As.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim DocW as Object
    DocW= CreateObject("Word.Application")
    Ici, tu as omis le type derrière As.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim DocW as New Word.Application
    La bonne syntaxe pour l'instanciation de ta variable (il y a un type derrière as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim DocW as Object = New Word.Application
    ou encore (pas de as)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim DocW = New Word.Application

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

Discussions similaires

  1. Chercher un enregistrement qui N'EST PAS dans une table
    Par ZeBandit dans le forum Requêtes
    Réponses: 13
    Dernier message: 05/05/2015, 11h02
  2. elements qui n'est pas dans une liste
    Par KEnder dans le forum Général Python
    Réponses: 2
    Dernier message: 16/05/2008, 01h52
  3. selectionner un resultat qui n'est pas dans une autre requete
    Par yosraisi dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/05/2008, 13h17
  4. Réponses: 6
    Dernier message: 09/01/2008, 11h56
  5. Réponses: 2
    Dernier message: 11/11/2007, 16h49

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