IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA : Manipulation de 2 sessions Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 14
    Par défaut 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.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    si tu mets ton code en entier ou en partie compréhensible

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 14
    Par défaut 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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Bonjour,
    Par pitié, utilise les balise de code !!!

    Tu es visiblement toujours dans l'ActiveSheet quand tu fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1:R200").Select
    Selection.Copy
    Tu devrait utiliser directement les objets Sheet.
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Range("A1:R200").Copy Sheets(2).Range("A1:R200")

  5. #5
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 14
    Par défaut
    Peut-être ai-je mal compris ta réponse mais il s'agit ici de copier des données d'une instance Excel vers une autre. Dans le doute, j'ai essaye ta solution et cela n'a pas fonctionné : Excel copie la plage depuis l'Excel oú tourne la macro.

    En fait le focus reste sur l'excel ouvert par bloomberg (c'est á dire la 2éme instance) seulement si l'instruction :"ActivateBBSheet (temp)" est la dernière ligne de code du programme.

    Cordialement.

    "Par pitié, utilise les balise de code !!!"
    PS : je suis nouveau sur le site, cela sera fait la prochaine fois.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    pour effectuer une copie d'un classeur à un autre il faut en préciser les nom complet

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Classeur2.xls").Sheets("Feuil1").range("A1:H20").copy Workbooks("Classeur1.xls").Sheets("Feuil1").range("A1")
    copie les cellules A1:H20 de la feuille Feuil1 du classeur 2 vers la feuille Feuil1 du classeur1

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Au fait

    "Par pitié, utilise les balise de code !!!"
    PS : je suis nouveau sur le site, cela sera fait la prochaine fois.
    Tu peux éditer ton message, selectionner le code puis # au dessus de l'éditeur.

  8. #8
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Citation Envoyé par bundy_al01 Voir le message
    Peut-être ai-je mal compris ta réponse mais il s'agit ici de copier des données d'une instance Excel vers une autre.
    Désolé j'avais pas compris qu'il s'agissait de deux classeurs Excel. Effectivement, zyhack a raison.

  9. #9
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 14
    Par défaut
    Bonjour,

    Cela ne marche pas si les 2 spreadsheets tournent sur 2 instances différentes d'Excel (ce qui est le cas ici donc) : donc cette solution ne fonctionne pas.

    Cordialement.

  10. #10
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Je vais peut-être dire une bétise mais ne faudrait-il pas regarder du côté de GetObjet ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MonInstanceExcel
    MonInstanceExcel=GetObjet(,"Excel.Application")
    J'dis ça j'dis rien...

  11. #11
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 14
    Par défaut
    J'ai résolu le problème en ouvrant le fichier source en read-only sur l'instance oú tourne le code vba. A vrai dire, j'avais déjà eu cette idée mais je ne voulais l'utiliser car je ne la trouvais pas "élégante".

    Merci pour votre aide.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Excel 2007 VBA manipulation du ruban
    Par jjcol dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/09/2007, 17h41
  2. [VBA Excel] Ouverture d'une nouvelle session Excel
    Par fmartin dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/06/2007, 15h35
  3. [VBA - E] - Manipulation de 2 feuilles EXCEL
    Par jimbololo dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/06/2006, 15h42
  4. [VBA] Comparer des données en excel
    Par Micavk dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/10/2005, 12h26
  5. [VBA-E] Sélection feuilles sous excel
    Par Mystic eyes dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2004, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo