Bonjour,
oui mais ta fenêtre excel ouverte lors de l'exécution de ton importation elle as quoi comme nom dans la barre de titre ?
Version imprimable
re,
Le code complet pourquoi faire, si ça na pas de rapport avec ton problème ?
Et pourquoi je voudrais ton code, si ce n'est que ça peut aider à trouver la partie susceptible de causer un problème.
bbill a bien fait de lever cette remarque : "FilePath est de la forme : Path\Name.tdms"
GetObject doit forcément se planter ici, en comparant l'association à la classe spécifiée.
De mon côté je viens d'essayer une portion du code après avoir installé le même complément.
Aucun problème de récupération du fichier ouvert par le Shell avec GetObject.
Ne sachant que faire de plus je te laisse le soin d'obtenir dans xlApp les composants xlApp.Application.COMAddins.Item(x), xlApp.WorkBook(x)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 'Option Shell qui lqnce une nouvelle session Excel que je n'arrive pas a recuperer. Const PathExcelTDMIMporter_exe As String = _ "C:\Program Files\National Instruments\Shared\TDM Excel Add-In\ExcelTDMImporter.exe" Dim Ret& Ret& = Shell(PathExcelTDMIMporter_exe & Space(2) & FilePath, vbNormalFocus) '3 options de GetObject qvec les erreurs que j'ai decrites precedemment. Dim xlApp As Object Set xlApp = GetObject("", "Excel.Application") xlApp.Application.Windows(1).Visible = True Stop
Bonjour Bbil et NVCfrm, tout d'abord merci de continuer à m'aider.
Bbil, concernant le nom de la fenêtre ouverte par Excel elle s'appelle Book1, puis si j'en ouvre plusieurs simultanément Book2,Book3... (J'en avais fait part lors de mon tout premier post).
J'ajoute un screenshot à la fin de ce post pour répondre à NVCfrm.
NVCfrm, j'ai fait un nouveau fichier Excel nommé test dans lequel j'ai mis uniquement ton code :
Cela m'ouvre bien le fichier TDMS dans Excel, le nom est Book1 et il est sur une deuxième session Excel... (Cf screenshot)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub test() Dim FilePath As String FilePath = "C:\Users\bzm924\Documents\post traitement\Voltage.tdms" 'Option Shell qui lqnce une nouvelle session Excel que je n'arrive pas a recuperer. Const PathExcelTDMIMporter_exe As String = _ "C:\Program Files\National Instruments\Shared\TDM Excel Add-In\ExcelTDMImporter.exe" Dim Ret& Ret& = Shell(PathExcelTDMIMporter_exe & Space(2) & FilePath, vbNormalFocus) '3 options de GetObject qvec les erreurs que j'ai decrites precedemment. Dim xlApp As Object Set xlApp = GetObject("", "Excel.Application") xlApp.Visible = True 'J'ai du changer t'as ligne "xlApp.Application.Windows(1).Visible = True" car j'ai un subscript out of range. End Sub
Pièce jointe 151878
Je ne vois pas aucun changement par rapport à ce que j'avais au début.
As-tu réussi à transférer des données d'un workbook à l'autre ?
salut,
désolé pour le retard, quelques pépins
j'avais plusieurs instructions de tests, différents, j'ai collé le mauvais.Citation:
Je ne vois pas aucun changement par rapport à ce que j'avais au début.
As-tu réussi à transférer des données d'un workbook à l'autre ?
Oui, j'ai récupérer de différentes façons les données, Et je récupère également l'objet COMMaddins dans une variable sans problème dans la nouvelle application.
Petites explications, tu avais déjà les pistes fournies par bbill, le titre qui apparaît sur la barre de fenêtre.Code:
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 Sub test() Dim FilePath As String, i As Long, L As Long, c As Long, Values FilePath = "E:\MW2000-1100-BURN_IN_12-05-02_2019.tdms" Const PathExcelTDMIMporter_exe As String = _ "C:\Program Files\National Instruments\Shared\TDM Excel Add-In \ExcelTDMImporter.exe" Dim Ret& Ret& = Shell(PathExcelTDMIMporter_exe & Space(2) & FilePath) If Ret& Then Dim xlWb As Workbook, xlSheet As Worksheet MsgBox "Veuillez patientez durant la conversion", vbInformation, "Importation" With Application .ScreenUpdating = False .Interactive = False End With 'Set xlApp = GetObject("", "Excel.Application") Set xlWb = GetObject("Classeur1") ' pour la version anglaise Book1 'xlWb.Application.Windows(1).Visible = True 'J'ai du changer t'as ligne "xlApp.Application.Windows(1).Visible = True" car j'ai un subscript out of range. 'normal j'avais posté dans la confusion du code manipulant un objet WorkBook, comme c'est le cas ici 'recupérer les valeurs dans le classeur de cette instance For Each xlSheet In xlWb.Worksheets 'ThisWorkbook.Worksheets.Add With ThisWorkbook.Worksheets.Add .Name = xlSheet.Name Values = xlSheet.Range("A1").CurrentRegion.Value 'UsedRange.Value si les données ne sont pas contigues. .Range(.Cells(1, 1), .Cells(UBound(Values, 1), UBound(Values, 2))).Value = Values End With Next 'avant de fermer pour une terminaison propre, sans enregistrement indiquer à l'application 'que le fichier est enregistré, pour ne pas avoir la boîte d'avertissement d'enregistrement xlWb.Saved = True xlWb.Application.Quit With Application .ScreenUpdating = True .Interactive = True End With MsgBox "L'importation s'est correctement déroulé !", vbExclamation, "Terminé" End If 'ou tout simplement 'xlWb.SaveAs "E:\Copie de " & filepath, 51 '51 = xlWorkbookDefault End Sub Sub comtest() Dim Tdm As COMAddIn, Td As Object, fic As String, wTdFile As Workbook, n Const PathExcelTDMIMporter_exe As String = _ "C:\Program Files\National Instruments\Shared\TDM Excel Add-In \ExcelTDMImporter.exe" Dim Ret& fic = "E:\MW2000-1100-BURN_IN_12-05-02_2019.tdms" Ret& = Shell(PathExcelTDMIMporter_exe & Space(2) & fic) If Ret& Then Set wTdFile = GetObject("Classeur1") Set Tdm = wTdFile.Application.COMAddIns.Item(2) n = Tdm.Description n = Tdm.Connect Set Td = Tdm.Object End If wTdFile.Saved = True wTdFile.Application.Quit Set wTdFile = Nothing End Sub
Bons tests !
Salut,
Pas de problème pour l'erreur de code d'hier. Ça arrive même aux meilleurs !
Avec ton code on touche quasiment au but.
Tout va bien sauf que lorsque je retire ta message box
il plante ensuite à la ligneCode:MsgBox "Veuillez patientez durant la conversion", vbInformation, "Importation"
J'ai remarqué que si je fais ''debug'', que je clic sur ce classeur1 (qui est orange clignotant dans la barre des tâches) et qu'ensuite je clic sur ''continuer'', la procédure repart sans problème.Code:Set xlWb = GetObject("Classeur1") ' pour la version anglaise Book1
Il semble donc qu'il faille lui signaler le classeur ou tout au moins attendre.
Du coup j'ai pensé à mettre une tempo
Et avec la tempo ça marche.Code:
1
2 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sleep 371'je crois que c'est le minimum qu'il accepte
C'est pas forcément très élégant mais comme je fais ça sur plusieurs dizaines de fichiers, je ne peux pas laisser ta message box.
Je ne sais pas si tu as une autre idée en tête. En tout cas merci beaucoup pour le coup de main.
Effectivement, il faut attendre que l'application soit prête.
La solution du Sleep est celle à laquelle, j'ai pensé en premier, (je me disais bien que tu trouveras une solution ;) )
Tu peux aussi mettre un AppActivate juste après le Shell pour voir ce que ça donne, Le deuxième argument de cette méthode permet si je ne me trompes à 1 d'attendre.
Sinon pas autre chose de mieux que le Sleep dans une petite boucle de test.
Ok, je regarderai si le AppData peut être plus efficace.
En tout cas merci beaucoup pour ton aide et ta patience.