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 :

[access 2003]champs multi-valués


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut [access 2003]champs multi-valués
    Bonsoir à tous

    de nouveau moi pour encore un gros soucis.

    Voilà, je suis toujours bloquée sur ces groupes de plan de compte.

    Je vous explique le topo :

    Table compte (pour ceux qui ont suivi le projet vous devriez vous en rappeler)

    nom_compe ;n°compte ; selectionner (case à cocher)
    compte1.....;623.........;[X]
    compte2.....;624.........;[X]
    compte3.....;625.........;[ ]

    Puis table Groupe
    id_groupe ;nom_groupe; liste_compte ==>
    1............;groupe1..... ;623 ; 624

    enfin table groupe_details
    id_groupe ; compte
    1............;623
    1............;624

    dans le champs liste_compte de la table groupe, c'est un champs multivalué, il se rempli en fonction de compte que je coche ou non...

    Comment faire ?

    J'ai regardé les tutos mais je n'ai pas trouvé de solution

    mercis

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bon je ne connais pas trop les champs multivalués mais je vais essayer quand même.

    Donc ne prend pas ce que je vais dire comme la bonne parole mais comme une probable connerie

    bon si j'ai bien compris tu affectes à ton champs liste_compte la valeur des tous les comptes sélectionnés, c est bien ça ?

    J'aurais peut être une idée mais bon ... pas sûr ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim rst As Recordset
    Dim strList As String
     
    'recherche des comptes cochés
    Set rst = CurrentDb.OpenRecordset("SELECT n°compte FROM compte WHERE selectionner = 1;")
     
    'ensuite création d'une chaine comprenant ta liste
    strList = ""
    Do While rst.EOF
        strList = strList & rst!n°compte & ";"
    Loop
     
    Set rst = Nothing

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Il ne faut pas négliger le numéro de groupe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    dim sql as string
    'tu selectionne tous groupes et les comptes selectionnes de chaque groupe
    sql="Select groupe_details.id_groupe, groupe_details.N°compte "
    sql=sql &"from compte inner join groupe_details on (compte.N°compte = groupe.N°compte) "
    sql=sql &"where compte.selectionner = 1"
     
    set rs = currentdb.openrecordset(sql)
    while not rs.eof
          'tu met a jour pour chaque groupe ta variable liste_compte
          sql="update groupe set liste_compte = liste_compte &'" &rs.fields(1) &";'"
          sql= sql &" where id_groupe = " &rs.fields(0)
          docmd.runsql(sql)
    wend
    je pense que cela devrait t'aider

  4. #4
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    La je suis rentrée chez moi... Mais la procédure bug encore plus avec access 2007 est ce normal?

  5. #5
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par Galladan Voir le message
    Bon je ne connais pas trop les champs multivalués mais je vais essayer quand même.

    Donc ne prend pas ce que je vais dire comme la bonne parole mais comme une probable connerie

    bon si j'ai bien compris tu affectes à ton champs liste_compte la valeur des tous les comptes sélectionnés, c est bien ça ?

    J'aurais peut être une idée mais bon ... pas sûr ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim rst As Recordset
    Dim strList As String
     
    'recherche des comptes cochés
    Set rst = CurrentDb.OpenRecordset("SELECT n°compte FROM compte WHERE selectionner = 1;")
     
    'ensuite création d'une chaine comprenant ta liste
    strList = ""
    Do While rst.EOF
        strList = strList & rst!n°compte & ";"
    Loop
     
    Set rst = Nothing

    J'ai essaié ce code : il marche mais pas tout à fait...


    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
    Private Sub Commande54_Click() '=sauvegarder groupe = deuxieme prcoédure a revoir
    Dim rst As Recordset
    Dim rs, rs2, rst1, rst2 As Recordset
    Dim var As Variant
    Dim titi, toto, vselect As String
    Set rs = CurrentDb.OpenRecordset("select n°compte from comptes where selectionner = -1")
     
    If Me.nom_groupe.Value <> "" Then
    strList = ""
    Do While Not rs.EOF
    'insertion dans groupe_details
    Set rst = CurrentDb.OpenRecordset("select * from groupe_details")
    CurrentDb.Execute "insert into groupe_details(id_groupe,compte) values ('" & id_groupe & "','" & rs!n°compte & "') ", dbFailOnError
    'insertion dans groupe : champs multivalué
    strList = strList & rs!n°compte & ";"
    DoCmd.RunSQL "insert into groupe(id_groupe,nom_groupe,liste_compte) values ('" & id_groupe & "','" & nom_groupe & "','" & strList & "')"
     
    rs.MoveNext
    Loop
    Set rs2 = Nothing
    Else
    titi = MsgBox("Veuillez entrer un nom de groupe ! ", vbExclamation, " WORKFLOW")
    End If
    mais il n'entre pas ces valeur dans le champs, pourtant lors de l'exécution, il insere pas les valeurs...

  6. #6
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    Do While Not rs.EOF ' boucle sur le champs n°compte de la table comptes

    'insertion dans groupe_details
    Set rst = CurrentDb.OpenRecordset("select * from groupe_details")
    CurrentDb.Execute "insert into groupe_details(id_groupe,compte) values ('" & id_groupe & "','" & rs!n°compte & "') ", dbFailOnError

    'insertion dans groupe : champs multivalué
    strList = strList & rs!n°compte & ";"

    rs.MoveNext
    Loop
    Set rst2 = CurrentDb.OpenRecordset("select * from groupe")
    CurrentDb.Execute "insert into groupe(id_groupe,nom_groupe,liste_compte) values ('" & id_groupe & "','" & nom_groupe & "','" & strList & "')", dbFailOnError

    Set rs = Nothing
    Il fallai mettre dbfailonerror a la fin de ma requete

  7. #7
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    Oula fause alerte, il me genere l'erreur 3022 modification non effectué , risque de doublons dans champs indexé

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Je ne comprend pas trop ce que tu veux faire...
    Quelles informations saisit l'utilisateur dans le formulaire ?
    Est-ce qu'il saisit un groupe existant dans une liste déroulante ou est-ce qu'il saisit un nouveau nom de groupe ?

    D'après ton code, si le champ nom_groupe est vide, il va qd même ouvrir un recordset et inserer dans la table groupe des enregistrements avec nom_group = null ...

    De plus, essaie juste de faire un peu de ménage dans tes noms de variable car tu utilises rs mais tu mets à la fin setrs2 = nothing

  9. #9
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    Private Sub Commande54_Click() '=sauvegarder groupe = deuxieme prcoédure a revoir
    Dim rst As Recordset
    Dim rs, rs2, rst1, rst2 As Recordset
    Dim var As Variant
    Dim titi, toto, strList As String

    Set rs = CurrentDb.OpenRecordset("select n°compte from comptes where selectionner = -1")

    If Me.nom_groupe.Value <> "" Then
    Me.liste_compte.Value = strList
    strList = ""
    Do While Not rs.EOF ' boucle sur le champs n°compte de la table comptes

    'insertion dans groupe_details
    Set rst = CurrentDb.OpenRecordset("select * from groupe_details")
    CurrentDb.Execute "insert into groupe_details(id_groupe,compte) values ('" & id_groupe & "','" & rs!n°compte & "') ", dbFailOnError

    'insertion dans groupe : champs multivalué
    strList = strList & rs!n°compte & ";"

    rs.MoveNext
    Loop
    Set rs = Nothing
    Set rst2 = CurrentDb.OpenRecordset("select * from groupe")
    CurrentDb.Execute "insert into groupe(id_groupe,nom_groupe,liste_compte) values ('" & id_groupe & "','" & nom_groupe & "','" & strList & "')", dbFailOnError
    Me.Undo
    DoCmd.Close
    DoCmd.OpenForm "groupe"

    Else
    titi = MsgBox("Veuillez entrer un nom de groupe", vbExclamation, "WORKFLOW")

    End If
    La voici, j'ai supprimer dans la table la clef primaire tt en laissant un numéro automatique. Mais maitenant il me rentrer les donnée en double

  10. #10
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    Re!

    Voila maintenant c'est nouveau, il n'accepte pas cette requête!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.OpenRecordset "insert into groupe(id_groupe,nom_groupe,liste_compte) values ( '" & id_groupe & "','" & nom_groupe & "','" & strList & "')", dbFailOnError
    erreur d'exécution opération non valide!!!!

    Je vais peter un plombs là!!! aidez moi svp

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    C normal qu'il n'accepte pas cette requête. Un recordset s'ouvre avec une requête select ou juste un nom de table.

    Fais plutôt un docmd.runsql ("insert into ...")

  12. #12
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    Ma requete fonctionne qu'a moitier puisqu'elle me renvoie bien le champs multi valué, mais le soucis c'est qu'elle l'insere en double dans la table sauf liste_compte...

  13. #13
    Membre habitué Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Points : 158
    Points
    158
    Par défaut
    hello
    bon voila, alors au lieu de faire un insert into en sql
    j'ai fais un update... le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "update groupe set nom_groupe='" & Me.nom_groupe & "',liste_compte='" & strList & "' where id_groupe=" & id_groupe

    pour mon champs multi valué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    strList = ""
    If Me.nom_groupe.Value <> "" Then
    Do While Not rs.EOF
     
     
    strList = strList & rs!n°compte & ";"
    CurrentDb.Execute "insert into groupe_details(id_groupe,compte) values ('" & id_groupe & "','" & rs!n°compte & "') ", dbFailOnError
     
     
    rs.MoveNext
    Loop
    Set rs = Nothing
    'CurrentDb.Execute " insert into groupe(nom_groupe,liste_compte) values ('" & Me.nom_groupe & "','" & strList & "' )where id_groupe=" & id_groupe
    CurrentDb.Execute "update groupe set nom_groupe='" & Me.nom_groupe & "',liste_compte='" & strList & "' where id_groupe=" & id_groupe

    Voilou pour tous et un grand merci pour vos coups de mains... je reviens pour un autre problème héhé.

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

Discussions similaires

  1. [Débutant] Probleme de mise à jour dataset avec champ multi-valués access (2007)
    Par gill-bates dans le forum VB.NET
    Réponses: 12
    Dernier message: 09/05/2014, 09h20
  2. [AC-2007] Case à cocher avec champs multi-valués
    Par manusp dans le forum IHM
    Réponses: 6
    Dernier message: 21/03/2011, 23h50
  3. Champs multi-valués 10g?
    Par fontome_ 123 dans le forum Oracle
    Réponses: 17
    Dernier message: 08/05/2008, 13h04
  4. Formes normales et champs multi-valués
    Par Doom dans le forum IHM
    Réponses: 3
    Dernier message: 08/02/2007, 12h58
  5. [Access 2007 - Nouveautés] Les champs multi-valués
    Par Tofalu dans le forum Sondages et Débats
    Réponses: 18
    Dernier message: 03/08/2006, 10h16

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