Problème import donnée Excel dans Textbox

Résolu
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022 - Modifié le 1 mars 2022 à 14:51
 Jerlo11 - 14 févr. 2022 à 08:55
Bonjour,
J'ai créé une petite appli qui récupère des cellules Excel pour les importés dans des Textbox pour l'utilisateur, cela fonctionne très bien sur mon PC ou j'ai développé le programme mais sur d'autre PC l'import ne marche pas. (même version Office installé, même Framework entre les 2 machines etc...
Dans mon projet j'ai ajouté la référence -> COM -> Microsoft excel 16 object library

En lancant mon projet .sln sur le PC ou cela ne fonctionne pas, à priori le problème vient de la référence manquante :
Imports Microsoft.Office.Interop
lié au fameux : microsoft excel 16 object library ??

Que faut-il faire pour que mon programme fonctionne correctement sur d'autre PC ? faut-il installé quelque choses vis à vis de cette library car je ne comprend pas
La copie local de la réf Microsoft.Office.Interop.Excel est vérouillé à False.

Est-ce qu'il me manque en dure le fichier dll : Microsoft.Office.Interop.Excel.dll à la source de mon exe ?

Toute aide sera appréciée

Mon bout de code pour l'import de data :

Imports System
Imports Microsoft.Office.Interop

Dim ExcelApp As Excel.Application = New Microsoft.Office.Interop.Excel.Application()
Dim ReteilerWorkbook As Excel.WorkbookExcelApp.Workbooks.Open(Lbl_target_excel_cartouche.Text)

'Récupe Nom Client
Txt_nom_client.Text = ReteilerWorkbook.Sheets(1).Cells(8, 4).Text
Lbl_juste_nom.Text = ReteilerWorkbook.Sheets(2).Cells(6, 4).Text

'Adresse Client
Txt_adresse_client.Text = ReteilerWorkbook.Sheets(2).Cells(7, 4).Text

'Réf dossier
Txt_ref_dossier.Text = ReteilerWorkbook.Sheets(2).Cells(5, 4).Text

' etc........

5 réponses

Whismeril Messages postés 18281 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 mars 2023 621
13 févr. 2022 à 00:39
Bonsoir

Le problème avec l’API Excel, c’est qu’il faut exactement la même sur les PC cible.
Et malheureusement malheureusement avoir le même millésime peut ne pas être suffisant. x86 et x64 peuvent avoir une influence. Les mises à jour aussi.

Une solution est effectivement de mettre la dll avec laquelle tu compiles dans le dossier de l’exe, et bien sûr que la référence de ton projet soit cette dll et pas celle par défaut du système.

Mais, j’ai rencontré un cas (ancien je te l’accorde mais…) en écriture, où le fichier était généré, mais quand je voulais l’ouvrir sur le PC ça m’indiquait une incompatibilité de fichier alors que si je le copiais sur le PC de développement il s’ouvrait sans problème.

C’est ce jour là que j’ai définitivement abandonné l’API Microsoft.

Voir cette discussion récente pour les autres façons possibles de faire

https://codes-sources.commentcamarche.net/forum/affich-10107255-excel-depuis-un-code-c#1


Rappel VB.Net c’est du C# déguisé en VB, https://www.qwant.com/?q=c%23+to+vb&client=brz-brave&t=web
1
Whismeril Messages postés 18281 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 mars 2023 621
13 févr. 2022 à 13:23
Quand tu précises qu'il ne faut pas que se soit celle par défaut mais bien la dll on est d'accord que via "Parcourir" tu va la cibler ?
oui


Franchement je désespère avec cette API
oui aussi
1
dysorthographie Messages postés 64 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 11 mars 2023 4
Modifié le 1 mars 2022 à 14:52
Bonjour,
tu peux en créer tes propre méthode CreateObject pour avoir accès à la version installé sur la machine sans te soucier de la version!
 Imports System.Runtime.InteropServices
 Sub test()
        Dim ExcelApp As Object=CreateObject("Excel.Application")  
        Dim ReteilerWorkbook As Object=  ExcelApp.Workbooks.Open(Lbl_target_excel_cartouche.Text)  
 End Sub
 
 Public Function CreateObject(ByVal app As String) As Object
        Dim OBJType As Type = Type.GetTypeFromProgID(app)
        Dim OBJ As Object = Activator.CreateInstance(OBJType)
        Return OBJ
 End Function

 Public Function GetObject(ByVal App As String) As Object
        Return CType(Marshal.GetActiveObject(App), Object)
 End Function
1
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
13 févr. 2022 à 13:03
Alors hier soir j'ai trouvé et téléchargé une dll : Microsoft.Office.Interop.Excel.dll
J'ai supprimé la réf dans mon projet pour aller importer cette dll, je compile, je test, pas de soucis sur mon PC, donc tout comptant je démarre l'autre PC pour réaliser des tests et pareil :( même problème les imports ne passent pas le fichier dll est la version 16.0.11929.20048

Quand tu précises qu'il ne faut pas que se soit celle par défaut mais bien la dll on est d'accord que via "Parcourir" tu va la cibler ?

Franchement je désespère avec cette API
Merci pour les pistes en tout cas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Roooo la solution MAGIQUE !!
Cela fonctionne super bien !
Merci infiniment
0
Rejoignez-nous