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 :

Pb BackgroundWorker appel fonction


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut Pb BackgroundWorker appel fonction
    Voila mon problème, je dois récupérer des données sur un Bus Can puis les enregistrer dans un fichier Excel. Pour faire ceci j'utilise donc un BGW. Le problème est que lorsque j'appel une fonction ds BGW_DoWork et que cette fonction fait appel elle même a une autre fonction ça plante et j'ai un message d'erreur qui me dit que "Variable objet ou variable d'un bloc With non définie". J'ai tester en appelant des fonctions les plus basics possible donc sans bloc with ou variable objet et ca me retourne tjrs ce message d'erreur.

    Si quelqu'un a une solution!!!!

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    on est pas devins... si tu montres pas ton code on pourra pas t'aider

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut
    En fait j'utilise 2 BWG un qui récupère les données sur le Bus Can qui marche très bien. Et le 2ème lui gère l'enregistrement ds Excel voici le code du 2ème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub BackgroundWorker2_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
            Dim MyThread As BackgroundWorker = CType(sender, BackgroundWorker)
     
            While Not MyThread.CancellationPending 'Tant qu'il n'y a pas de demande d'arret de la tache de fond
     
                If Me.LblVal1.Text <> msg(0) Then
                    Ajouter_Enregistrement()
                End If
     
            End While
        End Sub
    Donc lui aussi marche ms c'est dans la fonction Ajouter_Enregistrement()
    que ca plante au momment de la fonction encadre() qui gère la mise en forme des cellules. Sachant que cette fonction est appelée a différents endroits du prog et ça ne pause pas de pb.

    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
        Public Sub Ajouter_Enregistrement()
     
            Dim oXL As Object
            Dim oSheet As Object
            Dim S1 As String
     
     
            Try
                oXL = CreateObject("Excel.Application")
                S1 = "FileName:='" & chemin & "'"
                oXL.Workbooks.Open(filename:=chemin)
                oSheet = oXL.ActiveSheet
     
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
     
            Try
     
                oXL.Cells("65536", "A").End(Excel.XlDirection.xlUp).Offset(1, 0).Select() 'Trouver dernier enregistrement
                oXL.Selection = Date.Now.Day.ToString & "/" & Date.Now.Month.ToString & _
                                "/" & Date.Now.Year.ToString & " " & Date.Now.Hour.ToString & _
                                ":" & Date.Now.Minute.ToString & ":" & Date.Now.Second.ToString
                oXL.Selection.Columns.AutoFit()
     
                oXL.Cells("65536", "B").End(Excel.XlDirection.xlUp).Offset(1, 0).Select()
                oXL.Selection = msg(0) 'msg(0) étant le 1er octet de ma trame CAN
     
                Encadre() 'c'est la que ca plante !!
     
            Catch ex As Exception
                MsgBox("Erreur = " & vbCrLf & _
                       ex.ToString, MsgBoxStyle.Critical, "Erreur")
            End Try
     
            Try
                oXL.DisplayAlerts = False
                oSheet.SaveAs(chemin)
            Catch ex As Exception
                MsgBox("Erreur = " & vbCrLf & ex.ToString)
            End Try
     
            oXL.Workbooks.Close()
            oXL.Quit()
            oXL = Nothing
     
        End Sub
     
    Public Sub Encadre() ' Mise en forme des cellules 
     
            oXL.Selection.Borders(Excel.XlBordersIndex.xlDiagonalDown).LineStyle = Excel.Constants.xlNone ' et la ça plante
            oXL.Selection.Borders(Excel.XlBordersIndex.xlDiagonalUp).LineStyle = Excel.Constants.xlNone
     
            With oXL.Selection.Borders(Excel.XlBordersIndex.xlEdgeLeft)
                .LineStyle = Excel.XlLineStyle.xlContinuous
                .Weight = Excel.XlBorderWeight.xlMedium
                .ColorIndex = Excel.Constants.xlAutomatic
            End With
           oXL.Selection.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter ' Centrer les éléments dans les cellules
        End Sub

    Ps : quand j'utilse la fonction Ajouter_Enregistrement() sans appeler la fonction encadre() ca marche au poil.

    Je sais que vu comme ca pourquoi je m'enbète a appeler une autre fonction ms en fait il plus d'1 octet à enregistrer.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je vois pas exactement ce qui ne va pas, mais ça n'a pas l'air d'être lié au backgroundworker en tous cas...
    Essaie de remplacer le bloc With par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim b As Borders = oXL.Selection.Borders(Excel.XlBordersIndex.xlEdgeLeft)
    b.LineStyle = Excel.XlLineStyle.xlContinuous
    b.Weight = Excel.XlBorderWeight.xlMedium
    b.ColorIndex = Excel.Constants.xlAutomatic

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut
    C'est bon j'ai trouvé
    Effectivement ca n'été pas lié au backgroundworker. En fait j'avais déclaré les variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim oXL As Object et  Dim oSheet As Object
    dans la fonction Ajouter_Enregistrement() et dans public donc Encadre() devait utiliser les publics qui n'avais pas de valeur à ce momment.

    C'est ca de débuter on fait des boulettes et quand ca plante on sait pas pourquoi!!

    Merci quand même pour ton aide

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    y aurait des try cath dans la sub qui plante ca serait plus pratique
    et en mode debug ca donne le numéro de ligne de l'erreur
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Appel fonction php dans code javascript
    Par licorne dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/03/2008, 10h55
  2. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 12h58
  3. pro c appelle fonction connexion
    Par friends dans le forum Oracle
    Réponses: 3
    Dernier message: 10/05/2004, 17h07
  4. Appels fonctions DLL
    Par Micka91 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 17/02/2004, 17h32
  5. Appel fonction assembleur en C
    Par grandjouff dans le forum C
    Réponses: 6
    Dernier message: 07/12/2003, 20h43

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