VBA : Manipulation de 2 sessions Excel
Bonjour,
j'ai le problème suivant : j'ai une 1ere instance d'Excel "Feuille1" sur lequel tourne un programme en VB. J'ai une 2eme session d'Excel ouverte en même "Feuille2" temps a partir de laquelle je veux copier des données et les coller dans "Feuille1".
J'arrive a sélectionner la "feuille2" (grace aux posts fournis dans ce forum) mais lorsque j'essaye de faire le copier/coller, le système copie les données depuis la "feuille1" au lieu d'utiliser la "feuille2". La raison doit être que le code VB tourne depuis la "feuille1".
donc le fonctionnement théorique serait celui-ci :
le VB tourne sur "Feuille1"
VB sélectionne la "feuille2"
il copie des données dans la "feuille2"
les colle dans la "feuille1"
Merci pour votre aide.
Voici le code avec des explications supplémentaires
Le voici. je ne l'ai pas posté car je me suis dis au début que ce problème avait dû déjà être rencontré auparavant et que la solution était donc indépendante de mon code.
Le code VB est lancé depuis une feuille qui s'appelle "GetBloomdivSchedule"
En 1er lieu, elle lance une requête dans Bloomberg, le résultat apparait dans une nouvelle instance d'Excel dont le nom est aléatoire d'où le recours a la proc "WinList" pour pouvoir retrouver le nom qui est toujours du type : "Microsoft Excel - cadl" + 1 nombre aléatoire
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
| Sub coller()
Dim temp As String
Dim NbApplic As Long
Dim ligne As Long
Dim LenghtMyExcelBB As Long
WinList ' Procedure qui liste toutes les applications Windows et les colle 'dans la feuille ("Active Windows")
' On parcours la feuille ("Active Windows") pour trouver le nom de
' la nouvelle instance d'Excel
NbApplic = Range("A1").CurrentRegion.Rows.Count
ligne = 2
temp = Range("A" & ligne)
While Left(temp, 22) <> "Microsoft Excel - cadl" And ligne - 1 < NbApplic
ligne = ligne + 1
temp = Range("A" & ligne)
Wend
If ligne > NbAppl Then
MsgBox ("Pas de fichier Bloom")
GoTo sortie
End If
' temp est le nom de mon fichier Excel dans la nouvelle instance
' Cette fonction me permet d'activer cette fenêtre
ActivateBBSheet (temp)
' Je souhaite en copier les data et les exporter dans mon autre fichier excel
' celui ou tourne cette macro et qui s'appelle "GetBloomdivSchedule"
Range("A1:R200").Select
Selection.Copy
Windows("GetBloomDivSchedule").Activate
Worksheets("CACT").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,_ SkipBlanks:=False, Transpose:=False
End sub |
Dans un autre module, voici comment est définie "ActivateBBSheet":
Code:
1 2 3 4 5 6 7 8 9 10
| Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassname As String, ByVal lpWindowName As Any) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Sub ActivateBBSheet(temp As String)
'm_hWnd = FindWindow(vbNullString, "Microsoft Excel - cadl73")
m_hWnd = FindWindow(vbNullString, temp)
Call SetForegroundWindow(m_hWnd)
End Sub |
Rq : j'ai trouvées d'autres fonctions qui font la même chose a la différence près qu'il est possible de choisir les commandes "ShowWindows" mais j'ai le même problème cad :
lorsque j'essaye de faire mon copier/coller, au lieu de copier le Range("A1:R200") a partir de la feuille "M E - cadl23", il utilise la feuille "GetBloom..." cad la feuille ou le programme VB tourne (ie: le focus ne reste pas sur "M E - cadl23").
J'espère que mes explications et le bout de code fournis seront assez clairs.
Cordialement.