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 :

demande info sur fonction Application.SaveAsText [AC-2010]


Sujet :

VBA Access

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 838
    Points : 44 138
    Points
    44 138
    Par défaut demande info sur fonction Application.SaveAsText
    Bonsoir,

    J'aurais souhaité savoir si il était possible d'utiliser la fonction Application.saveAsText avec une base externe.

    J'ai l'erreur :

    Aucun objet du nom et type spécifiés n'existe dans la base de données active
    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim db as database
    set db=DBEngine.OpenDatabase(nom_de_la_base)
    set c=db.containers("Forms")
    for each d in c.Documents
      Application.SaveAsText, acForm, d.Name, chemin
    next d
    Je précise que l'accès à la base est valide (je peux afficher le nom des formulaires qu'elle contient)

  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 075
    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 075
    Points : 24 710
    Points
    24 710
    Par défaut
    Bonjour,

    Application "représente" l'application courante, celle qui contient ton code mais pas les formulaires.

    Il faut ouvrir une nouvelle instance de l'application sur le fichier contenant les formulaires. Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim app As Access.Application
    Set app = New Access.Application
    app.OpenCurrentDatabase "C:\appli_avec_formulaire.accdb"
    app....
    Tout ce qui est sous app s'appliquera à l'application "distante".

    Cordialement,

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 838
    Points : 44 138
    Points
    44 138
    Par défaut
    Merci pour ton retour, ça je l'ai compris en recherchant des infos. Je reviens quand j'ai avancé (positivement ou négativement). J'arrive à ouvrir une base externe avec Application (ce que je n'avais jamais fait), je n'arrive pas pour le moment à utiliser saveastext, j’avoue que je cafouille avec les workspaces, dbengine, etc... et donc je ne sais pas si c'est mon code qui est faux ou si la fonction saveastext je ne peux l'utiliser que depuis la base courante (fonction non documentée)

    Je vous tiens au courant.

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    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 075
    Points : 24 710
    Points
    24 710
    Par défaut
    La commande SaveAsText n'est pas documentée car c'est une méthode cachée. On l'utilise pour créer des fichiers compatible VB.

    Elle fonctionne parfaitement depuis une base distante du moment que tu utilises les bons objets.
    Voici un exemple d'export d'objets.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Function fSaveAsText()
    Dim appAccess  As Access.Application
    Dim db         As DAO.Database
    Dim obj        As Object
    Dim i          As Integer
    Dim chemin     As String
     
        chemin = "d:\"
        Set appAccess = New Access.Application
        appAccess.OpenCurrentDatabase "C:\fichier.accdb"
     
        Set db = appAccess.CurrentDb
     
        With appAccess
     
            For Each obj In db.Containers("Forms").Documents
                .SaveAsText acForm, obj.Name, chemin & obj.Name & ".frm"
            Next
     
            For Each obj In db.Containers("Reports").Documents
                .SaveAsText acReport, obj.Name, chemin & obj.Name & ".rpt"
            Next
     
            For Each obj In db.Containers("Modules").Documents
                .SaveAsText acModule, obj.Name, chemin & obj.Name & ".bas"
            Next
     
            For Each obj In db.Containers("Scripts").Documents
                .SaveAsText acMacro, obj.Name, chemin & obj.Name & ".mac"
            Next
     
            For i = 0 To db.QueryDefs.Count - 1
                If Not db.QueryDefs(i).Name Like "~*" Then
                    .SaveAsText acQuery, db.QueryDefs(i).Name, chemin & db.QueryDefs(i).Name & ".qry"
                End If
            Next i
        End With
     
        db.Close
        appAccess.CloseCurrentDatabase
        Set db = Nothing
        Set appAccess = Nothing
    End Function
    Quel but poursuis-tu ?

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 838
    Points : 44 138
    Points
    44 138
    Par défaut
    Ca y est je m'en suis sorti. Notamment avec ceci :

    http://ahisoft.jp/subt/mdbexporttool.html

    C'est en japonais mais la traduction google des commentaires donne un résultat compréhensible.

    C'est bien foutu.

    Tu utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set db = appAccess.CurrentDb
    dans le code le gars utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set db = DBEngine.Workspaces(0).OpenDatabase(inputDbName)
    Je pense que ça revient au même, mais j'ai pas testé.

    J'ai galéré un moment car si le code VBA de la base externe est protégé, cela génère une erreur.

    Merci de ton retour.

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    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 075
    Points : 24 710
    Points
    24 710
    Par défaut
    Le code que je t'ai fourni ne fonctionne ?

    Protégée, si tu parles de accde c'est normal, si c'est protégé par mot de passe il y a des options à la commande OpenCurrentDatabase.

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 838
    Points : 44 138
    Points
    44 138
    Par défaut
    Le code que je t'ai fourni ne fonctionne ?
    Je présumes que si mais comme entretemps j'avais trouvé et testé le lien ...

    Protégée, si tu parles de accde c'est normal, si c'est protégé par mot de passe il y a des options à la commande OpenCurrentDatabase.
    Non, en cas de protection de code VBA, pas le mot de passe d'ouverture de la base. (propriété dans VBA j'ai pas le nomenclature en tête et n'ai pas access sous le coude là.). En supprimant le mot de passe VBA, ça fonctionne. Et je pense pas qu'on puisse passer le code de protection VBA à OpenCurrentDatabase

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 075
    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 075
    Points : 24 710
    Points
    24 710
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Je présumes que si mais comme entretemps j'avais trouvé et testé le lien ...
    Je m'étonnais car c'est quasiment le même, il n'y a pas 50 manières de faire ça.

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

Discussions similaires

  1. récupérer des infos sur une application en cours d'exécution
    Par r0d dans le forum Administration système
    Réponses: 5
    Dernier message: 31/01/2008, 16h59
  2. Info sur fonction rechercheV
    Par le_gueux90 dans le forum Excel
    Réponses: 2
    Dernier message: 16/10/2007, 16h43
  3. Demande infos sur les procédures stockées
    Par VILPELLET dans le forum SQL
    Réponses: 3
    Dernier message: 15/10/2007, 15h27
  4. Demande info sur la connexion via psql
    Par RTDanjou dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 30/03/2007, 18h40
  5. Réponses: 3
    Dernier message: 11/01/2006, 15h22

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