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 :

Référence d'objet - instance d'objet [Débutant]


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut Référence d'objet - instance d'objet
    Bonjour,
    sur notre appli encore en développement, nous rencontrons un petit souci. Cette application charge en textbox des data issues d'une feuille excel des son lancement.
    - Nous avons 2 versions compilées et installées sur 2 stations. Ces stations sont matériellement parlant identiques.

    - Sur une des stations au bout d'un certain temps, au chargement des data, j'ai une exception de type " La référence d'objet n'est pas définie à une instance d'un objet". J'ai pensé a un souci au niveau de ma bdd access.

    Sur l'autre station
    - j'ai la version installée et la version de développement
    Je ne reproduis pas l'exception même avec la même séquence de chargement des data.
    Si je lance la version de développement depuis VS, idem, je ne reproduis pas l'exception.

    De quoi cela peut il venir d'après vous

    Ps : les deux stations utilisent le même .accdb situé sur un disque réseau. Elles sont bien mappées sur ce disque.

  2. #2
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    La référence de quel objet n'est pas retrouvé ? Le fichier excel ?
    Si c'est le cas, il faut voir comment tu as défini le chemin d'accès à celui-ci, de plus, il m'est déjà arrivé d'avoir ce genre d'erreur si le fichier excel est juste déjà ouvert.

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    ben c mon problème, vu que je ne reproduis pas la panne, je ne sais pas.
    Ce que je sais par contre c'est que ça se passe au chargement de la feuille excel vers les textbox de l'appli.

  4. #4
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    C'est là qu'intervient ton meilleur ami la Msgbox
    Place en une avant et juste après l'ouverture du fichier excel en question et on verra.
    En parallèle, indique nous le chemin que tu as donné à ton programme pour récupérer ce fichier.

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    je vais tester ça effectivement. Ce qui me parait bizarre, c'est que ca se passe après quelques séquences, et pas d'entrée de jeu
    la séquence :
    -Je download le fichier excel sur un srv distant et le colle dans un rep du HDD
    réseau
    - Je choisis le fichier excel a traiter
    - J'ouvre l'excel, je charge les data et je referme l'excel
    J'ai vérifié sur la station ou je ne reproduis pas la panne, il n'y a pas d'excel
    dans les processus a ce moment.
    - Je traite les data - excel n'intervient plus
    je clique sur "nouveau traitement" qui revient à "je choisis le fichier excel a traiter" ... ainsi de suite.

    Et au bout de 2 ou 3 séquences, j'ai le message d'exception

    voila la routine de chargement :
    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
    With BoiteDialogue
                ' Initialisation de la boite de dialogue
                .Title = "Load Data"
                .InitialDirectory = "\\nas\Calculateur\data\encours\standard\" ' répertoire de l'application
                .Filter = "Fichiers Excel |*.xls; *.xlsx"
     
                ' vérification de la séléction
                If .ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                    CheminFichier = .FileName
                Else
                    MessageBox.Show("Aucun fichier Excel séléctionné")
                    Exit Sub ' Abandon de la routine
                End If
                'ouvre l'onglet 1 de l'application
                AppExcel = New OXL.Application
                xlWorkbook = AppExcel.Workbooks.Open(CheminFichier)
                xlWorkSheetOne = CType(xlWorkbook.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet)
                AppExcel.Visible = False
     
                'chargement des data en Textbox 
                Dim rng As OXL.Range = Nothing
        rng = CType(Me.xlWorkSheetOne.Cells(8, 4), Microsoft.Office.Interop.Excel.Range)
                Me.tbDestinaraire.Text = CType(rng.Value, String)
    etc ...
     CloseAppExcel()
                System.Threading.Thread.Sleep(2000)

  6. #6
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Faut repérer la ligne à laquelle l'erreur apparaît, en effet, je ne trouve pas de problème dans le code qui tu montre (avec mon expérience du moins).
    Le problème apparaît après plusieurs séquences mais sans fermer le programme ou en fermant le programme entre chaque ?

    Par contre, appexcel, le mieux c'est de l'ouvrir une seule fois et de le fermer qu'à la fermeture du programme, mais je ne sais pas si ça peut jouer.

  7. #7
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    je verifie qd meme une chose
    vu que l'utilisateur de la station qui a l'exception n'est pas moi, je me demande si des fois il matte pas un autre tableau excel ou un truc comme ca pendant qu'il utilise le logiciel.
    Y aurait il moyen de fermer tout excel existant à l'ouverture du logiciel ?

  8. #8
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    C'est pas très user friendly ^^' Mais on peut faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function FileInUse(ByVal MonFichier As String) As Boolean
            If File.Exists(MonFichier) Then
                Try
                    Dim F As Integer = FreeFile()
                    FileOpen(F, MonFichier, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
                    FileClose(F)
                Catch
                    Return True
                End Try
            End If
        End Function
    C'est une fonction qui vérifie si un fichier donné est en cours d'utilisation.

  9. #9
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    mais ca va m'enlever tout fichier en cours ou ouvert cette fonction même si c pas de l'excel non ?

  10. #10
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Nop cette fonction permet uniquement de savoir si un fichier dont on lui donne le nom(l'adressage complet hein) est ouvert ou pas. Après a toi de l'utiliser pour soit fermer le fichier soit indiquer a l'utilisateur qu'il est ouvert et que dans cette optique, ton programme pourrait avoir des irrégularités.

  11. #11
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    dac j'ai compris, mais je crois pas que ca va coller car je ne peux pas lui indiquer le nom d'un fichier excel ouvert en parallèle du logiciel puisque je ne sais pas ce qu'il fabrique. Du coup il faudrait que je puisse "killer" tous les proccess excel au demarrage du soft. Je fais également des recherches de mon coté

    ou alors la même chose mais que par msgbox, il propose de fermer tous les excel qu'il detecte quand il demarre peut être ?

  12. #12
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Pour tout killer en mode nucléarisation il y a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each p As Process In Process.GetProcesses
        ListBox1.Items.Add(p.ProcessName.ToString)
        If p.ProcessName = "processusakiller" Then
            p.Kill()
        End If
    Next
    Mais là tu dois tout de même demander à l'utilisateur si il est d'accord, manquerais plus qu'il perde un travail en cours ^^'

    Après tu peux aussi juste demander à l'utilisateur de ne pas avoir Excel d'ouvert.

  13. #13
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    Citation Envoyé par Uranne-jimmy Voir le message
    Pour tout killer en mode nucléarisation il y a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each p As Process In Process.GetProcesses
        ListBox1.Items.Add(p.ProcessName.ToString)
        If p.ProcessName = "processusakiller" Then
            p.Kill()
        End If
    Next
    Mais là tu dois tout de même demander à l'utilisateur si il est d'accord, manquerais plus qu'il perde un travail en cours ^^'

    Après tu peux aussi juste demander à l'utilisateur de ne pas avoir Excel d'ouvert.
    Lol c pas mal le mode bourrin aussi
    donc je mets excel.exe dans la case adéquate et ça va tout killer.
    Non mais c lui qui m'a demandé de faire comme ça, pas de souci.
    Merci beaucoup


    Dailleurs je confirme, c'etait bien des feuilles excel ouvertes en vrac qui causaient l'exception.

    Peut etre que je pourrais aussi remplacer le p.Kill() par un msgbox disant "attention des fichiers excel sont ouvert, voulez vous les fermer ?"
    si oui p.kill() si non fermeture de l'application. Ce serait p'tet moins boeuf quand même

  14. #14
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    par contre que représente ta listbox1 ????

    moi j'ai fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub killexcel()
            For Each p As Process In Process.GetProcesses
                ListBox1.Items.Add(p.ProcessName.ToString)
                If p.ProcessName = "EXCEL.EXE" Then
                    messageaff = "Une feuille Excel annexe est ouverte sur votre station. Enregistrez votre travail et cliquer sur yes pour fermer la feuille"
                    infoaff = "Another instance of Excel is running"
                    If MessageBox.Show(messageaff, infoaff, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
                        p.Kill()
                    End If
                End If
            Next
        End Sub
    et je lance cette sub au formload mais ça me détecte que dalle

  15. #15
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour Attila54,

    Attention si il existe + de 1 processus Excel en cours d'exécution tu risques d'afficher autant de boites de dialogue qu'il y a de processus donc il faut penser à sortir de ta boucle pour prompter l'utilisateur de fermer ses programmes Excel !

    C'est certains il faudra faire 2 boucles mais tu pourrais envisager de retourer depuis une fonction le nombre de processus Excel encore en cours d'exécution.
    Ex: il y a 2 instances d'Excel en cours d'exécution ! Veuillez sauver et fermer vos travaux.

    PS : à moins que ce soit ton résultat recherché auquel cas : autant pour moi.

    Voilà qui pourra peut-être t'aider : http://pastebin.com/u/3DotDev

    A+

  16. #16
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    arf oui tu as raison, et effectivement il vaudrait mieux procéder par renvoi du nombres d'instances ouvertes mais la, je pédale carrément ...

  17. #17
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    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
     
        Public Function GetProcessCount(ByVal ProcName As String) As Integer
            Return Process.GetProcessesByName(ProcName).Length
        End Function
     
      Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As IntPtr, ByVal uExitCode As UInteger) As Integer
     
        Public Function ForcedKillProcess(ProcName As String) As Boolean
            Try
                For Each ObjPro As Process In Process.GetProcessesByName(ProcName)
                    TerminateProcess(ObjPro.Handle, 1)
                    Do Until ObjPro.HasExited = True
                        Application.DoEvents()
                    Loop
                Next
                Return True
            Catch ex As Exception
                Return False
            End Try
        End Function

    A placer au lancement de ton programme d'entreprise (Sub Main ou Form Load) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
            Dim iNum As Integer = GetProcessCount("EXCEL")
            If iNum > 0 Then
                If MessageBox.Show("Il existe " &  iNum.ToString & " instances du programme EXCEL en cours d'exécution. Veuillez sauvegarder vos travaux avant toute chose ou alors voulez voulez-vous forcer leur fermeture (vous perdrez le travail nous sauvegardé !!) ?", "Attention", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = MsgBoxResult.Yes Then
                    If ForcedKillProcess("EXCEL") Then
                        MessageBox.Show("Toute les instances du programme EXCEL ont été fermées correctement.", "Information", MessageBoxButtons.Ok, MessageBoxIcon.Information)
                    Else
                        MessageBox.Show("Un problème est survenu lors de la tentative de fermeture d'EXCEL !. Vous devrez certainement fermer manuellement celles-ci depuis le gestionnaire des taches puis relancer le programme.", "Echec", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    End If
                End If
            End If
    PS : le nom du processus c'est : EXCEL et pas EXCEL.EXE

    A+

  18. #18
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    purement génial
    tout fonctionne a merveille (j'ai remplacé MsgBoxResult.Yes par DialogResult.Yes) et tout est clean
    gros merci a vous 2 pour l'aide

  19. #19
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Bonjour Wallace

    en net

  20. #20
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par shayw Voir le message
    Bonjour Wallace

    en net
    Bonsoir Shayw,

    c'est du PInvoke donc en partie du DotNet car l'appel de la méthode est implémenté en DotNet mais le pointeur se situe bien au niveau du système.

    De plus dans les 3 fonctions API il n'y en a aucune qui propose l'énumération des process en cours d'exécution. L'API "OpenProcess" ne sert à rien pour illustrer une solution fonctionnelle au problème évoqué.

    Cordialement.

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

Discussions similaires

  1. reference d' objet instance d' objet
    Par debloc dans le forum C#
    Réponses: 3
    Dernier message: 12/05/2013, 15h34
  2. La référence d'objet n'est pas définie à une instance d'objet
    Par Delphi-ne dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/07/2009, 14h22
  3. Réponses: 16
    Dernier message: 30/10/2008, 18h33
  4. Réponses: 2
    Dernier message: 30/10/2008, 10h38
  5. Réponses: 20
    Dernier message: 13/08/2007, 16h11

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