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 :

creer une table en vba depuis base frontale sur base dorsale


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut creer une table en vba depuis base frontale sur base dorsale
    Bonjour,

    j'ai ma base Frontale qui a des tables liées a :

    1/Ma base Dorsale
    2/Une autre Base
    3/un fichier csv

    sur ma base Frontale j'execute ce code :

    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
     
    Private Sub Form_Open(Cancel As Integer)
        If Me.Texte0 >= Date Then
            DoCmd.OpenForm "F_Menu", acNormal, , , , acWindowNormal
            DoCmd.Close acForm, "F_Maj"
        End If
    End Sub
     
    Private Sub Form_Timer()
     
        Me.TimerInterval = 0
        If Me.Texte0 < Date Then
            DoCmd.Hourglass True 'affiche le sablier
            DoCmd.SetWarnings False 'supprime tout les messages
            DoCmd.OpenQuery "R00_Creation_T_TEF_EDI_Plageo_IBP"
            DoCmd.OpenQuery "R07_Maj_Matricule2_T_TEF_EDI_AVEC_MEMOS"
            DoCmd.OpenQuery "R08_Creation_T_TEF_EDI_Turbosa"
            DoCmd.OpenQuery "R09_Creation_T_TEF_EDI_ADMIN"
            DoCmd.OpenQuery "R10_cléRib2_T_TEF_EDI_ADMIN"
            DoCmd.RunSQL "Update T_Maj Set T_Maj.[Maj] = Date();"
            DoCmd.SetWarnings True
            DoCmd.Hourglass False
            DoCmd.OpenForm "F_Menu", acNormal, , , , acWindowNormal
            DoCmd.Close acForm, "F_Maj"
        Exit Sub
        Else
            DoCmd.OpenForm "F_Menu", acNormal, , , , acWindowNormal
            DoCmd.Close acForm, "F_Maj"
            Exit Sub
        End If
    End Sub
    ce code (executé par le premier qui l'ouvre 1 fois par jour) me crée 3 Tables sur ma base frontale:

    T_TEF_EDI_Plageo_IBP
    T_TEF_EDI_Turbosa
    T_TEF_EDI_ADMIN

    Or je voudrais creer ces tables sur la base dorsale et assurer les liens pour tous les utilisateurs.

    Est-ce possible ? et que dois-je modifier ?


    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut


    cela semble possible sous un certain nombre de conditions, notamment d'accès à la base dorsale

    L'idée générale étant
    - de créer une table dans la dorsale
    > passer par VBA pour ouvrir la dorsale "en écriture"
    > créer dans la dorsale la table
    > alimenter potentiellement à la création cette table

    - relier cette table dans la frontale
    > utilisation de Docmd.TransferXXX acLink pour cela

    La partie création peut se dérouler via un objet Access.Application par exemple.

    De la lecture à partir de la partie 3 du très complet tutoriel DAO de Tofalu
    http://warin.developpez.com/access/dao/?page=partie_3

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    Merci pour ta reponse,

    En reflechissant a tout cela, sachant que n'importe lesquelles de mes 18 utilisateurs n'ayant acces sur leur poste qu'a leur base frontale, j'ai envie de gerer directement la creation de ces tables dans la base dorsale, lancer de la même façon par la base frontale.

    D'ou la question suivante :

    Est-ce qu'on peut declancher une commande vba sur la base dorsale a partir de la base frontale ?
    et si oui comment ?

    une fois les tables recréés je n'aurais plus qu'a les relier, les autres utilisateurs, en ce connectant, les tables etant a jour, et les tables portant toujours le même nom les liaisons seront toujours presentes ?

    Cordialement

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut


    tu peux manipuler la base avec Dao.Database par exemple

    le petit bout de code de la te donne une idée de l'ouverture de la base externe
    http://access.developpez.com/faq/?page=Access#AccessMdp

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    Merci beaucoup,

    cerise sur le gateau, malgres la destruction et reconstruction des 3 tables, mes liens sur la table frontale vers ces tables ne sont mêmes pas détruites.

    Cordialement

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    j'ai un dernier soucis dû très certainement a la fermeture de ma base dorsale a la fin de la creation des tables et au retour sur la base frontale :

    voilà comment je procede :

    je lance sur ma base frontale :
    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
    Private Sub Form_Open(Cancel As Integer)
        If Me.Texte0 >= Date Then
            DoCmd.OpenForm "F_Menu", acNormal, , , , acWindowNormal
            DoCmd.Close acForm, "F_Maj"
        End If
    End Sub
     
    Private Sub Form_Timer()
     
        Me.TimerInterval = 0
        If Me.Texte0 < Date Then
            DoCmd.Hourglass True 'affiche le sablier
            DoCmd.SetWarnings False 'supprime tout les messages
     
            Call fOpenRemoteForm("V:\vvv\xxx\yyy\zzz\MaBase_princip.mdb", "F_Maj")
     
            DoCmd.SetWarnings True
            DoCmd.Hourglass False
            DoCmd.OpenForm "F_Menu", acNormal, , , , acWindowNormal
            DoCmd.Close acForm, "F_Maj"
        Exit Sub
        Else
            DoCmd.OpenForm "F_Menu", acNormal, , , , acWindowNormal
            DoCmd.Close acForm, "F_Maj"
            Exit Sub
        End If
    End Sub
    ce qui lance donc sur ma base dorsale ceci :
    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
    Private Sub Form_Open(Cancel As Integer)
        If Me.Texte0 >= Date Then
            DoCmd.Close acForm, "F_Maj"
            DoCmd.Quit
        End If
    End Sub
     
    Private Sub Form_Timer()
     
        Me.TimerInterval = 0
        If Me.Texte0 < Date Then
            DoCmd.Hourglass True 'affiche le sablier
            DoCmd.SetWarnings False 'supprime tout les messages
            DoCmd.OpenQuery "R00_Creation_table1"
            DoCmd.OpenQuery "R07_Maj_Matricule2_table2"
            DoCmd.OpenQuery "R08_Creation_table3"
            DoCmd.OpenQuery "R09_Creation_table4"
            DoCmd.OpenQuery "R10_cléRib2_table4"
            DoCmd.RunSQL "Update T_Maj Set T_Maj.[Maj] = Date();"
            DoCmd.SetWarnings True
            DoCmd.Hourglass False
            DoCmd.Close acForm, "F_Maj"
            DoCmd.Quit
        Else
            DoCmd.Close acForm, "F_Maj"
            DoCmd.Quit
        End If
    End Sub
    Ma base dorsale ne se ferme pas et j'ai le message suivant:
    Runtime error
    Error#: 91
    Variable objet ou variable de bloc With non définie

    est-ce que vous pouvez me dire comment resoudre le probleme ?

    cordialement

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut
    Le mieux, ca reste de trouver à quelle ligne le code semble "planter".

    Parcours le code en mode pas à pas, ca t'indiquera à quel niveau on doit faire évoluer le code pour pas qu'il bloque le reste du processus

  8. #8
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    le probleme c'est que en mode pas a pas je ne sais pas faire du pas a pas sur la deuxieme bases et c'est au moment de la fermeture de celle-ci que j'ai le message d'erreur.

    Si j'execute le formulaire de la base dorsale tout seul il fonctionne !

    Cordialement

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir à tous,

    le problème semble provenir de la fonction fOpenRemoteForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With objAccess
    ...
                Do While Len(.CurrentDb.Name) > 0
                    DoEvents
                Loop
    ....
    D'après ces lignes, la fonction boucle et attend la fermeture de la base dorsale, mais si on ferme l'instance Access dans laquelle la dorsale a été ouverte alors il y a erreur puisque la variable objAccess n'est plus référencée. Le mieux serait d'ouvrir le formulaire de la dorsale en mode dialog ou encore de conditionner la sortie de la boucle d'attente à la fermeture du formulaire appelé.

  10. #10
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    Merci,

    j'ai compris

    j'ai enlever la gestion des autres erreurs (qui est sans objet pour le resultat desiré) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Case Else:
                MsgBox "Error#: " & Err.Number & vbCrLf & Err.Description, _
                        vbCritical + vbOKOnly, "Runtime error"
    du coup la base dorsale se ferme, je n'ai pas de message d'erreur et c'est pas propre mais ça marche !

    Cordialement

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2015, 16h44
  2. [AC-2013] Creer une table depuis un tableau Vba
    Par lukebalthazar dans le forum VBA Access
    Réponses: 17
    Dernier message: 29/06/2014, 22h03
  3. creer une table dans une base distante
    Par travail2009 dans le forum Connexions aux bases de données
    Réponses: 1
    Dernier message: 10/12/2009, 12h21
  4. Créer une table en VBA ?
    Par nicburger dans le forum Access
    Réponses: 11
    Dernier message: 16/02/2005, 16h15
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 18h24

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