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

  1. #1
    Membre éclairé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2004
    Messages : 677
    Points : 802
    Points
    802

    Par défaut Importation de formulaire d'une autre base

    Bonjour à tous,

    Je suis devant un problème qui me dépasse un peu: Je cherche à enregistrer les propriétés des objets et en particulier des formulaires d'une base B dans une base A.

    Bien que je dispose dans ma procédure d'un objet Database portant sur la base B, je ne parviens pas à parcourir la propriété AllForms (Forms portant sur les formulaires ouverts).

    Je me suis donc décidé à importer le formulaire (enregistré dans une table de la base A) et analyser ses propriétés sur place (base A) et de les enregistrer avant de le supprimer .

    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
    Sub InitFormsProperties(dbs As Database, wrkDefault As Workspace, cleBase As Long, DistBase As String)
        Dim rst As Recordset, leForm As Form, x As Long, y As Long, strSQL As String
        
        On Error GoTo ErrMan
        Set rst = CurrentDb.OpenRecordset("SELECT [Nom], FRMUnik FROM T_Forms;")
        
        '''Lecture ds rst des formulaires à traiter
        With rst
            Do While .EOF = 0
                leDoc = ![Nom]
                
                DoCmd.TransferDatabase acImport, "Microsoft Access", DistBase, acForm, leDoc, "TMP"
                
                Set leForm = Forms("TMP")   ''''Çà plante ici :(
                With leForm
                    For x = 0 To leForm.Properties.Count - 1
                        strSQL = "INSERT INTO T_FormsProperties (FRMUnik, TBaseUnik, PRP_Name, PRP_Value,PRP_Value_Cible, IsGraphic) " & _
                            "SELECT " & !FRMUnik & ", " & cleBase & ", " & Chr(34) & ![Nom] & Chr(34) & ", " & Chr(34) & leForm.Properties(x).Name & Chr(34) & ", " & Chr(34) & leForm.Properties(x).Value & Chr(34) & ", " & Chr(34) & leForm.Properties(x).Value & Chr(34) & ", -1 ;"
                        Call ExecSQL(strSQL)
    Suivant:
                    Next
                End With
                DoCmd.DeleteObject acForm, "TMP"
                .MoveNext
            Loop
            .Close
        End With
        Set rst = Nothing
        Set leForm = Nothing
    Fin:
        Exit Sub
    ErrMan:
        DoCmd.SetWarnings True
    '    If Err = 3219 Then Resume Suivant
    '    If Err = 3267 Then Resume Suivant
    '    If Err = 3251 Then Resume Suivant
    '    If Err = 3075 Then Resume Suivant
    '    MsgBox (Error(Err))
        Resume
    End Sub
    Le code de l'erreur est 2450 et son message:
    Microsoft Access ne trouve pas le formulaire «*TMP*» auquel il est fait référence.
    Notez les espaces dans «*TMP*»

    Pourtant le formulaire importé se nomme bien "TMP" (sans esspaces)

    Avez-vous une idée ???
    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    13 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 13 456
    Points : 20 436
    Points
    20 436

    Par défaut

    Bonjour.

    Forms te donne les formulaires actuellement ouverts et je pense que ton TMP n'est pas ouvert, il est seulement présent.
    Il faudrait à mon avis utiliser AllForms de l'objet CurrentProject.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éclairé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2004
    Messages : 677
    Points : 802
    Points
    802

    Par défaut Importation de formulaire d'une autre base

    Bonjour marot_r !

    Effectivement! Et je m'en suis d'ailleurs rendu compte en consultant un de tes billets ici.

    D'autant plus que ma syntaxe était mauvaise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set leForm = Forms("TMP")
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                For Each obj In CurrentProject.AllForms
                    If obj.Name = "TMP" Then
                        DoCmd.OpenForm obj.Name, acDesign, , , , acHidden
                        Set leForm = Forms(obj.Name)
                        Exit For
                    End If
                Next obj
    Du coup je peux parcourir les contrôles et enregistrer leurs propriétés.

    Merci encore (deux fois !!!) et bonne journée!
    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...

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

Discussions similaires

  1. accéder à un formulaire d'une autre base
    Par anikeh dans le forum Access
    Réponses: 11
    Dernier message: 18/10/2006, 15h44
  2. Réponses: 2
    Dernier message: 11/09/2006, 10h17
  3. Réponses: 3
    Dernier message: 23/08/2006, 16h27
  4. Réponses: 8
    Dernier message: 20/07/2006, 14h08
  5. Copier un formulaire dans une autre base
    Par Bercud dans le forum IHM
    Réponses: 2
    Dernier message: 08/06/2006, 12h15

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