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

Access Discussion :

Modifier format et légende du champ d'une table en vba


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut Modifier format et légende du champ d'une table en vba
    Bonjour,

    J'ai besoin de créer une table à la volée dans laquelle je défini les valeurs des propriétés "format" et "caption" des champs insérés. Ceci pour une utilisation dans un graphique.

    Voici le code que j'utilise :
    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
    Function CreerTable()
        Dim bds As Database
        Dim dft As TableDef
        Dim chp As Field
        Dim NomTb As String
     
        NomTb = "TEff" & Environ("COMPUTERNAME")
        Set bds = CurrentDb
        bds.TableDefs.Refresh
        For Each dft In bds.TableDefs
            If dft.Name = NomTb Then
                bds.TableDefs.Delete dft.Name
            End If
        Next dft
        Set dft = bds.CreateTableDef(NomTb)
        Set chp = dft.CreateField("Nom du contact", dbText, 40)
        dft.Fields.Append chp
        Set chp = dft.CreateField("Jour", dbDate)
        dft.Fields.Append chp
        Set chp = dft.CreateField("Val1", dbByte)
        dft.Fields.Append chp
        dft.Fields.Refresh
        bds.TableDefs.Append dft
        bds.TableDefs.Refresh
        Set bds = Nothing
        DoCmd.OpenTable NomTb, acViewDesign
        CurrentDb.TableDefs(NomTb)("Val1").Properties("caption").Value = "Opératrice"
        CurrentDb.TableDefs(NomTb)("Jour").Properties("format").Value = "jj/mm/aaaa"
        DoCmd.Close acTable, NomTb, acSaveYes
    End Function
    J'obtiens une erreur au moment d'affecter la valeur "Opératrice" à la légende du champ "Val1".

    Message d'erreur : Erreur 3270, propriété non trouvée.

    Par contre, si après avoir créé la table (sans chercher à modifier la légende) je vais manuellement affecter une légende et qu'ensuite j'applique le code sur l'erreur était apparue, tout se passe correctement. C'est comme si il fallait initialiser la propriété avant de la modifier.

    Quelqu'un pourrait-il me conseiller?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut

    Il ne manquerait pas quelque chose derriere le dbByte ?

    Starec

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    J'y avait pensé également mais l'élément suplémentaire est la taille (en octets) du champ dans le cas où il est de type texte.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Je sais, j'ai déjà utilisé cela, mais avec dbLong,20 et cela fonctionne essaye. Je ne peux tester pour l'instant

    Starec

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Je ne vois pas ce que cela va m'apporter. Je veux un champ date et un champ octet. Même si je modifie le type des champs cela ne me permet toujours pas de modifier les propriétés "caption" et "format". Hors c'est là-dessus que je bloque.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Je crois avoir compris

    1 - Créer ta table avec seulement ton premier champ
    2 - Ensuite ajoute tes autres champs

    Il me semble avoir dut faire une astuce de ce genre

    Starec

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    J'ai fait ce que tu proposes :

    1 - Créer la table avec juste le premier champ => OK
    2 - Ajouter les autre champs => OK
    3 - Modifier la propriété "caption" de l'un d'entre eux => erreur 3270

    J'ai cherché du côté de CreateProperty pour initialiser la propriété mais d'après ce que j'ai compris c'est à utiliser pour définir des propriétés personnelles.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    Tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CurrentDb.TableDefs(NomTb)("Val1").Properties("caption").Value = "Opératrice"
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CurrentDb.TableDegs(NomTb).Field("Val1").name = "Opératrice"
    Starec

  9. #9
    Invité
    Invité(e)
    Par défaut
    Re

    De plus ne met pas ta table en mode Design, ne l'ouvre pas

    Starec

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Effectivement, sans passer en mode design la mise à jour se fait. Mais c'est le nom du champ qui change et pas sa légende (le texte à mettre ne se prète pas pour être utilisé comme un nom de champ). De plus j'ai besoin de modifier également le format.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re

    Qu'entends tu par légende , il n'y a pas cette propriété pour un champ, c'est le nom, le type.

    Starec

  12. #12
    Invité
    Invité(e)
    Par défaut
    Re
    OK
    Je pense que cela vient de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CurrentDb.TableDefs(NomTb)("Val1").Properties("caption").Value = "Opératrice"
    tu ne rapelle pas le champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CurrentDb.TableDefs(NomTb).fields("Val1").Properties("caption").Value = "Opératrice"
    Pas testé essaye

    Starec

  13. #13
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Excuse moi, c'est la francisation de la propriété "caption".

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Toujours la même chose : propriété non trouvée

    Je ne pense pas que ce soit un problème de syntaxe puisqu'avec la même syntaxe, si j'initialise manuellement dans la table la propriété caption en lui attribuant une valeur, la modification est prise en compte.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Re

    Désolé, là je coince, c'est quoi que tu veux mettre dans ta table avec "operatrice" et "jj/mm/aa".

    Starec

  16. #16
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Le but de la table est de contenir les données d'un graphique qui présente les effectifs par jour et par fonction d'une entreprise.

    Pour obtenir ces données, je suis obligé d'appliquer un algo que je ne peut pas remplacer par une requête.

    Le graphique, inclu dans un formulaire utilise alors cette table comme source de données.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Re

    Oui mais Operatrice et jj/mm/aa se sont quoi ?

    Starec

  18. #18
    Invité
    Invité(e)
    Par défaut
    Re

    Trouvé dans l'aide
    Objet Property


    Un objet Property représente une caractéristique dynamique d'un objet ADO défini par le fournisseur.







    Remarques

    Les objets ADO ont deux types de propriétés : intégrées et dynamiques.

    Les propriétés intégrées sont implémentées dans ADO et immédiatement disponibles pour tout nouvel objet, à l'aide de la syntaxe MyObject.Property. Elles n'apparaissent pas en tant qu'objets Property dans la collection Properties d'un objet et vous pouvez donc modifier leurs valeurs, mais pas leurs caractéristiques.

    Les propriétés dynamiques sont définies par le fournisseur de données sous-jacentes et apparaissent dans la collection Properties de l'objet ADO approprié. Par exemple, une propriété spécifique au fournisseur peut indiquer si un objet Recordset prend en charge les transactions ou les mises à jour. Ces propriétés supplémentaires apparaissent en tant qu'objets Property dans la collection Properties de cet objet Recordset. Les propriétés dynamiques peuvent uniquement être référencées via la collection, en utilisant la syntaxe MyObject.Properties(0) ou MyObject.Properties("Name").

    Aucun de ces deux types de propriétés ne peut être supprimé.

    Un objet Property dynamique comporte quatre propriétés intégrées qui lui sont propres, à savoir :

    La propriété Name est une chaîne identifiant la propriété.


    La propriété Type est un entier spécifiant le type de donnée de la propriété.


    La propriété Value est un variant contenant la valeur de la propriété.


    La propriété Attributes est une valeur de type Long indiquant les caractéristiques de propriétés spécifiques au fournisseur

    Ensuite je coince désolé

    Starec

  19. #19
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Merci pour tes recherches mais je ne vois pas non plus ce que je peux en tirer.

    Opératrice c'est une des fonctions (au même titre que je pourrais avoir technicien, secrétaire...).

    jj/mm/aaaa est le format auquel je veux que la date soit stocké dans la base.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Re

    J'étais un peu perdu dans le post précédent

    Si opératrice est une fonction c'est juste une donnée du champ, donc ce n'est pas une prorriété, pour la date je pense qu'il faut chercher du coté des attributs, ou du type (l'aide ne marche pas sur mon micro pour DAO)

    Starec

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/06/2008, 19h16
  2. Modifier les valeurs de certains champs d'une table
    Par Xorbane dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/10/2007, 22h10
  3. Modifier le type d'un champ d'une table
    Par atb dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/02/2007, 16h37
  4. Réponses: 4
    Dernier message: 07/08/2006, 16h19
  5. Réponses: 7
    Dernier message: 26/05/2006, 19h45

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