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 :

Communication entre deux applications


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Par défaut Communication entre deux applications
    Bonjour à tous,

    Je ne sais pas si j’ai posté au bon endroit mais mon problème porte sur la communication entre deux applications (dont une est Excel) à l’aide de macro Excel VBA.

    Je vous explique :
    Au boulot, je travaille avec un logiciel de base de données que nous appellerons « Gamma ».
    Ce logiciel contient des macros en Extra ! Basic.
    Son interface est très simple puisqu’elle restitue les informations de la base de données sur des pages de 40 lignes sur l00 colonnes. On peut déplacer le curseur de sélection sur une page à l’aide des flèches de direction du clavier ou bien en utilisant la touche TAB.

    Voilà pour la présentation de Gamma.

    D’un autre côté, j’ai un fichier Excel de travail dans lequel j’ai mis des informations en relations avec celles de Gamma. Par exemple, dans la colonne NOM, on trouve le nom des clients et dans la colonne PRENOM, vous aurez deviné leur prénom. Ces informations sont également présentes dans la base de données Gamma.

    Mon but est de copier une chaîne de caractères contenue dans une cellule Excel pour venir ensuite la coller à un endroit précis sur la page de Gamma.

    Actuellement, une macro Excel VBA est déjà utilisée pour effectuer l’opération inverse, c'est-à-dire copier une chaîne de caractère sur une page de Gamma et soit la coller dans une cellule Excel, soit la comparer à une autre chaîne de caractère à l’aide d’une condition If… Then…EndIf. Pour cela, il suffit juste d’avoir les deux applications (Gamma et Excel) ouvertes.
    Cette fonction est : Gamma.getstring (Row, Col, Len) avec Row le numéro de la ligne, Col le numéro de la colonne et Len la longueur de la chaîne de caractère.
    Exemple : Cell(2, 3) = Gamma.getstring(10, 57, 3)

    Bien sûr, avant de pouvoir exécuter cette fonction dans la macro Excel VBA, un certain nombre d’objet sont créés et initialisés en début de macro. Voici les lignes de code VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Gamma As Object
    Dim extra As Object
    Set extra = GetObject(, "EXTRA.System")
    Set Gamma = extra.ActiveSession.Screen
    AppActivate "Gamma-APPL - EXTRA! Personal Client"
    Pour info : Gamma-APPL-EXTRA! Personal Client est le nom que l’on trouve tout en haut de la fenêtre de l’application. Dans Word au même endroit, on a « le nom du fichier ouvert » - Microsoft Word.

    En cherchant dans l’éditeur de macro Extra! Basic de Gamma, j’ai trouvé les fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objScreen.GetString iRow, iCol, iLen
    …qui correspond étrangement à la fonction utilisée dans la macro VBA :
    Gamma.getstring (Row, Col, Len).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objScreen.PutString szText, iRow, ICol
    J’ai donc tenté d’utiliser la syntaxe de la fonction « PutString » dans ma macro VBA Excel pour écrire BONJOUR sur une page de Gamma à l’intersection entre la ligne 13 et la colonne 24 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Gamma.putstring (« BONJOUR », 13, 24)
    La macro VBA tourne sans erreur de compilation mais rien n’est écrit dans Gamma à l’endroit déterminé.

    Voilà où j’en suis actuellement…

    Si vous voulez plus de précision, dites-le moi !

    D’avance merci pour vos réponses et pour votre aide.

    A+

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    L'inforamtaion est-elle tout simplement absente du fichier Gamma ou apparait-elle à un endroit autre que celui voulu?

    Aussi, je crois qu'il pourrait s'agir d'une mauvaise conversion de "BONJOUR" (pour VBA) et "BONJOUR\0" (chaine finissant par le caractère Null (\0). Peut être que ça fonctionnerait si tu concaténais Chr(0) à la fin de ton String.

  3. #3
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir,

    la syntaxe dans "gamma" est elle avec des «» ou ""?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Gamma.putstring (« BONJOUR », 13, 24)
    Explications très claires. Merci

    Cordialement

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Par défaut
    Citation Envoyé par Singular Voir le message
    L'inforamtaion est-elle tout simplement absente du fichier Gamma ou apparait-elle à un endroit autre que celui voulu?

    Aussi, je crois qu'il pourrait s'agir d'une mauvaise conversion de "BONJOUR" (pour VBA) et "BONJOUR\0" (chaine finissant par le caractère Null (\0). Peut être que ça fonctionnerait si tu concaténais Chr(0) à la fin de ton String.
    L'information n'apparaît pas du tout dans Gamma.

    N'ayant pas l'application Gamma chez moi, j'essaierai lundi d'ajouter \0 à la fonction.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Par défaut
    Citation Envoyé par fred65200 Voir le message
    bonsoir,

    la syntaxe dans "gamma" est elle avec des «» ou ""?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Gamma.putstring (« BONJOUR », 13, 24)
    Explications très claires. Merci

    Cordialement
    Merci, j'ai fait de mon mieux pour essayer de décrire mon problème le plus précisément possible. Mais ce n'est pas évident lorsqu'on ne maîtrise pas complètement toutes les subtilités qu'il peut y avoir dans la communication entre deux logiciels via des macros. D’ailleurs pour la plupart de mes collègues c’est du charabia. lol. Au passage, j’ai ajouté les balises de code que j’avais oubliées. Désolé.

    Par exemple, je pense avoir compris que dans la macro Excel VBA, Gamma était déclaré en tant qu'objet possédant une fonction (« Méthode » pour utiliser le terme exact) getstring, d’où le point qui les sépare (oui j’ai encore quelques notions de POO). Par contre, ce que je ne comprends pas c’est comment fait VBA pour savoir que l’objet Gamma ainsi créé possède une fonction « getstring ». Comment obtenir toutes les fonctions de l’objet Gamma ?

    Je suppose que ce type de communication entre applications doit être monnaie courante et que je ne dois pas être le seul à utiliser des macros faisant intervenir plusieurs fenêtres de programmes à la fois.

    C’est pourquoi au-delà de trouver une solution à la fonction « putstring », j’aimerais également comprendre les mécanismes pour pouvoir répondre à de futures interrogations du même genre.

    Enfin pour répondre à la question concernant la syntaxe :

    La syntaxe que j’ai trouvée dans EXTRA ! Basic (macro de Gamma) est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objScreen.PutString szText, iRow, ICol
    J’ai testé les syntaxes suivantes, mais sans résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Gamma.putstring BONJOUR, 57, 3
    Gamma.putstring "BONJOUR", 57, 3
    Gamma.putstring (10, 57, 3) = "BONJOUR"

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Gamma.putstring ("BONJOUR" & Chr(0)), 57, 3
    As-tu essayé?

  7. #7
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour jeff62000, Singular

    si ça peut aider
    http://www.tek-tips.com/faqs.cfm?fid=4087

    et une référence à une dll
    http://www.tek-tips.com/viewthread.c...=663392&page=8

    je te laisse fouiller

    cordialement

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,

    ci joint un bout de code que j ai trouvé ds ma boite pour l outil "gamma"
    testé sur le mm outil !!!
    ce code sert a ouvrir une session et remplir des champs

    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
     
    Sub IH_GetSession()
     
    Set ObjEXTRA = CreateObject("EXTRA.System")
    Set ObjSESSION = ObjEXTRA.ActiveSession
    Set ObjECRAN = ObjSESSION.Screen
    Set ObjAREA = ObjECRAN.Area(1, 1, 24, 80)
    ObjSESSION.WindowState = 1
    ObjSESSION.Visible = True
    End Sub
     
    Sub IH_Send(ByVal Texte As String, ByVal Row As Integer, ByVal Col As Integer)
    Dim T, P, L, I, C, E, X
     
    'Envoi la chaine "Texte" à la ligne "Row" et la colonne "Col" spécifiées
    'Tronque la saisie si chaine plus longue que le champs.
     
    'Si "Row" ou/et "Col" invalide ("0" par exemple), simule frappe de "Texte"
    '=> à la position courante du curseur. A la fin du champs, continue au champ suivant.
     
     
    T = UCase$(Texte)
    If Len(T) < 1 Then Exit Sub
     
    If Row < 1 Or Row > 24 Or Col < 1 Or Col > 80 Then
        E = T
        I = 1
        If InStr(I, E, "<") > 0 Or InStr(I, E, ">") > 0 Then
            For I = 1 To Len(E)
                ObjECRAN.SendKeys Mid$(E, I, 1)
            Next I
        Else
            ObjECRAN.SendKeys E
        End If
    Else
        ObjECRAN.PutString T, Row, Col
    End If
     
     
    End Sub

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Par défaut
    J'ai pu testé à nouveau la méthode "putstring" mais sans grand succès.

    En revanche, en fouillant dans les fonctions Extra!, j'ai trouvé la fonction qui permet de se placer à l'intersection désirée sur la page de Gamma :
    Associée à la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sendkeys "Texte à envoyer", True
    J'aboutis au résultat souhaité.

    Ca ne m'explique toujours pas pourquoi la fonction putstring ne fonctionne pas. Par contre l'idée d'entrer le texte à envoyer dans une variable de type string, puis d'indiquer cette variable à la fonction peut être une solution. J'essayerai de tester ceci si j'ai le temps.

    A+

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonsoir jeff62000

    le code que je t ai fourni tourne actuellement pour l exportation et importation de donnée de l outil "gamma"

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 5
    Par défaut
    Merci Patbou, mais je n'aime pas utiliser des bouts de code tel quel. Par contre, le site trouvé par fred65200 est très intéressant et répond tout à fait à mes questions.

    Je considère donc que j'ai obtenu ma réponse.

    Encore merci à tous.

    A bientôt peut-être...

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

Discussions similaires

  1. communication entre deux applications differentes
    Par rimie_rimie dans le forum Administration système
    Réponses: 3
    Dernier message: 10/11/2010, 17h05
  2. Réponses: 17
    Dernier message: 04/09/2010, 19h57
  3. [WPF][WCF] Communication entre deux applications
    Par DotNET74 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 16/08/2010, 20h54
  4. Réponses: 2
    Dernier message: 16/02/2009, 10h31
  5. communication entre deux applications
    Par ilhamita dans le forum Langage
    Réponses: 1
    Dernier message: 06/03/2007, 15h28

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