Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage de VBA à VB.net d'une macro SAP

    9 juillet 2019 à 16:34:09

    Bonjour

    Je n'ai pas de notion solide de programmation et j'apprends notamment via ce site.

    J'ai une macro VBA que j'utilise pour interagir avec SAP:

    Public SapGuiAuto
    Public ObjGui As GuiApplication
    Public ObjConn As GuiConnection
    Public ObjSess As GuiSession
    Public ObjSBar As GuiStatusbar
    Public ObjUsr
    
    Sub VL03N()
        On Error GoTo Err
        
        Set SapGuiAuto = GetObject("SAPGUI")
        Set ObjGui = SapGuiAuto.GetScriptingEngine
        Set ObjConn = ObjGui.Children(0)
        Set ObjSess = ObjConn.Children(0)
    
        ' Connect status bar
        Set ObjSBar = ObjSess.FindById("wnd[0]/sbar")
        
        
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        
        ' Start Transaction
        ObjSess.StartTransaction ("VL03N")
        
        ' Get Variant
        
        
        'Created by
        ObjSess.FindById("wnd[0]/usr/ctxtLIKP-VBELN").Text = ActiveCell.Value
        
        'Enter
    ObjSess.FindById("wnd[0]/tbar[0]/btn[0]").Press
        
         Exit Sub
    
    

    En plus de ca, j'ai du ajouter comme référence SAP gui scripting api.

    Pour diverses raisons, j'ai besoin de passer ce genre de macro sur un module VSTO en vb.net

    J'ai ajouté la reference SAP gui scripting api au projet, c'est OK

    Mais je lutte pour "convertir" le code, meme si je sais qu'il n'y a pas une methode simple de conversion de VBA vers VB.net

    Serait-il possible d'avoir un peu d'aide, enfin des pistes pour que je me lance la dedans ?

    Ce qui me pose le plus de probleme c'est surtout la partie ou je déclare mes objets "objGui as GuiApplication" ou je vois bien que je ne peux pas mettre ca directement en vb.net
    Merci par avance et bonne journée

    -
    Edité par vib 9 juillet 2019 à 16:53:04

    • Partager sur Facebook
    • Partager sur Twitter
      22 août 2019 à 12:12:51

      "Set", c'est une vieille bidouille du millénaire antérieur.

      Normalement, il doit/devait avoir des réglages dans les options du projet (Strict Off, Explicite Off, etc...) qui permettent de faire encore pas mal de cochonneries du VB6/VBA en VB.NET.

      Mais avec le temps (les nouvelles versions), VB.NET a vraisemblablement dégagé le support de pas mal de ces saloperies (à vérifier).

      L'instruction "Set" n'était qu'un vieux machin pour manipuler "simplement" des objets COM sans que VB6/VBA essaye de les foutre dans des VARIANT "standard" (type par défaut des variable de VBx et VBA).

      VB.NET support nativement les objets COM sans ce bordel de VARIANT, donc pas besoin de faire de "Set".

      Il faut juste remplacer "Set " par "Dim" et ne pas utiliser de "As".

      Mais cela implique l'utilisation de l'option "Option Strict Off" pour l'utilisation de "Late Binding" (automatique en VBA/VBx).

      Plus de détail ici = https://stackoverflow.com/questions/2889974/vb-net-equivalent-for-c-sharp-dynamic-with-option-strict-on

      Après, vous pouvez utiliser les mécanismes d'import de TypeLib COM des outils .NET plutôt que d'utiliser le "Late Binding" de VB.NET/ le typage dynamique de .NET.

      Il y aussi beaucoup de chance qu'il existe des assemblies .NET équivalent aux composants COM utilisé par VBA avec la même API, ou assez proche, rendant le code VB.NET utilisant ces assemblies putatives très proche de celui de VBA mais avec du typage fort donc plus.

      "SAP gui scripting api", c'est un composant COM (celui du code VBA ?) ou est-ce déjà une assembly .NET ?

      > je déclare mes objets "objGui as GuiApplication"

      Si vous utilisez "As", vous n'êtes plus en "Late Binding".

      C'est donc l'API fourni par le composant "référencé" dans "SAP gui scripting api" qui pilote le tout.

      Si c'est le même composant que pour VBA, normalement, un code très proche de celui du VBA fonctionnera, mais si l'API "publiée" par "SAP gui scripting api" est différente de celle "publiée" par les composants COM utilisés par le code VBA, c'est normal que le code soit différent.

      S'il y a vraiment des différences entre ces 2 API, soit vous utilisez les mêmes composants COM que ceux utilisés par le code VBA, donc avec une API archaïque dû aux limitation de COM, mais avec le code VBA comme modèle, soit vous utilisez l'API de l'assembly .NET, qui doit être plus ergonomique (si les mecs de SAP se sont sortis les doigts du c**) mais le code sera à réécrire.

      Vous devez nous fournir les messages d'erreurs et les références (CLASS UID) des composants COM que vous utilisiez et que vous voulez utiliser maintenant, si voulez qu'on soit plus précis dans nos "conseils".

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

      Passage de VBA à VB.net d'une macro SAP

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown