VBA activer un fichier Excel présent sur une autre instance
Mag13180
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- VBA activer un fichier Excel présent sur une autre instance
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
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
PS: n'hésite pas à indenter et à utiliser la balise Code (l'icone <>)