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

VBScript Discussion :

Perte de valeur d'une variable


Sujet :

VBScript

  1. #1
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut Perte de valeur d'une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function GetReqItemByName (tdc, ParentID, ChildName)
    	set Reqfactory = tdc.reqfactory
    	Dim Item
    	Item = -1
    	set List = Reqfactory.GetChildrenList(ParentID)
    	If List.count <> 0 Then
    		For Each item in List
    			If trim(item.Name) = trim(ChildName) Then
    				Item = item.ID
    			End If
    		Next
    	End If
    	GetReqItemByName = Item
    End Function
    Voilà une fonction somme fois toute simple. Lorsque j'arrive à Item = item.ID, je remarque que Item prend la bonne valeur (msgbox par exemple).
    Mais lorsque j'arrive à GetReqItemByName = Item, si juste avant
    la ligne j'affiche la valeur de Item, il n'en a plus !!!!
    A noter que j'ai aussi déterminer ne passer qu'une fois dans la condition ci-dessous pour tout le parcours de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If trim(item.Name) = trim(ChildName) Then
    				Item = item.ID
    			End If
    Je suis perdu, quelqu'un voit quelque chose que je ne vois pas ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    salut,
    ta variable item change de type en cours de route ce qui n'est pas très logique
    au départ, item est défini comme un simple variant numérique puis la ligne: provoque un cast vers ce qui est vraisemblablement un variant objet de la collection List

    la ligne: signifie qu'on affecte à la propriété par défaut de l'objet item sa propriété ID (j'espère que c'est pas la même )
    ensuite il manque un exit for pour sortir de la boucle si le test est positif
    enfin, le test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If List.count <> 0 Then
    est à mon sens inutile, car si la collection est vide la boucle for each n'est pas exécutée
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Merci de ta réponse.

    Code :
    If List.count <> 0 Thenest à mon sens inutile, car si la collection est vide la boucle for each n'est pas exécutée
    Fort probable je l'avais mis par sécurité.

    Autrement VBS n'est il pas censé être case sensitif ?
    Certe c'est mal choisis Item et item, mais je pensais que c'était pour lui deux variables différentes !!!! (peut être une grosse erreur)

    Enfin je vais suivre la piste et cahnger le nom.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    Autrement VBS n'est il pas censé être case sensitif ?
    hé non, en revanche c'est le cas de javascript/jscript...
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Oui c'est vrai j'ai marqué une connerie.
    Maintenant que j'y pense, il n'est pas case sensitive, et pas mal de mois je me suis amusé à déclarer une variable avec une majuscule et ensuite l'utiliser sans (par fénéantise)
    Quel con !!!!
    Une demie journée pour ne pas voir cela !!!

    Bon j'ai encore une autre problème :
    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
    Dim toto
    toto = GetReqItemByName (tdc, ParentID, ChildName)
    
    
    Function GetReqItemByName (tdc, ParentID, ChildName)
    	set Reqfactory = tdc.reqfactory
    	Dim Items
    	Items = -1
    	set List = Reqfactory.GetChildrenList(ParentID)
    	If List.count <> 0 Then
    		For Each item in List
    			If trim(item.Name) = trim(ChildName) Then
    				set Items = item ' attention modification j'affecte item et non son ID
    			End If
    		Next
    	End If
    	GetReqItemByName = Items
    End Function
    Au niveau de l'appel cela merde. En effet, j'ai décidé de renvoyé item carrement. item represente un objet.
    Je vais bien jusque GetReqItemByName = Items, mais ensuite mon script ne dépasse pas toto = GetReqItemByName (tdc, ParentID, ChildName)

    J'ai bien essayé avec un set toto, mais cela ne passe pas.

    Est ce qu'une fonction peut renvoyer un objet en VBS ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    Est ce qu'une fonction peut renvoyer un objet en VBS ?
    extrait de la doc vbs (instruction function):
    Une fonction qui renvoie une référence d'objet renvoie la valeur Nothing si aucune référence d'objet n'est affectée à name (en utilisant Set) dans la Function.
    un petit exemple:
    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
    Option Explicit
    Dim og,ro
     
    Class test
       Public go
    End Class
     
    Function getgo(ByRef X)
      X.go="salut"
      Set getgo=X
    End Function
     
    Set og = New test
    og.go="hello"
    Set ro=getgo(og)
    MsgBox ro.go
    et maintenant au boulot
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    lol J'y ai pensé, et j'ai tout préparé pour mon test. Je l'ai lancé, et j'ai oublié de regarder le résultat avant que tu ne postes ton message et de mettre à jour ma demande.

    Je viens juste de regarder et cela marche

    Hé oui le set pour signaler que la variable est une référence à l'objet est indispensable.

    Bien que la syntaxe pour le renvois d'une valeur pour une fonction est particulière (par rapport à du C/C++/C#), c'est bien une affection. Et il ne faut considérer cela comme un return.
    On affecte une valeur à la fonction. La fonction elle même sert de référence sur cette valeur.
    Donc le set est à appliqué si l'on renvois un objet !!!

    Moi j'utilisais la syntaxe comme un simple return

    Merci de ton aide. (La relecture du code par des pères -> très efficace )
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/02/2012, 17h15
  2. VBA, perte de valeur d'une variable aprés avoir activé une autre feuille
    Par mikeactuaire dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/07/2011, 07h13
  3. probleme de perte de valeur pour une variable
    Par eug4016 dans le forum C
    Réponses: 9
    Dernier message: 06/08/2010, 18h04
  4. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26
  5. Réponses: 9
    Dernier message: 30/05/2006, 10h33

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