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 :

Utiliser "Split" [dans un RowSource] [pour créer une table temporaire à champ unique]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 127
    Points
    127
    Par défaut Utiliser "Split" [dans un RowSource] [pour créer une table temporaire à champ unique]
    Bonjour, et bonne année à tous !

    De retour au bureau, je me vois confronté à de nouveaux problèmes.
    Afin de pouvoir enrichir ma base de données, je souhaite pouvoir enregistrer de nouveaux documents. Pour certains documents, un champ spécifique (Spécialité) peut avoir plusieurs valeurs. Afin de permettre d'ajouter ces documents, mais aussi d'effectuer une recherche sur une seule spécialité (en n'affichant pas les autres dans la liste de résultats) je me suis créé deux tables. L'une ou le document est scindé, pour chaque spécialité, dans un enregistrement différent. L'autre contient une chaine listant les spécialités ainsi qu'un numéro de référence unique.
    Afin de pouvoir supprimer une spécialité, j'aimerai pouvoir actualiser la source d'une liste déroulante en fonction de cette chaîne, passée dans un label. Je pensais pour cela utiliser "Split", mais je dois avoir du mal à m'en servir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim SQL() As String
    SQL = Split("nomlabel.value",",")
    cbomaliste.RowSource = SQL()
    Je pense que j'ai encore ce problème de & " ' _ mal placés, quelles que soit les combinaisons que j'ai essayé. (pas encore toute, mais ça va se faire)

    Je vais de ce pas étudier la création de table temporaire, histoire de voir si je peux passer par là. (ce qui me servira en plus par la suite)
    Quelqu'un aurait une idées, un début de piste ?

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

    La fonction Split renvoie un tableau, tu ne peux donc pas remplir une chaine de cette manière.

    Voici un petit exemple (attention, pas contrôlé car tapé à la main)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim TabString() as String
    TabString() = Split(me.nomlabel.value,",")
    Ensuite il faut parcourir ton tableau pour faire une chaine du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim strChaine As String
    Dim i As Integer
    For i = 0 To UBound(TabString())
        strChaine = TabString(i) & ";" & strChaine
    Next i
    Et tu utilises cette chaine pour alimenter la RowSource.

    Starec

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    De petites modification sont nécessaires pour que le code de Starec marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim TabString() as String
    TabString() = Split(me.nomlabel.value,",")
    A remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim TabString as Variant
    TabString = Split(me.nomlabel.value,",")
    For i = 0 To UBound(TabString())
    A remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For i = 0 To UBound(TabString)
    Le reste est correcte.
    Amicalement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci DMboup

    Comme je te l'ai dit je l'ai tapé à la mimine, mais l'idée est là.

    Starec

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 127
    Points
    127
    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
    Private Sub Form_Load()
     
    cboCatégorie.RowSource = "SELECT [INDEXC].[Catégorie] FROM INDEXC ;"
    cboSCatégorie.RowSource = ""
    cboSpécialité.RowSource = ""
    lblSpécialité.Caption = "Salut, ami des nains, je suis ton Dieu, et tu dois obéir"
    SpeDoc
    End Sub
    Private Sub SpeDoc()
    Dim TabString() As String
    Dim strChaine As String
    Dim i As Integer
     
    TabString() = Split(Me.lblSpécialité.Caption, ",")
    For i = 0 To UBound(TabString())
       strChaine = TabString(i) & ";" & strChaine
     
    Next i
    cboSpé.RowSource = strChaine
     
    cboSpé.Requery
    End Sub
    Cette essai (ainsi que ceux en utilisant cboSpé;rowSource = "strChaine" ; = " & strChaine & ") ne sont pas concluants.
    Dans le cas présent, j'ai un beau message me disant que "la source d'enregistrement ' et tu dois obéir;je suis ton Dieu; ami des nains;Salut;' spécifié dans ce formulaire ou état n'existe pas."
    A première vue, un problème de & " ' etc, comme d'hab... ou peut-être le fait d'agir sur le form_Load. Je go test !

    [Edit : testé sans les "()" du Tabstring, sans changement visible sur le résultat. (même erreur)
    Appliqué à un événement AfterUpdate, le problème persiste.]

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Starec Voir le message
    Comme je te l'ai dit je l'ai tapé à la mimine
    Et le code marche très bien même sans mes remarques.
    PS : Pourtant j'ai eu un problème en déclarant un string la variable qui recoit le tableau.
    Amicalement

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 127
    Points
    127
    Par défaut
    N'arrivant pas à utiliser la String (mais je chercherai demain), je me suis lancé sur la création d'une table à champ unique avec entrée des diverses spécialités par l'utilisation de listes déroulantes et d'un bouton enclanchant un run SQL "INSERT INTO".
    Deux questions s'en suivent :
    ** est-il possible de ne pas avoir le message "vous allez ajouter une ligne...." ?
    ** Comment créer la phrase "ami des nains, ..." en séparant chaque spécialité ("ami des nains" ici) par une virgule.

    Pour cette question je devrais y arriver seul en cherchant demain matin. La première j'en doute. (j'avais déjà cherché, mais dans cette situation c'est bien plus génant, donc il me faut trouver)

    Merci en tout cas, pour votre aide.
    Au programme demain : utiliser la chaine dans un rowsource (ce sera plus pratique), et récupérer la valeur d'un enregistrement/champ précis pour alimenter un label.
    A demain :!)

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

    Petit complément, as-tu bien mis la propriété Origine Source de ta liste déroulante à Liste Valeurs ?

    C'est ce qu'il faut faire si tu mets en source une chaine.

    Starec

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Starec Voir le message
    Bonjour

    Petit complément, as-tu bien mis la propriété Origine Source de ta liste déroulante à Liste Valeurs ?

    C'est ce qu'il faut faire si tu mets en source une chaine.

    Starec
    Non, et c'est vrai que ça change pas mal de choses. Je suis bon à pendre, j'avais vérifié en plus... mais sans penser à corriger.
    Bon bah, la question principale étant résolu, je poserai les questions annexes dans un autre thread.
    Merci bien Starec !

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

Discussions similaires

  1. problème pour créer une table
    Par zyriuse dans le forum Installation
    Réponses: 11
    Dernier message: 16/11/2007, 11h26
  2. Impossible de créer une table temporaire dans une fonction
    Par bossun dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2007, 10h03
  3. [9i] Créer une table temporaire pour correspondance
    Par gege2061 dans le forum Administration
    Réponses: 1
    Dernier message: 16/01/2007, 13h11

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