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

Windows Forms Discussion :

[VB.NET 1.1] La référence d'objet n'est pas définie à une instance d'un objet.


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut [VB.NET 1.1] La référence d'objet n'est pas définie à une instance d'un objet.
    Bonjour tout le monde,

    J'ai créé une application VB.net qui me permet de transférer des données d'un data set vers une sheet excel.

    Le dataset est alimenté par une bd Access.

    Quand j'appuie une fois sur le bouton pour envoyer les données vers excel, tout se passe bien.

    Si j'appuie à nouveau sur ce bouton, il commence à travailler et il me donne un message d'erreur qui est :

    Une exception non gérée du type 'System.NullReferenceException' s'est produite dans WindowsApplication1.exe

    Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.
    Le code de mon bouton est le suivant :

    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
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim appexcel As Excel.Application
            Dim wbexcel As Excel.Workbook
            'Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre la table Access et la feuille de données Excel", "Attention !")
            appexcel = CreateObject("Excel.application")
            wbexcel = appexcel.Workbooks.Open("file.xls")
            'wbexcel.ReadOnly = True
            appexcel.Visible = True
            'i correspond à la première cellule où on va mettre les cotes
            Dim i As Byte
            i = "10"
            Dim j As Byte
            'j = au nombre d'enregistrement dans le dataset !
            For j = 0 To dts.Tables("BA3_S1").Rows.Count - 1
     
                'contrôle du nom de l'étudiant
                appexcel.Cells(i, " 45") = dtt.Rows(rownum).Item("Nomcomplet")
                'TH
                If appexcel.Cells(i, " 45").value = appexcel.Cells(i, " 2").value Then
                    appexcel.Cells(i, " 4") = dtt.Rows(rownum).Item("cours1")
                    'Analyse Instrumentale
                    appexcel.Cells(i, " 5") = dtt.Rows(rownum).Item("cours2")
                                    'Else
                    'MessageBox.Show(erreurnom)
                    ' End If
                    i = i + 1
                    'on va un enregistrement plus loin (rst.movenext en DAO ou ADO)
                Else
                    MessageBox.Show("Les informations entre Excel et Access sont différentes", "Attention")
                    Exit Sub
                End If
                rownum += 1
            Next j
            MessageBox.Show("Importation terminée et contrôlée", "Information")
     
     
     
            cnn = Nothing
            dts = Nothing
        End Sub
    Il se plance ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     
    For j = 0 To dts.Tables("BA3_S1").Rows.Count - 1
    Je suis obligé de caché le bouton lorsque l'utilisateur utilisera mon bouton afin de l'obliger à redémarrer l'application et ainsi ne pas cliquer une seconde fois sur le bouton pour éviter l'erreur.

    Qu'en pensez-vous ?

    Merci d'avance pour votre aide.

    beegees

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    j'en pense que je vois pas pourquoi tu met ta datatable à null dans ta fonction.

    C'est normal que ça plante si tu utilises un objet qui n'existe plus ...
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut,

    Merci pour ta réponse.

    C'est ces lignes qui posent problème alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    cnn = Nothing
    dts = Nothing
    Il faudra alors que je mette ces lignes sur le bouton qui permet de quitter l'application, qu'en penses-tu ?

    Merci encore pour ton aide.

    bgs

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par beegees
    Il faudra alors que je mette ces lignes sur le bouton qui permet de quitter l'application, qu'en penses-tu ?

    Merci encore pour ton aide.

    bgs
    Pas forcément, tu n'as rien de spéciale à faire, les ressources seront nettoyé à la fermeture de l'application.
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci pour ta réponse.

    Je m'inquiète quand même car quand je vais voir dans le gestionnaire des tâches, je vois qu'Excel apparaît 18 fois... voir image :



    ça bouffe pas mal de ressource mais comment supprimer les instances d'excel ?

    Le programme n'arrête donc pas EXCEL dans le gestionnaire des tâches.

    Si il faut, je créerai un nouveau post.

    Merci d'avance pour l'aide.
    bgs

  6. #6
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Je viens de trouver sur la FAQ du forum quelques informations concernant l'arrêt d'un processus :

    Pour arrêter un processus, il faut disposer d'un objet System.Diagnostics.Process qui représente le processus.
    'Pour les applications consoles
    proc.Kill()
    proc.Close() 'Libération des ressources

    Pour les applications WinForm il est préférable d'utiliser CloseMainWindow afin que l'application reçoive le message de fermeture et se ferme correctement.
    'Pour les applications avec une interface graphique (et donc une pompe de messages)
    proc.CloseMainWindow() 'Si l'appel échoue, on peut alors forcer la fermeture avec Kill.
    proc.Close() 'Libération des ressources
    Maintenant je vais devoir adapter cela à mon cas (arrêt du processus de Excel).

    beegees

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut.

    fait une recherche sur le forum, ce problème a été traité .

    En fait il ne faut pas détruire les tables mais l'instance d'Excel .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    appexcel.Dispose()
    il me semble.
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  8. #8
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut,

    Merci pour ta réponse.

    Quand je met J'obtiens ce message d'erreur :

    Une exception non gérée du type 'System.MissingMemberException' s'est produite dans microsoft.visualbasic.dll

    Informations supplémentaires : Le membre public 'dispose' du type 'Application' est introuvable.
    beegees

  9. #9
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par dev01
    il me semble.
    j'étais pas sur ..., Fait une recherche sur le forum tu auras ta réponse.
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/11/2013, 10h24
  2. Réponses: 2
    Dernier message: 01/08/2013, 15h40
  3. Réponses: 21
    Dernier message: 30/12/2010, 13h33
  4. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  5. Réponses: 24
    Dernier message: 01/06/2007, 09h26

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