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 :

Tabledef et liste déroulante [AC-2013]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    IG2I
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IG2I

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut Tabledef et liste déroulante
    Bonjour,

    Je souhaite créer une table via VBA pour cela j'utilise tabledef j'arrive à créer n'importe quel champs sauf une liste déroulante.

    http://www.developpez.net/forums/d11...te-deroulante/

    Je suis tombé sur ce sujet mais lorsque j'essaye d'appliquer la solution, il me dit propriété non trouvé pour : Set oPrp = .Properties("DisplayControl")

    J'essaye de trouver de la doc sur ça mais sans réussite

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Par défaut
    Bonjour,

    STP montre nous plus du code ou tu as ce message d'erreur.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    IG2I
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IG2I

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    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
    Dim sql, temp As String
    Dim newTable As TableDef
    Dim DB As Database
    Dim f As Field
    Dim ind As dao.Index
    Dim oPrp As dao.Property
     
     
    Set DB = CurrentDb
    Set newTable = DB.CreateTableDef(addTypeName.Value)
     
    Set f = newTable.CreateField("ID", dbLong)
    f.Attributes = dbAutoIncrField + dbFixedField
    newTable.Fields.Append f
     
    temp = addTypeName.Value & "Manufacture"
    sql = "select * ManufactureID, ManufactureName FROM Manufacture"
     
    Set f = newTable.CreateField(temp, dbInteger)
    newTable.Fields.Append f
     
        With f
            Set oPrp = .Properties("DisplayControl")
                .Properties.Append .Properties("RowSourceType") = "Table/Query"
                .Properties.Append .Properties("RowSource") = SQL
                .Properties.Append .Properties("BoundColumn") = 1
                .Properties.Append .Properties("ColumnCount") = 2
                .Properties.Append .Properties("ListWidths") = "0 cm; 5cm"
                .Properties.Append .Properties("ListWidth") = "8 cm"
            End If
        End With
     
     
    For Each Ctrl In Me.Controls
        If Not InStr(Ctrl.Name, "txt") = 0 Then
            If Ctrl.Visible = True Then
                temp = addTypeName.Value & Ctrl.Value
                Set f = newTable.CreateField(temp, dbText, 50)
                newTable.Fields.Append f
            End If
        End If
    Next

    Ce que j'essaye de faire, c'est un formulaire pour créer une table, il peut ajouter des text box pour un champ normal ou des liste déroulante (pas encore fait dans la boucle)
    Mais pour chaque table il y a deux champs obligatoire que je cré en dehors de la boucle et c'est pour la liste déroulante que je bloque

  4. #4
    Membre émérite
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Par défaut
    Bonjour

    Premièrement, tu fais référence à la propriété DisplayControl du champ alors qu'elle n'existe pas encore : il faut la créer.

    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oPrp = .Properties("DisplayControl")
    c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oPrp = .CreateProperties("DisplayControl")
    qu'il faut écrire.

    Deuxièmement tu dois définir la valeur que tu places dans cette propriété :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oPrp = f.CreateProperty("DisplayControl", dbInteger, acListBox)
    Et troisièmement, on ne peut pas créer de propriété lors de la création de la table (c'est comme ça!) . Donc tu dois terminer l'Append de ton champ, terminer l'Append de ta table, puis refaire référence au deux pour pouvoir créer la propriété que tu désires.

    Après la ligne Append de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        DB.TableDefs.Append newTable
    place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Set newTable = DB.TableDefs(addTypeName.Value)
        temp = addTypeName.Value & "Manufacture"
     
        With newTable(temp)
            .Properties.Append .CreateProperty("DisplayControl", dbInteger, acListBox)
            .Properties.Append .CreateProperty("RowSourceType", dbText, "Table/Query")
            .Properties.Append .CreateProperty("RowSource", dbText, sql)
            ' Etc.
        End With
    Et faire de même avec tes autres propriétés.

    Ton sql est faux, tu dois enlever l'étoile. Tu devrais aussi y ajouter une clause ORDER BY.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    IG2I
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IG2I

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Merci pour cette réponse. J'arrive maintenant a créer la tables avec des listes déroulantes. Mais je bloque sur une autre problème, je veux mettre une relation sur ce champs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    temp = addTypeName.Value & "Manufacture"
    Set rel = CurrentDb.CreateRelation(addTypeName & "rel", addTypeName, "Manufacture")
    rel.Attributes = dbRelationUpdateCascade
    Set f = rel.Fields(temp)
    f.ForeignName = "ManufactureID"
     
    rel.Fields.Append f
    CurrentDb.Relations.Append rel
    Je souhaire avoir une relation entre le champs nouvelletableManufacture de la nouvelle et le champs manufactureID de la table Manufacture
    Le code bloque au niveau du Set f = rel.Fields(temp) avec comme erreur que l'objet est introuvable pourtant d'après l'aide DAO.Relation.Fields existe

  6. #6
    Membre émérite
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Par défaut
    Bonjour

    Je ne suis pas certain, mais tu devrais faire un essai en mettant la CurrentDb en variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim db as database
    set db=Currentdb

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Par défaut
    Bonjour Flyze,
    Je te propose d'aller jeter un oeil sur cette discussion vieille de 2 mois seulement tu auras sûrement des réponses. Je pense que la ligne où tu as le problème devrait ressembler plutôt à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set f = rel.CreateField(temp)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    IG2I
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IG2I

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Merci pour ces réponses j'ai pu résoudre le problème

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

Discussions similaires

  1. valeur d'une liste déroulante
    Par leeloo076 dans le forum ASP
    Réponses: 7
    Dernier message: 15/04/2004, 16h11
  2. liste déroulante
    Par leeloo076 dans le forum ASP
    Réponses: 12
    Dernier message: 23/03/2004, 10h35
  3. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01
  4. liste déroulante en ASP vbscript
    Par leeloo076 dans le forum ASP
    Réponses: 9
    Dernier message: 17/03/2004, 16h42
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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