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 :

problème d'assembly [vb.net 2005]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut problème d'assembly [vb.net 2005]
    bonjours,

    Alors après avoir déployer mon application et mis en production, j'ai fait une série de test sur l'ordinateur de mon client et le programme plante au moment ou je veux parcourir l'ordinateur avec une openFileDialog j ai alors comme erreur (je vais essayer d'être clair) :
    "Une exception non gérée s'est produite dans votre application si vous cliquez sur continuer[...]. Impossible de charger le fichier ou l'assembly Microsoft.Office.Interrop.Word, Version=12.0.0.0, Culture=neutral, PublicKey=Token=71e9bce111e9439c' ou une de ses dépendances. Le fichier specifié est introuvable.
    Je tien à signaler que je développe sous Seven et que l'application va tourner sur un XP.

    Je vous met la routine qui fait cela :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    Public Sub convertirEnImage(ByVal idPage As String, ByVal sequence As Integer, ByVal typeTexte As String)
     
            Dim choisirFichier As New OpenFileDialog
            Dim cheminFichier As String = String.Empty
            Dim fichier As String = String.Empty
            Dim tmp As String()
     
            With choisirFichier
                .InitialDirectory = "c:\"
                .Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
                .FilterIndex = 2
                .RestoreDirectory = True
                .ShowDialog()
            End With
     
            cheminFichier = choisirFichier.FileName
            fichier = choisirFichier.SafeFileName
            tmp = choisirFichier.SafeFileName.Split("."c)
            choisirFichier.Dispose()
     
            If tmp(0) <> "" Then
     
                Dim objWord As New Microsoft.Office.Interop.Word.Application
                Dim objDoc As Microsoft.Office.Interop.Word.Document
                'Dim print As Printer
     
                objWord = CreateObject("Word.Application")
                'le document word est visible
                objWord.Visible = True
                objDoc = objWord.Documents.Open(cheminFichier)
                'affiche tout le document sur une page
                objDoc.ActiveWindow.ActivePane.View.Zoom.PageFit = Microsoft.Office.Interop.Word.WdPageFit.wdPageFitFullPage
                'objDoc.PageSetup.PageWidth + 356
     
                Dim b As Bitmap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Imaging.PixelFormat.Format32bppArgb)
     
     
     
                ' créer un objet graphique qui prendra le screenshot
                Dim gfx As Graphics = Graphics.FromImage(b)
     
     
                'copie du contenu de l'ecran 
                'Screen.PrimaryScreen.Bounds.Size
     
                gfx.CopyFromScreen(My.Computer.Screen.Bounds.X, My.Computer.Screen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
     
                tmp(0) = tmp(0) & ".jpg"
     
                'verifie l'existence du repertoire
                If Dir("C:\image", vbDirectory) = "" Then
                    'si le repertoire n existe pas on le créer
                    MkDir("C:\image")
                End If
     
                If My.Computer.Screen.Bounds.Width = 1440 Then
                    ' Rectangle -> x,y points et largeur et hauteur
                    Dim rectangle As New Rectangle(477, 155, 474, 667)
                    b = b.Clone(rectangle, b.PixelFormat)
                ElseIf My.Computer.Screen.Bounds.Width = 1280 And My.Computer.Screen.Bounds.Height = 1024 Then
                    Dim rectangle As New Rectangle(430, 156, 472, 671)
                    b = b.Clone(rectangle, b.PixelFormat)
     
                ElseIf My.Computer.Screen.Bounds.Width = 1280 And My.Computer.Screen.Bounds.Height = 960 Then
                    Dim rectangle As New Rectangle(380, 156, 472, 671)
                    b = b.Clone(rectangle, b.PixelFormat)
     
                ElseIf My.Computer.Screen.Bounds.Width = 1280 And My.Computer.Screen.Bounds.Height = 768 Then
                    Dim rectangle As New Rectangle(441, 153, 382, 539)
                    b = b.Clone(rectangle, b.PixelFormat)
     
                ElseIf My.Computer.Screen.Bounds.Width = 1280 And My.Computer.Screen.Bounds.Height = 720 Then
                    Dim rectangle As New Rectangle(441, 153, 382, 539)
                    b = b.Clone(rectangle, b.PixelFormat)
     
                ElseIf My.Computer.Screen.Bounds.Width = 1280 And My.Computer.Screen.Bounds.Height = 600 Then
                    Dim rectangle As New Rectangle(500, 150, 267, 376)
                    b = b.Clone(rectangle, b.PixelFormat)
     
                ElseIf My.Computer.Screen.Bounds.Width = 1152 And My.Computer.Screen.Bounds.Height = 864 Then
                    Dim rectangle As New Rectangle(345, 145, 447, 632)
                    b = b.Clone(rectangle, b.PixelFormat)
     
                ElseIf My.Computer.Screen.Bounds.Width = 1024 And My.Computer.Screen.Bounds.Height = 768 Then
                    Dim rectangle As New Rectangle(314, 153, 382, 539)
                    b = b.Clone(rectangle, b.PixelFormat)
     
                ElseIf My.Computer.Screen.Bounds.Width = 800 And My.Computer.Screen.Bounds.Height = 600 Then
                    Dim rectangle As New Rectangle(260, 151, 267, 376)
                    b = b.Clone(rectangle, b.PixelFormat)
     
                End If
     
     
     
                ' sauvegarde le resultat a l'endroit demandé sous ke format demandé
                b.Save("C:\image\" & tmp(0), Imaging.ImageFormat.Jpeg)
     
                objWord.Documents.Close()
                objWord.Quit()
     
                cheminFichier = "C:\image\" & tmp(0)
     
                methode_base_de_donee.ajouterFichier(cheminFichier, "img/" & tmp(0))
     
                methode_base_de_donee.AjouterEnregistrement(idPage, sequence, typeTexte, , tmp(0), , , )
     
                MessageBox.Show("Ajout correctement effectué", "Succés", MessageBoxButtons.OK, MessageBoxIcon.Information)
     
                'parcourt de tout les processus ouvert sur la machine
                For Each Processus As Process In Process.GetProcesses()
                    'si le processus WINWORD est actif
                    If Processus.ProcessName.EndsWith("WINWORD") Then
                        With Processus
                            'on kill le process
                            .Kill()
                            'libère les ressources
                            .Close()
                        End With
                    End If
                Next
            Else
                MessageBox.Show("Annulé")
            End If
     
     
        End Sub
    En espèrent que vous puissiez m'aider sur ce problème, bien à vous.

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    Le problème vient plutôt à priori d'Office

    Tu fait référence dans ton programme à une librairie qui appartient à Microsoft Office 2007. Probablement que sur tes postes clients ce n'est pas cette version qui est installée.

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    oui c est probable, mais alors tu me conseillerai de remplacer ceci :

    Dim objWord As New Microsoft.Office.Interop.Word.Application
    Dim objDoc As Microsoft.Office.Interop.Word.Document
    par quelle libraire afin d 'être certain que cela fonctionne sous n'importe quelle version de word ?

    EDIT : ceci fairais - t- il l affaire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim word As Word.ApplicationClass = New ApplicationClass
    word.Visible = True
                    Dim bVisible As Object = True
                    Dim doc As Word.Document = word.Documents.Open(fichier, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, bVisible, missing, missing, missing, missing)
                    doc.Activate()

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    Il y a une technique qui m'a été donné une fois, c'est d'utiliser la référence pour faire tout le code et la mise au point du programme. Une fois que le programme est terminé, il faut remplacer les déclarations d'objets du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim objWord As New Microsoft.Office.Interop.Word.Application
    Dim objDoc As Microsoft.Office.Interop.Word.Document
    par des déclarations génériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim objWord As Object
    Dim objDoc As Object
    La création des intances doit passer par Automation en utilisant CreateObject("Word.Application"), mais ça, tu le fais déjà.
    Ensuite il faut remplacer tout ce qui fait référence à ta référence par du code indépendant de la référence. Par exemple tu utilise l'énumération Microsoft.Office.Interop.Word.WdPageFit.wdPageFitFullPage, tu devra la remplacée directement par sa valeur numérique.

    Une fois que tu n'as plus aucune référence Microsoft.Office.Interop.xxxxxx (et que ton code marche évidemment), tu supprime la référence de ton projet.


    JE te conseille de tenter sur une copie de ton projet. Personnellement, je n'ai pas toujours réussi à faire marcher cette technique dans tous les cas.

  5. #5
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    ok, merci je vais m'orienter vers la solution que tu viens d'énoncer, merci je te tien au courant

    EDIT :

    pour info ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Microsoft.Office.Interop.Word.WdPageFit.wdPageFitFullPage
    a été "prit" grace a une macro que j ai faite sous word vba ^^
    je ne sais pas si c est correct mais je m'y suis prit de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    imports microsoft.office.interrop
     
    ...
     
     'affiche tout le document sur une page
                    Dim pagePlein As Word.WdPageFit = Word.WdPageFit.wdPageFitFullPage
                    objDoc.ActiveWindow.ActivePane.View.Zoom.PageFit = pagePlein

  6. #6
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    Bonjours,

    après une petite semaine de réflexion je ne vois pas d'autres moyen que cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objDoc.ActiveWindow.ActivePane.View.Zoom.PageFit = pagePlein
    Maintenant j ai pensé à l'ouverture du fichier concerné s'il était possible d'écrire dans word une macro qui ferait sa sous VBA word, seulement je ne voit pas comment m'y prendre.
    Quelqu'un pourrait-il m'expliquer svp ?

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

Discussions similaires

  1. [Vb.net 2005][ADO.net]Problème Update sur un champs calculé
    Par nirinasolomalala dans le forum Accès aux données
    Réponses: 2
    Dernier message: 13/03/2007, 09h14
  2. [VB .Net 2005][Dataset] Problème d'imbrication de données
    Par 6psyk9 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/01/2007, 14h24
  3. [vb.net 2005] Problème de lecture d'un fichier (en ressources)
    Par micfont999 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 10/01/2007, 21h29
  4. [VB.Net 2005] - Problème Paint UserControl
    Par Flibustier dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/10/2006, 11h47
  5. [VB.NET 2005]Problème de déclenchement d'évènements
    Par LTourist dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/07/2006, 16h39

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