Bonjour
Je bute sur un problème sans doute tout bête.
Sujet à traiter : dans un document Word, rapatrier en automatique des images d'un ensemble de plages NOMMÉES.
Pb résolu : lancer Excel, ouvrir le fichier, trouver la plage, la copier, OK tout va bien !
Pb non résolu : j'ai modularisé le code à fond, ce qui fait que je veux pouvoir chercher UNE plage, à la demande.
Dans ce cas, je veux savoir si le fichier de référence auquel je veux accéder est déjà ouvert dans Excel, pour
ne pas multiplier les ouvertures de ce fichier.
Voici le code dans sa version actuelle, en ce qui concerne l'ouverture du fichier. L'objet xl est défini globalement pour pouvoir être appelé à la volée par d'autres Sub.
Le problème est bien isolé : quand je détecte que la tâche Excel est lancée, je l’active, mais je parviens pas à associer mon objet xl à cette tâche existante.
je pensais dans ce cas que la syntaxe Set xl = CreateObject("excel.application"), en rouge dans le code ci-dessous, allait m'associer ma tache existante, mais non.
Toute aide est la bienvenue, et fort appréciée.
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 Sub Ouvrir_Controler_Validité_Fichier() On Error GoTo Erreur Dim Excel_lancé As Boolean Début: Excel_lancé = Tasks.Exists("Microsoft Excel") Select Case Excel_lancé ' ' Si la tâche EXCEL n'existe pas, on la lance ' Case False Set xl = CreateObject("excel.application") xl.Visible = True ' Si elle existe déjà, on l'active ' Case True With Tasks("Microsoft Excel") Essai_Activation = True .Activate Set xl = CreateObject("excel.application") xl.Visible = True Essai_Activation = False .WindowState = wdWindowStateNormal End With End Select xl.Workbooks.Open FileName:=Nom_Répertoire_Courant_Diag_EP & "\" & Nom_Fichier_XL_EP, ReadOnly:=True Exit Sub Erreur: ' ' Traitement de la situation temporaire où le process existe encore sans l'application en avant-plan ' Dans ce cas on TUE le process et on revient à la situation normale où Excel était fermé. ' If Essai_Activation = True And Err.Number = 4601 Then Tasks("Microsoft Excel").Close GoTo Début 'On recommence le process standard de création de la tâche Excel et d'ouverture End If Call A_Communs.CodeErr(Macroencours$, Nom_Répertoire_Courant_Diag_EP & "\" & Nom_Fichier_XL_EP, Err.Number, Err.Description) Exit Sub End Sub
Partager