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

VBA Discussion :

Affectation variable VBA


Sujet :

VBA

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 27
    Par défaut Affectation variable VBA
    Bonjour,

    J'ai un souci lors de l'affectation d'une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    StockCase = "SECHOIR." & SechoirActu & ".CASE." & CasesActu & ".Poids"
    MsgBox StockCase ' affiche "SECHOIR.C.CASE.65.Poids
    Cette ligne de code me permet de vérifier le bon fonctionnement des variables SechoirActu et CaseActu. Et de stocker le tout dans une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set e = [@SECHOIR.C.CASE.65.Poids]
    MsgBox e.Value 'récupère la valeur du poids de la case C65
    Cette ligne de code me permet de déclarer la variable et d'en récupérer sa valeur mais à un endroit bien précis.

    Ce que je cherche à faire c'est celà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Set f = [@SECHOIR." & SechoirActu & ".CASE." & CasesActu & ".Poids] 'ne marche pas Object Variable or with block not set
    Set f = ["@SECHOIR." & SechoirActu & ".CASE." & CasesActu & ".Poids"] 'ne marche pas Object Variable or with block not set
    Set f = [@SECHOIR. & SechoirActu & .CASE. & CasesActu & .Poids] 'ne marche pas Object Variable or with block not set
    Set f = [@ & StockCase &] 'ne marche pas Object Variable or with block not set
    ' je n'arrive pas a trouvé la bonne syntaxe
    MsgBox f.Value
    Merci pour votre aide.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut Hôte VBA: Modèle Objet versus Syntaxe spécifique
    Bonjour,

    Ce ne sera pas facile de te répondre, surtout que tu ne nous dis rien de l'application hôte que tu veux programmer en VBA.

    De quelle application hôte s'agit-il ?


    Ensuite, une remarque importante sur l'accès aux "objets de l'application hôte".

    L'application hôte fournit un modèle objet qui te permet d'accéder aux objets avec lesquels tu dois travailler.
    En général:
    - le modèle objet possède un objet Application qui est au sommet de la hiérarchie des objets du modèle.
    - l'objet Application donne accès à l'hôte ainsi qu'à des collections d'autres objets. Exemple avec Excel, l'Application donne accès à Workbooks, la collection des classeurs ouverts dans l'application.
    - une collection est composée d'objets qui sont les documents de travail, les plans, les images, les formulaires,... les objets sur lesquels tu travaillent vraiment.

    Si tu connais l'organisation du modèle de l'application, alors tu peux accéder à n'importe quel objet actuellement utilisé, ou en charger d'autres (ex. ouvrir un fichier de travail ajoute des objets dans les collections du modèle).

    En parallèle de ce modèle, l'application hôte peut offrir une syntaxe spécifique qui donne accès aux mêmes objets.
    Le principal intérêt de cette syntaxe spécifique est d'offrir des raccourcis, au lieu de "naviguer" dans un modèle objet.

    Dans ce cas, l'éditeur VBA permet d'écrire une expression qu'il ne sait pas analyser mais, à l'exécution, c'est l'application hôte qui effectue l'analyse de l'expression et retourne une valeur ou un objet.

    En VBA, les éléments de syntaxe spécifique sont souvent isolés au moyen des caractères crochets et composés avec des caractères particuliers (ici c'est l'arobase @, ailleurs on utilise ! ou $, etc.)

    Dans le code que tu nous donnes, j'ai l'impression que tu mets justement en oeuvre l'accès aux objets via la syntaxe spécifique à ton hôte.

    Mais tu es confronté à une limitation inhérente à la syntaxe spécifique:
    tu ne peux pas écrire directement dans l'éditeur de VBA une expression dont des parties sont paramétrées.

    Peut-être que l'objet Application fournit une méthode d'évaluation d'une expression
    _ comme la méthode Eval() pour Microsoft Access.
    Dans ce cas, on construit une chaîne de caractères qui compose l'expression à évaluer, et on la passe explicitement à la méthode d'évaluation (une fonction).

    Mais dans ton cas, je pense qu'il vaut mieux laisser de côté la syntaxe spécifique pour t'intéresser au modèle objet et voir comment on peut accéder à l'objet case (?) du séchoir (?) et lire la valeur de l'objet ou propriété poids.

    Est-ce clair ?
    _

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 27
    Par défaut
    Merci pour ta réponse, je comprends qu'il existe une syntaxe spécifique pour chaque logiciel.
    Dans mon cas c'est PCVUE dans l'aide il propose simplement l'accès au variable par le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set e = [@SECHOIR.C.CASE.65.Poids]
    MsgBox e.Value 'récupère la valeur du poids de la case C65
    Mais tu es confronté à une limitation inhérente à la syntaxe spécifique:
    tu ne peux pas écrire directement dans l'éditeur de VBA une expression dont des parties sont paramétrées.
    C'est ceux que je cherchais à faire car j'ai actuellement trouvé aucun autre moyen.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Citation Envoyé par Zoro63 Voir le message
    Merci pour ta réponse, je comprends qu'il existe une syntaxe spécifique pour chaque logiciel.
    Dans mon cas c'est PCVUE dans l'aide il propose simplement l'accès au variable par le code suivant :

    [...]
    C'est ceux que je cherchais à faire car j'ai actuellement trouvé aucun autre moyen.
    Je ne connais pas PCVue (c'est un environnement permettant de développer une supervision d'installations industrielles, etc.)

    Les variables définies dans ton système de supervision sont certainement accessibles par l'intermédiaire d'une collection des variables que le modèle objet met à ta disposition.

    Cherche dans l'aide en ligne sur le mot-clé "variable".

    Et puis, dans l'explorateur d'objets de VBE (l'éditeur intégré de VBA) tu peux explorer la bibliothèque de PCVue pour y retrouver toutes les composantes de son modèle objet.

    Enfin, il y a un forum Automation où tu pourrais poser tes questions.
    Forum Automation.

    D'ailleurs en farfouillant, j'ai trouvé dans ce forum une discussion que tu devrais lire, car il y a la réponse à ta question:
    [PcVue 8.10] Récupération de variable de BDD vers VBA

    La syntaxe à respecter, pour travailler dans le modèle objet, est:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Variables.Item("@la variable").Propriété
    Donc si on l'adapte à ton cas:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim sVariable As String
    Dim f as Object        ' ce serait mieux de donner la classe des variables PCVue
     
    sVariable = "@SECHOIR." & SechoirActu & ".CASE." & CasesActu & ".Poids" 
    Set f = Variables.Item(sVariable)
    MsgBox f.Value

    En plus compact:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim f as Object        ' ce serait mieux de donner la classe des variables PCVue
     
    Set f = Variables.Item("@SECHOIR." & SechoirActu & ".CASE." & CasesActu & ".Poids" )
    MsgBox f.Value

    _

  5. #5
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 27
    Par défaut
    Merci pour ta réponse c'est exactement çà qu'il me fallait.

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

Discussions similaires

  1. [htm/JavaScript] Pbm affectation variable d'environnement
    Par fab22montpellier dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 27/06/2005, 16h09
  2. Réponses: 5
    Dernier message: 12/05/2005, 10h49
  3. Réponses: 10
    Dernier message: 03/05/2005, 21h57
  4. [JSP] [débutant] affectation variable java
    Par RENAULT dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 26/07/2004, 15h44
  5. Affecter variable champs
    Par pete007 dans le forum ASP
    Réponses: 3
    Dernier message: 20/04/2004, 16h33

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