VBA activer un fichier Excel présent sur une autre instance

Fermé
Mag13180 Messages postés 23 Date d'inscription jeudi 25 février 2016 Statut Membre Dernière intervention 19 novembre 2016 - 17 juin 2016 à 21:22
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 17 juin 2016 à 23:22
Bonjour à tous,
J'ai un soucis lorsque je travaille en réseau :
lorsque j'ai besoin d'activer un fichier Excel (déjà ouvert), cela ne fonctionne pas s'il se trouve sur une autre instance d'Excel.

Pour faire simple je procède à un export d'un logiciel de traitement spécifique à mon activité qui m'extrait sous excel une mini base de données
Dans un fichier Excel différent (fichier A) je dois manipuler cette extraction.
Le soucis c'est que cette extraction se trouve sur une autre instance d'excel (fichier B)

Connaissez vous une méthode svp ?

un bout de mon code actuel :
'ACTIVE BM ET RECHERCHE LE FICHIER DONT LE NOM COMMENCE PAR EXPORT
Dim wb

Dim oWbk As Excel.Workbook

For Each oWbk In Application.Workbooks
If oWbk.Name Like "Export*" Then Exit For
Next oWbk

If oWbk Is Nothing Then
MsgBox "vous n'avez pas procédé à l'extraction via le bureau métier (cf: guide d'utilisation/notice de l'outil) ", vbCritical
Sheets("extraction").Visible = False
Sheets("fiches_clients").Select
Sheets("fiches_clients").Protect

Unload USFWait
Exit Sub
End If


If Not oWbk Is Nothing Then oWbk.Activate
'If Not oWbk Is Nothing Then
wb = ActiveWorkbook.Name


Windows(wb).Activate

à ce stade là je récupère le nom du fichier (car différent à chaque extraction mais qui commence toujours par "export") et je l'active pour copier les infos de ce fichier dans le fichier A etc...

cela ne fonctionne que lorsque le fichier et le fichier se trouvent dans a même instance Excel


Bonne soirée
Magali


http://www.cjoint.com/c/FFrtpqkuzD6

ps: version Excel 2013 domicile et 2010 bureau

A voir également:

1 réponse

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
17 juin 2016 à 21:44
Bonjour,

Tu ne peux pas traiter un fichier s'il n'est pas dans la même session.
Il faut qu'il soit enregistré et tu l'ouvres avec ta macro.
eric
0
Mag13180 Messages postés 23 Date d'inscription jeudi 25 février 2016 Statut Membre Dernière intervention 19 novembre 2016 1
17 juin 2016 à 22:48
Bonsoir eriiic,
Il me semble bien que tu m'as souvent donné des coups de mains sur le forum Excel-pratique à mes débuts sur Excel.....

Je viens péniblement de parvenir à activer le fichier d'une autre instance (en piochant ici et là des infos sur le net ...)
il me reste à l'adapter à mon "fichier A" et éventuellement à l’alléger en tout cas ça fonctionne

dis moi ce que tu en pense

bonne soirée
Magali


voici le code, désolée, c'est surement brouillon :



Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" _
Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, _
ByVal cch As Long) As Long
Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2

Sub LoadTaskList()
Dim CurrWnd As Long
Dim Length As Long
Dim TaskName As String
Dim Parent As Long
Dim che

Dim w
i = 1

'récupère le nom du ficher sur la feuille
Range("G21").FormulaR1C1 = "=FIND(""."",RC[-6])+3"

Range("G21").FormulaR1C1 = "=MID(RC[-7],1,RC[-1])"


twnd& = FindWindow("Shell_traywnd", vbNullString)


'renomme la feuille
On Error GoTo a
Sheets("liste").Select
On Error GoTo 0
Rows("1:1000").Delete



CurrWnd = GetWindow(twnd, GW_HWNDFIRST)
While CurrWnd <> 0
Length = GetWindowTextLength(CurrWnd)
TaskName = Space$(Length + 1)
Length = GetWindowText(CurrWnd, TaskName, Length + 1)
TaskName = Left$(TaskName, Len(TaskName) - 1)

'che = TaskName.Path


If Length > 0 Then
Cells(i, 1).Value = TaskName
i = i + 1
End If
CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT)
DoEvents
Wend

Dim list, fichier
Sheets("liste").Select

Range("A1").Select

Range(Selection, Selection.End(xlDown)).Select
list = Selection.Find(What:="exportphasestransfert*", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Selection.FindNext(After:=ActiveCell).Activate



fichier = ActiveCell.Value

' récupère le nom du fichier dans une variable

Dim l1
l1 = ActiveCell.Row

Cells(l1, 7).Select
ActiveCell.Formula = "=FIND(""."",a" & l1 & ")+3"
Cells(l1, 8).Formula = "=mid(a" & l1 & ",1 ,g" & l1 & ")"
w = Cells(l1, 8)


AppActivate (w)


Exit Sub

a:

Sheets.Add 'renvoie la liste dans une nouvelle feuille de calcul
ActiveSheet.Name = "liste"
Resume Next

End Sub
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
Modifié par eriiic le 17/06/2016 à 23:24
J'en pense que si ça marche pour ce que tu as a faire c'est bien...

PS: n'hésite pas à indenter et à utiliser la balise Code (l'icone <>)
0