Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gestion des instances d'Excel

2 réponses
Avatar
GérardJean
Bonjour,
Je souhaite à partir de Word accéder à un classeur Excel chargé en mémoire.
Je n'ai pas de problème s'il existe une seule instance d'Excel, la séquence
suivante fonctionne bien :
set Xl=GetObject(,Excel.Application)
set Wk = Xl.Workbooks("MonClasseur.xls")
Mais en présence de plusieurs instances d'Excel, ça se corse.

Comment procéder en présence de plusieurs instances d'Excel ?
A défaut peut-on imposer une seule instance d'Excel ?

Merci pour vos réponses

2 réponses

Avatar
Youky
Voici un exemple
on gère les erreurs au fur et à mesure
pour n'ouvrir qu'une seul instance d' XLS
idem pour le fichier (si deja ouvert)
Les fichiers doivent être dans le même répertoire
Youky

Sub myxls()
Dim Appxls As Object
Dim fichier As String
suivant="nomdufichier.xls" 'à modifier selon
On Error Resume Next
Set Appxls = GetObject(, "Excel.Application")
If Err <> 0 Then _
Set Appxls = CreateObject("Excel.Application")
Appxls.Visible = True
On Error GoTo 0
fichier = ThisWorkbook.Path & "" & suivant
On Error Resume Next
AppWrd.Windows(suivant).Activate
If Err <> 0 Then AppWrd.Workbooks.Open (fichier)
On Error GoTo 0
AppActivate AppWrd
With AppWrd
.WindowState = xlMaximized
End With
Set AppWrd = Nothing
End Sub
"GérardJean" a écrit dans le message
de news:
Bonjour,
Je souhaite à partir de Word accéder à un classeur Excel chargé en
mémoire.
Je n'ai pas de problème s'il existe une seule instance d'Excel, la
séquence
suivante fonctionne bien :
set Xl=GetObject(,Excel.Application)
set Wk = Xl.Workbooks("MonClasseur.xls")
Mais en présence de plusieurs instances d'Excel, ça se corse.

Comment procéder en présence de plusieurs instances d'Excel ?
A défaut peut-on imposer une seule instance d'Excel ?

Merci pour vos réponses




Avatar
PMO
Bonjour,

Comment procéder en présence de plusieurs instances d'Excel ?


Voici un code qui vous indiquera le nombre d'instances d'Excel.
Vous pourrez, le cas échéant, avertir l'utilisateur par MsgBox et
lui indiquer ce qu'il doit faire.

Copiez le code ci-dessous dans un module WORD.
Ouvrez une ou plusieurs instances d'Excel et faites tourner la
macro "NbInstanceXL".

'*************************
Public Declare Function GetWindowText& Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long)
Public Declare Function EnumWindows& Lib "user32" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long)

Public NomsChaine$
'_______________________________________
Public Sub NbInstanceXL()
Dim TblHwnd As Variant
Dim TblFenetre As Variant
Dim reponse&
Dim i&
Dim cpt%
NomsChaine$ = ""
reponse& = EnumWindows(AddressOf EnumWindowsProc, 0)
TblFenetre = Split(NomsChaine$, vbCrLf)
For i& = 1 To UBound(TblFenetre)
If Left(TblFenetre(i&), 17) = "Microsoft Excel -" Then cpt% = cpt% + 1
Next i
MsgBox "Il y a " & cpt% & " instance(s) d'Excel"
End Sub
'_______________________________________
'///Fonction de callback ///
Public Function EnumWindowsProc&(ByVal Handle As Long, ByVal Param As Long)
Dim Ch$
Dim Tempo&
Dim reponse&
Ch$ = Space(1024)
Tempo& = Len(Ch$)
reponse& = GetWindowText(Handle, Ch$, Tempo&)
Ch$ = Trim(Replace(Ch$, Chr$(0), ""))
If Ch$ <> "" Then NomsChaine$ = NomsChaine$ & Ch$ & vbCrLf
EnumWindowsProc = 1
End Function
'*************************

Cordialement.

PMO
Patrick Morange