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

VB.NET Discussion :

Transcrire la fonction VBS ExecuteGlobal en VB.NET [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien d'essai
    Inscrit en
    Avril 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien d'essai
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 61
    Par défaut Transcrire la fonction VBS ExecuteGlobal en VB.NET
    Bonjour,


    Pour une application en VB.NET, je suis en train d'adapter un ancien script VBS.

    J'ai presque réussi à tout reprendre mais je bloque sur la fonction "ExecuteGlobal".

    Voici la séquence que je cherche à adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    ExecuteGlobal "valtext= text" & texti & ".item(cstr(DevCount))"					
     
    Txt.SetId valtext
    "texti" est une variable.

    Idem pour DevCount.

    Cette fonction ExecuteGlobal renvoye alors une nouvelle valeur, sous la variable valtext, utilisée à la seconde ligne de ce script.

    J'ai tenté de réaliser une fonction sous VB.NET comme celle ci-dessous, mais cela ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    ExecuteG(valtext, texti)
     
     
        Sub ExecuteG(ByVal valtext, ByVal texti)
     
            valtext = "text" & texti & ".item(cstr(DevCount))"
     
        End Sub
    Quelqu'un pourrait-il m'aider ?

    Merci par avance.

  2. #2
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    Pourquoi vous ne faites pas une simple fonction qui vous renvoie le nouveau texte?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function Modifie(ByVal valtext, ByVal texti) as String
    valtext = "text" & texti & ".item(cstr(DevCount))"
    return valtext

  3. #3
    Membre averti
    Homme Profil pro
    Technicien d'essai
    Inscrit en
    Avril 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien d'essai
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 61
    Par défaut Transcrire la fonction VBS ExecuteGlobal en VB.NET
    Bonjour Licardentaistor et merci pour la réponse.


    J'ai modifié mon script en y plaçant la fonction mais hélas cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Modifie(valtext, texti)
     
        Function Modifie(ByVal valtext, ByVal texti) As String
            valtext = "text" & texti & ".item(cstr(DevCount))"
            Return valtext
        End Function
    J'ai fait l'essai en ajoutant la variable DevCount dans l'appel de la fonction, mais cela ne change rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Modifie(valtext, texti, DevCount)
     
        Function Modifie(ByVal valtext, ByVal texti, ByVal DevCount) As String
            valtext = "text" & texti & ".item(cstr(DevCount))"
            Return valtext
        End Function

    Dans la fonction, j'ai également inclus un Msgbox juste avant le Return valtext pour afficher le contenu de la variable valtext.

    A la place du résultat qui devrait être une valeur numérique, il m'affiche: text101.item(cstr(DevCount)).

    La variable texti correspond bien au chiffre 101 mais le teste de la fonction a été interprété comme du texte.

    Quand je regarde la syntaxe : ExecuteGlobal("valtext= text" & texti & ".item(cstr(DevCount))"), c'est un peu comme si on écrivait une formule Excel avec un =

  4. #4
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    c'est normal tout ce qui est entre " " est interprété comme du texte.

    je suppose qu'il faut que vous passiez en paramètre l'item (de quel type d'objet s'agit t-il?) et le DevCount

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Function Modifie(ByVal valtext, ByVal texti, Byval item, ByVal DevCount as integer) As String
            valtext = "text" & texti & .item(DevCount)
            Return valtext
        End Function

  5. #5
    Membre averti
    Homme Profil pro
    Technicien d'essai
    Inscrit en
    Avril 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien d'essai
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 61
    Par défaut Transcrire la fonction VBS ExecuteGlobal en VB.NET
    Merci licardentaistor,


    Bon, visiblement c'est bien le "text" placé juste après le = qui pose problème.

    item n'est pas une variale, ce mot fait partie d'une syntaxe qu'il faut garder, comme le mot text.


    Cette fonction ExecuteGlobal est appelée dans une boucle qui se répète 3 fois.

    Je viens de faire l'essai en supprimant cette boucle et l'appel de la fonction en répétant 3x la syntaxe.

    J'ai déclaré comme objet text102, text103 et text104 en répétant 3 fois mon script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                valtext = text102.item(CStr(DevCount))
                ...
     
     
                valtext = text103.item(CStr(DevCount))
                ...
     
     
                valtext = text104.item(CStr(DevCount))
                ...
    Cela fonctionne ainsi mais j'aurais quand même voulu laisser mon texti de départ avec une boucle pour texti = 102 to 104.

    Mais la syntaxe suivante indique une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For texti = 102 to 104
    valtext = text & texti & .item(CStr(DevCount))
    Next
    Ce qui semble logique puique "text" n'est pas une variable.

    Je comprend maintenant l'utilité de ExecuteGlobal avec la fonction "valtext= text" & texti & ".item(cstr(DevCount))" faite en VBS mais y a t il un moyen de garder la boucle en VB.NET ?

  6. #6
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    sans votre code complet, je ne sais pas, mais il est toujours possible par exemple de créer dans une boucle des Textbox dynamiquement.

    Il y a t-il un intérêt à faire une boucle pour 3 itérations si celle-ci est fixe ?

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 573
    Par défaut
    Bonjour,
    Le code que tu fournis ne veux absolument rien dire!

    Si tu nous fournis pas le code vbscript original, on pourra jamais t'aider !

  8. #8
    Membre averti
    Homme Profil pro
    Technicien d'essai
    Inscrit en
    Avril 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien d'essai
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 61
    Par défaut Transcrire la fonction VBS ExecuteGlobal en VB.NET
    Bonjour Thumb down et merci pour ce retour.


    Le programme VBS que j'ai repris permet de se connecter à un logiciel de dessin, de trouver des champs de texte à des endroits particuliers dans des plans et de les recopier sur une page via la déclaration d'un tableau iShTab

    Je suppose que la syntaxe particulière ExecuteGlobal "valtext= text" & texti & ".item(cstr(DevCount))" est liée au langage de ce logiciel.

    J'ai d'ailleurs du ajouter une référence dll pour ce nouveau script fait sur VisualStudio 2010.

    Ce sript complet est beaucoup trop complexe et je n'ai besoin que d'en reprendre une partie.


    Voici une partie de l'ancien code en VBS :

    La variable Cint(nbattr) est calculée sur base d'une donnée externe (fichier INI), mais pour mon besoin elle doit avoir comme valeur 3.

    Pour mon script VB.NET, je peux donc remplacer iShtatt par la valeur 104.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	   DevCount = 1
    	   iShTab = 2 
    	   iShtatt = 101 + Cint(nbattr)
    	   For texti = 102 To iShtatt
    		ExecuteGlobal "valtext= text" & texti & ".item(cstr(DevCount))"
    		Txt.SetId valtext
    		Txt.SetText Replace(ShtTab(i,iShTab), Chr(13), " ")
    		iShTab = iShTab + 1
    	   Next
    Voici le nouveau script VB.NET qui fonctionne en l'état:
    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
                DevCount = 1
    	    iShTab = 2 
     
                Dim valtext As String
     
                valtext = text102.item(CStr(DevCount))
                Txt.SetId(valtext)
                Txt.SetText(Replace(ShtTab(i, iShTab), Chr(13), " "))
                iShTab = iShTab + 1
     
                valtext = text103.item(CStr(DevCount))
                Txt.SetId(valtext)
                Txt.SetText(Replace(ShtTab(i, iShTab), Chr(13), " "))
                iShTab = iShTab + 1
     
                valtext = text104.item(CStr(DevCount))
                Txt.SetId(valtext)
                Txt.SetText(Replace(ShtTab(i, iShTab), Chr(13), " "))
                iShTab = iShTab + 1
    Puisque la boucle d'origine se produit 3 fois et que je suis bloqué avec cette syntaxe ExecuteGlobal, j'ai pu contourner le problème en écrivant 3x la séquence.

    La syntaxe valtext = text102.item(CStr(DevCount)) est compréhensible pour le script.

    Idéalement, j'aurais préféré gardé la boucle 102 à 104 mais si je remplace 102 par une variable, le mot text placé devant génère une erreur.

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

Discussions similaires

  1. fonction stockée Oracle et C#.net
    Par billoux70 dans le forum C#
    Réponses: 2
    Dernier message: 16/06/2008, 07h35
  2. [Wincc flexible] Passage d'un pointeur a une fonction Vbs
    Par ren973 dans le forum Automation
    Réponses: 34
    Dernier message: 10/04/2008, 18h29
  3. Réponses: 31
    Dernier message: 31/03/2008, 14h58
  4. Transcrire une fonction system
    Par doog77 dans le forum Langage
    Réponses: 4
    Dernier message: 28/03/2008, 17h45
  5. Transcrire une fonction mathématique en code Matlab
    Par casper84 dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/03/2007, 17h04

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