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

Access Discussion :

indirection en vba


Sujet :

Access

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut indirection en vba
    salut

    comment fait on une indirection en access ?

    merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    petite précision pour ceux qui ne savent pas forcément ce qu'est une indirection.

    Il s'agit par ex de manipuler les propriétés d'un objet (un formulaire par ex), via une variable.


    mavariable = LeFormulaire
    je ferais
    mavariable.recordsource = "Select...."
    au lieu de:
    LeFormulaire.recordsource = "Select...."

    j'ai cherché dans FAQ et forum, rien trouvé.
    Ca me surprend.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 155
    Points : 112
    Points
    112
    Par défaut
    Et pourquoi veut tu faire ça

    Si ton formulaire se nomme F1 tu peut apeller n'importe quel objet du formulaire F1 à partir d'un autre formulaire

    Exemple :

    Form_F1.maListe.rowSource="Select * From ...;"

    Je ne te comprend pas bien.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    c'est pas une réponse ca !!! lol

    On fait ca dans le cas où on va parcourir une collection par ex.

    Par ex, récupérer la liste des formulaires d'une appli via la table msysobjects.

    donc pour éviter d'écrire x fois la même chose.

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 155
    Points : 112
    Points
    112
    Par défaut
    Que veux tu faire exactement ?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il y a plein de façons de faire je t'en expose une

    supposons une table xx dans lesquelles j'ai

    ordre typerequête sql
    1 action update........
    2 action insert...........
    3 selection select.......
    ............


    supposons maintenant qu'à l'aide d'un formulaire j'entre dans une autre table yy les ordres 231 et la clef de tri 1 2 3 si dans mon formulaire j'ai un bouton séquence
    je lui associe le traitement suivant
    ouvrir un recordset sur yy order by clef de tri
    pour chaque enregistrement
    je vais chercher dans xx le bon ordre
    si typereqête=action
    alors
    runsql(sql)
    sinon
    openrecordset(sql)


    nb j'ai fait cela une fois
    me souvient plus pourquoi(alzheimer??)
    à mon avis ce type d'organisation signe un pervers polymorphe caractérisé

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par random
    à mon avis ce type d'organisation signe un pervers polymorphe caractérisé
    oui ca c certain !!

    je vous explique

    dans la boite il y a SAGE(autant de base que de sociétés qui compose le groupe)
    j'ai des cnx ODBC sur chacune des bases.
    Elles sont nommées
    SAGE_NomSoc1
    SAGE_NomSoc2
    SAGE_NomSoc3
    ...
    SAGE_NomSocX

    Je fais des liaisons de tables en auto.
    Je récupère la valeur de NomSocX,
    et via le code, je veux pouvoir lier en fonction de cette valeur.
    Une simple concaténation ne suffit pas.

    Deuxième ex:

    Dim reqSelFrm As String
    Dim rstSelFrm As Recordset
    Dim NomFrmTrt As String
    reqSelFrm = "SELECT Name FROM MSysObjects WHERE Type = -32768"
    Set rstSelFrm = db.OpenRecordset(reqSelFrm, dbOpenSnapshot)
    rstSelFrm.MoveFirst
    While Not rstSelFrm.EOF

    NomFrmTrt = rstSelFrm!Name
    NomFrnTrt.RecordSource = "Select ....."
    rstSelFrm.MoveNext
    Wend
    rstSelFrm.Close: Set rstSelFrm = Nothing
    En rouge, ce que je voudrais faire.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    désolé si c'est un peu fouilli.

    Mais le terme d'indirection est quant à lui bien juste.
    Pourtant il me semble l'avoir déjà fait il y a longtemps sous access.

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 155
    Points : 112
    Points
    112
    Par défaut
    ok, je comprend mieux, mais ce doit pas etre simple.

    NomFrnTrt.RecordSource = "Select ....."
    Quel type doit avoir NomFrnTrt ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    en fait je veux récupèrer dans une variable de type string, successivement
    le nom des formulaires.
    Puis modifier des propriétés des formulaires passés en variable, en me basant sur la variable(type string donc).

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    plutot que de vouloir bricoler les noms je te suggère de t'intérésser
    aux propriétés personnalisées
    ceci devrait permettre de rester de rester infiniment plus générique
    d'autre part plutot que d'attaquer les tables systèmes autant passer par les collections forms ou autres

  12. #12
    Membre actif Avatar de ActionAccess
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 213
    Points
    213
    Par défaut
    Bonjour,

    Si j'ai bien compris la question, on peut tout à fait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim frm As Form
    Set frm = Forms("MonFormulaire")
    With frm
    .RecordSource = NomTable
    .RecordsetType = 0
    .Caption = NomTable
    End With
    et "MonFormulaire", tu peux le remplacer par une variable string.

    Espérant t'avoir aidé,

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    plutot que de vouloir bricoler les noms je te suggère de t'intérésser
    aux propriétés personnalisées
    tu peux en dire plus, je ne connais pas, et chque info est tjs la bienvenue.
    d'autre part plutot que d'attaquer les tables systèmes autant passer par les collections forms ou autres
    Tout à fait d'accord.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par ActionAccess
    Bonjour,

    Si j'ai bien compris la question, on peut tout à fait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim frm As Form
    Set frm = Forms("MonFormulaire")
    With frm
    .RecordSource = NomTable
    .RecordsetType = 0
    .Caption = NomTable
    End With
    et "MonFormulaire", tu peux le remplacer par une variable string.

    Espérant t'avoir aidé,
    Dim frm As Form
    Set frm = Forms(rstSelFrm!Name)
    With frm
    .RecordSource = "select * from toto"
    .RecordsetType = 0
    .Caption = "pouet pouet " & rstSelFrm!Name
    End With
    et non, ca ne fonctionne pas.

  15. #15
    Membre actif Avatar de ActionAccess
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 213
    Points
    213
    Par défaut
    Je précise que pour modifier les propriétés précédemment citées, il convient d'ouvrir le formulaire avant.
    C'est peut-être ça qui ne fonctionne pas (en précisant la ligne en erreur et le type d'erreur, on pourrait plus facilement t'aider) .

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    merci,
    en effet, j'avais oublié, cela fonctionne comme ca.

    ceci dit, la question d'ordre générique sur l' indirection est tjs en suspens.
    Access(97) ne saurait pas faire?

  17. #17
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le code de ActionAccess est juste.A part le recordsetType qui n'est surement pas utile ici. Quant aux propriété personalisées, je te conseille :

    http://warin.developpez.com/access/dao

  18. #18
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    J'ai pas compris

    mavariable = LeFormulaire
    je ferais
    mavariable.recordsource = "Select...."

    Ceci est correct du moment que mavariable est de type Form ... c'est pas une indirection mais simplement une affectation

    Maintenant si mavariable est de type string, il est necessaire de passer par la collection possedant l'objet. Pas le choix

  19. #19
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    on parle habituellement d'indirection quand l'affectation est faite
    non pas avec avec le contenu d'une variable mais avec l'adresse sur laquelle elle pointe

    indirect(a) suppose que a contienne une adresse comme b
    auquel cas indirect(a)=b

    sous access la fonction n'existe pas celle qui s'en s'en rapprocherait le plus est eval

    sous excel elle rend de précieux services sous la forme
    indirect(adresse())

    sous dos on trouve des fonctions d'indirection avec un fichier d'entrée
    qui contient les paramètres d'une séquence de traitement

    cela peut devenir très fun
    on peut concevoir des indirections d'indirection

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    Mon ex du formulaire a été résolu. Certes.

    ex de déf d'indirection pour un autre langage (windev):

    Les opérateurs { et } permettent d'accéder à un champ, une variable, un membre d'une classe ou une rubrique de fichier en construisant dynamiquement le nom du champ, de la variable, du membre de la classe ou de la rubrique.


    L'intérêt des opérateurs { et } est multiple :

    Passer en paramètre un nom de champ, de variable, de membre d'une classe ou de rubrique.

    Construire le nom d'un champ, de la variable, d'un membre d'une classe ou d'une rubrique par programme.

Discussions similaires

  1. Traduire INDIRECT dans VBA
    Par counterbob dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/12/2014, 20h07
  2. liste indirecte dans une boucle VBA
    Par visa76 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2013, 21h51
  3. Utilisation de feuilles variables en VBA sans passer par indirect
    Par Titeuf4243 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2011, 20h43
  4. vba excel nom indirect de variable
    Par ajc50 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/12/2009, 00h22
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

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