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 Access Discussion :

Import d'une table temp et ouverture formulaire via VBA


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut Import d'une table temp et ouverture formulaire via VBA
    Bonjour

    Bien que ma question implique Mapinfo 9 ET Access 2000, je ne pense pas qu'il soit nécessaire d'avoir jamais utilisé Mapinfo pour y répondre, car je suis convaincu que la solution sera purement Access.

    C'est pourquoi j'ai occulté ce détail dans l'intitulé, car, comme vous le verrez en lisant cet interminable post, Mapinfo n'intervient que peu dans l'histoire et je voulais éviter d'avoir un intitulé d'un km de long… Merci de votre compréhension.

    Pour info, et pour ceux qui maîtrisent Access mais ne connaissent pas Mapinfo, est un logiciel de SIG (Système d'Information Géographique) qui permet d'associer à des bases de données, une information graphique.

    Bien que ce ne soit pas le meilleur exemple, le cadastre permet en cliquant sur une parcelle, de connaître sa surface et son propriétaire. De même, Mapinfo peut générer une table contenant les identifiant, ainsi que toutes les information relatives aux parcelles sélectionnées, ou contenues dans un périmètre.

    Tout d'abord un petit lien.

    http://www.paris-pc-gis.com/externes...ss_MI_demo.htm

    Il s'agit d'un ensemble de fichiers de commandes tous prêts dont une partie est à ajouter à Mapinfo et l'autre à Access. Il y a aussi de quoi faire un essai, dont la procédure est présentée à la fin du document "Exemple de mise en œuvre". Il suffit de suivre cette procédure et ça marche de suite (il faut quand même avoir Mapinfo et Access, et je ne penses pas que la version ai de l'importance, puisque j'ai réussi à les faire fonctionner avec d'autres versions).

    Ils permettent, à partir d'une sélection sous Mapinfo, et en appuyant sur un bouton dans Mapinfo de
    - Ouvrir Access
    - Ouvrir un formulaire prévu à l'avance
    - Filtrer ce formulaire pour n'afficher que les enregistrements ayant le même identifiant que les objets sélectionnés sous Mapinfo.

    Ils permettent aussi d'afficher une sélection sous Mapinfo depuis ce même formulaire Access.

    Dans l'exemple ci-dessus, il est question de bâtiments. Les contours sont dessinés sous Mapinfo et les informations sont stockées sous Access.

    On sélectionne les bâtiments que l'on souhaite sous Mapinfo, on clique sur le bouton Mapinfo et hop, le formulaire Access n'affiche plus que les enregistrements sélectionnés.

    Voilà ce qu'il se passe en arrière plan (d'après ce que j'ai compris)

    Mapinfo cherche et trouve le fichier windows Temp.

    Dans mon cas il se trouve C:\Documents and Settings\Ext_User\Local Settings\Temp

    Il y crée un fichier appelé transfert.txt, ans lequel il recopie l'identifiant commun, sans nom de champ, sans entête de colonne, juste une ligne par objet sélectionné. Ça donne :

    1
    2
    3
    4
    Etc...

    Ensuite, Mapinfo doit ouvrir Access et déclencher la macro ref_mapinfo.

    Je penses que l'action de Mapinfo se termine là et que la suite des opérations se déroule purement sous Access, d'où ma question dans ce forum et mon indication que des non SIG-istes peuvent y répondre.

    La macro ref_mapinfo ne sert qu'a déclencher la formule OpenTextFile() incluse dans le module ref_mapinfo (et oui, le concepteur a eu la malheureuse idée d'appeler la macro et le module du même nom…Mais bon ça fonctionne et tant mieux…)

    Cette fonction à visiblement pour but d'ouvrir et de filtrer le formulaire "batiments" dans l'exemple, en utilisant le contenu du fichier Transfert.txt, localisé notamment grâce au module info_systeme qui doit servir à localiser le fichier Windows temp.

    Alors voilà ce que je souhaite :

    1) Je voudrais bien que le module ref_mapinfo crée une table, toujours la même, en écrivant le contenu du fichier Transfert.txt. Les fois suivantes, le contenu de cette table sera écrasé et remplacé par le nouveau contenu de Transfert.txt.
    Bien sur mon objectif est de conserver ce principe qui permet à Access de trouver tout seul l'endroit où ce fichier est rangé, sinon, j'aurais utilisé une banale commande TransfererTexte en macro convertie en VBA.

    2) Que ce même module ref_mapinfo ouvre un formulaire (en lieu et place de "batiments"), mais ce coup-ci sans filtrage.

    3) Bien entendu le module ref_mapinfo ne devra plus ouvrir ni filtrer le formulaire ("batiments" ou tout autre en lieur et place) comme précédemment.

    Pour ce qui concerne le second point, j'ai bien fait un essai de conversion de macro ouvrir un formulaire qui me donne évidement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function Macro2()
    On Error GoTo Macro2_Err
        DoCmd.OpenForm "batiments", acNormal, "", "", , acNormal
    Macro2_Exit:
        Exit Function
    Macro2_Err:
        MsgBox Error$
        Resume Macro2_Exit
    Mais je ne sais pas comment et où et surtout à la place de quoi l'intégrer au module ref_mapinfo.

    Pour l'instant, la fonction de Access vers Mapinfo n'est pas une priorité parce que si je fais ces modifs, c'est parce que la structure du formulaire proposé ne me convient pas.

    Enfin, je n'utilise que très peu VBA, donc merci de faire comme si je ne comprenais rien et de ne pas balancer du code sans un minimum d'explications…

    Je m'excuse de la longueur du message, mais je penses qu'il est complet et qu'ainsi même ceux qui n'ont jamais manipulé Mapinfo pourront participer.

    D'avance merci.

    PS : Pour ceux qui comme moi, veulent effectuer une liaison avec un identifiant en caractères plutôt qu'en chiffres, il y a quelques modifs à opérer, dont la liste se trouve sur ce lien.

    http://www.forumsig.org/showthread.php?t=3240

    Si jamais le lien ne fonctionne pas directement, voici comment retrouver la discussion :

    Forum SIG - Systèmes d'Information Géographique > Les Logiciels SIG > MapInfo > Assistance Technique > [MapInfo 7.x] MapInfo et formulaire Access 2002

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 014
    Points : 24 567
    Points
    24 567
    Par défaut
    Bonjour,

    je voulais éviter d'avoir un intitulé d'un km de long…
    Il me semble au vu du nombre de réponse que c'est compromis...

    Plus sérieusement !

    Si tu as accés au module ref_mapinfo c'est là que tu trouveras toutes tes réponses. Dans le cas contraire il faut vider la table, recharger le fichier (donc identifier ou il est sur le disque -c'est là le plus complexe) puis réouvrir le formulaire sans la clause where.

    Là j'ai fait court !

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour,
    Citation Envoyé par loufab Voir le message
    Il me semble au vu du nombre de réponse que c'est compromis...
    Est-ce invitation à reposer ma question ?

    Je me doutes que la solution est dans le module ref_mapinfo auquel j'ai pleinement acces et je penses que le code de comprends trois phases :

    La première sert clairement à indiquer où se trouve le fichier Transfert.Txt, en liaison avec le module info_systeme (je penses qu'il y a d'ailleurs une erreur dans le descriptif qui indique une liaison avec ref_systeme) la liaison doit se faire sur la fonction "fReturnTempDir ()".

    Ensuite il doit y avoir une préparation d'un filtre qui, je suppose, doit s'appeler "strOpenArgtxt" où il faut indiquer deux fois le nom de l'identifiant…

    Enfin, on ouvre le formulaire en appliquant le filtre préparé ci-dessus.

    Je penses qu'il me suffirait de faire sauter les lignes consacrées à la création du filtre.

    Ensuite j'utiliserait mon code d'import de la table en conservant la partie qui repère Transfert.Txt.

    Enfin, j'utiliserais un DoCmd.OpenForm pour ouvrir le formulaire de mon choix, mais sans filtrage.

    Reste que je n'ai pas la moindre idée d'où couper le code existant pour conserver la partie qui sert à retrouver le fichier Transfert.Txt et pour indiquer que je souhaite qu'il limporte au lieur d'en faire un filtre

    Encore merci.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bon, depuis j'ai déjà solutionné le problème.

    Je me suis fait expliqué le code contenu dans le module ref_mapinfo.

    Du coup j'ai pu en déduire ce nouveau bloc que je met en lieu et place du contenu du module ref_mapinfo

    Le résultat que je recherchais est le suivant :
    Quand j'appuie sur le bouton MitoAccess de Mapinfo il ce passe
    1) Une table est crée sous Access et reprends le contenu du fichier Transfert.Txt
    2) Un formulaire de mon choix est ouvert.

    Les avantages :
    1) Pas de limitation du nombre d'enregistrements
    2) Après que la table temporaire soit crée, je peu en faire ce que je veux en l'associant à la table source d'Access.

    Ainsi, avec deux trois requêtes, j'ai non plus un formulaire organisé par bâtiments (j'ai un bâtiment et j'en connais les propriétaires) mais par propriétaires (j'ai un propriétaire et je vois en sous formulaire les bâtiments que j'ai sélectionnés) J'ai même rajouté un sous formulaire qui indique les autre bâtiments que ce propriétaire possède !



    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
    20
    21
    22
    23
    'Module permettant d'importer une table depuis le fichier Transfert.Txt disponible dans le fichier temp de Windows
     
    Option Compare Database
    Option Explicit
    Ci dessous, le nom de la fonction que l'on doit reporter dans la macro ref_mapinfo, il est possible de lui donner n'importe quel nom suivi de parenthèses du moment que l'ortographe est la même dans la macro ref_mapinfo
    Public Function OpenTextFile()
            'Utilise la fonction fReturnTempDir() du module info_systeme qui donne le chemin du reper temp
    Dim strTempFile As String
    strTempFile = fReturnTempDir()
            'Concatène ce chemin avec le nom du fichier à récupérer
    strTempFile = strTempFile + "Transfert.txt"
            'Stoppe les avertissements
    DoCmd.SetWarnings False
            'Supprime la table TransfertTemp (ce qui revient à la vider)
    DoCmd.DeleteObject acTable, "TransfertTemp"
            'Importe le contenu du fichier Transfert.Txt dans une table appelée TransfertTemp
    DoCmd.TransferText acImportDelim, "", "TransfertTemp", strTempFile, False, ""
            'Ouvre un formulaire et il n'y a pas d erreur, c est bien un formulaire propriétaire qui est ouvert
    DoCmd.OpenForm "Propriétaires", acNormal, "", "", , acNormal
            'Rétablit les avertissements
    DoCmd.SetWarnings True
     
    End Function

    J'ai découvert que le système Access vers MI ne marchait qu'avec un seul enregistrement à la fois !

    C'est dommage, parce qu'avec mon système, un clic sous Access et j'aurais pu faire apparaître sous Mapinfo les autres bâtiments du propriétaire dont j'avais sélectionné un premier bâtiment !

    Alors là on sort purement du cadre Access. Mais bon, une idée ?

    Encore un grand merci.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour.

    En l'absence de réponse complémentaires, je clôture ce message.

    Merci de votre aide à tous.

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

Discussions similaires

  1. Mise à jour d'une table à partir d'un formulaire en VBA
    Par jloois dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/04/2008, 14h20
  2. import d'une table access ds mysql
    Par nogood1 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/05/2006, 14h12
  3. import d'une table avec HUGEBLOB trop log
    Par tonton62 dans le forum Oracle
    Réponses: 1
    Dernier message: 05/04/2006, 10h21
  4. Réponses: 11
    Dernier message: 17/03/2006, 13h20
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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