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 :

Modification Champ Multi valué


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Par défaut Modification Champ Multi valué
    Bonjour,

    J'essaie de modifier un champ Multi valué à l'aide de VBA...sans succès

    Pour celà j'utilise la méthode proposée par Tofalu sur son article concernant justement les champs multi-valué à savoir que :

    J'ai deux tables liées de la facon suivante :

    Machines 1 -------- oo Planning

    La table machine alimente une zone de liste sur un champ multi-valué

    J'ai de nombreuses fonctions VBA agissant sur Planning et j'aimerais en faire une me permettant de modifier la valeur du champs multi-valué

    J'ai donc écrit, afin de procéder à un test :
    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
     
    Dim Mvrst as Dao.Recordset, Planningrst as Dao.Recordset
     
    Set Planningrst= Currentdb.OpenRecordset ("SELECT * FROM Planning " & _ "WHERE (((Planning.IdRoue) = " & 25 & ") AND ((Planning.[N° Etape])= " & 2 & "))") 
     
    With Planningrst
      If Not .EOF Then
          Set mvrst = .Fields("Machine") = 2
          With mvrst 
             .AddNew
             .Fields(0)
             .Update
          End with
      Else 
          Msgbox(" ca marche pas") 
      End if 
    End With
    A l'éxécution de ce code, j'obtiens une erreur que je ne comprends pas...

    "Impossible de mettre à jour un champs à plusieurs valeurs si le jeu d'enregistrement parent n'est pas accessible en mode Modification.
    Pour ce faire, utilisez la méthode AddNew ou Edit."

    Quelqu'un pourrait-il m'éclairer sur ce qu'il se passe??

    Merci d'avance

  2. #2
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Bonjour,

    Un document plus complet est en cours de rédaction, je vous livre le passage concernant les champs à valeur multiples (à noter qu'aucune relecture n'a été réalisée)

    L’ajout d’une nouvelle valeur dans un champ en acceptant plusieurs valeurs pour un enregistrement donné doit d’abord être vu comme la mise à jour de ce premier enregistrement. Il s’agit donc dans un premier temps d’éditer celui-ci dans le recordset principal, puis ensuite d’ajouter l’élément dans le sous recordset.
    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
    '---------------------------------------------------------------
    ' Procedure : ExempleAjoutChampMutliple
    ' Author    : Christophe WARIN - Tofalu - www.developpez.com
    ' Date      : 11/04/2010
    ' Purpose   : Exemple d'ajout dans un champ à valeurs multiples.
    '---------------------------------------------------------------
    '
    Sub ExempleAjoutChampMutliple()
    Dim oDb As DAO.Database
    Dim oRst As DAO.Recordset
    Dim oRst2 As DAO.Recordset2
    Set oDb = CurrentDb
    Set oRst = oDb.TableDefs("tblClient").OpenRecordset(dbOpenDynaset)
    With oRst
      .FindFirst ("idclient=2")
      If Not .NoMatch Then
        .Edit
        Set oRst2 = .Fields("StatutClient").Value
        With oRst2
          .AddNew
          .Fields("Value").Value = 4
          .Update
        End With
        oRst2.Close: Set oRst2 = Nothing
        .Update
      End If
    End With
    oRst.Close: Set oRst = Nothing
    End Sub
    En cas d’oubli de l’appel à la méthode Edit du Recordset principal, l’erreur levée par VBA est assez explicite : 3852 Impossible de mettre à jour un champ à plusieurs valeurs si le jeu d'enregistrements parent n'est pas accessible en mode Modification. Pour ce faire, utilisez la méthode AddNew ou Edit.

    Une même valeur ne pouvant être renseignée deux fois dans un même champ, une erreur 3820 sera générée pour toute tentative de doublonnage : Vous ne pouvez pas entrer cette valeur, car elle duplique une valeur existante dans le champ Liste de choix à plusieurs valeurs ou dans le champ Pièce jointe. Le champ Liste de choix à plusieurs valeurs ou le champ Pièce jointe ne peuvent pas contenir de valeurs dupliquées.

    Si jusque-là, Visual Basic semble garantir l’intégrité des données, ce n’est toutefois plus le cas dès qu’il s’agit d’intégrer des valeurs absentes de la source de données. En d’autres termes, bien qu’il existe une propriété Limiter à Liste pour un champ multivalués, DAO n’en tient pas compte et autorise l’insertion de données farfelues. Ainsi, bien que notre table tblStatut possède des idStatut de 1 à 4, le code suivant ne lève aucune erreur.
    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
    '---------------------------------------------------------------
    ' Procedure : ExempleAjoutChampMutliple
    ' Author    : Christophe WARIN - Tofalu - www.developpez.com
    ' Date      : 11/04/2010
    ' Purpose   : Exemple d'ajout dans un champ à valeurs multiples.
    '---------------------------------------------------------------
    '
    Sub ExempleAjoutChampMutliple()
    Dim oDb As DAO.Database
    Dim oRst As DAO.Recordset
    Dim oRst2 As DAO.Recordset2
    Set oDb = CurrentDb
    Set oRst = oDb.TableDefs("tblClient").OpenRecordset(dbOpenDynaset)
    With oRst
      .FindFirst ("idclient=2")
      If Not .NoMatch Then
        .Edit
        Set oRst2 = .Fields("StatutClient").Value
        With oRst2
          .AddNew
          'Insertion d'une donnée inexistante
          .Fields("Value").Value = 499
          .Update
        End With
        oRst2.Close: Set oRst2 = Nothing
        .Update
      End If
    End With
    oRst.Close: Set oRst = Nothing
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Par défaut
    Merci beaucoup pour cette réponse!!!
    Il est vrai que cela paraissait explicite


    Après plusieurs essais, j'ai quelque chose qui semble bien marcher

    Voici le code que j'utilise pour ceux que celà pourrait intéresser :

    J'ai un champ à valeurs multiples "Machines" dans une table "Planning"

    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
     
    Private Sub Planifier_Click() 
     
    Dim Mvrst as Dao.Recordset
    Dim Planningrst as Dao.Recordset
     
    Set Planningrst = Currentdb.Openrecordset("SELECT * FROM Planning WHERE (((Planning.IdRoue) = " & Me.IdRoue & ") AND ((Planning.[N° Etape]) = " & 2 & " )")
    'Avec le select je selectionne 1 seul enregistrement afin de faire le test 
    With Planningrst
       Planningrst.Edit
       Set Mvrst = Planningrst.Fields("Machine").Value 
       With Mvrst 
           Mvrst.Addnew
           Mvrst.Fields(0) = "2"
           Mvrst.Update
       End With
       Mvrst.Close
       Planningrst.Update
    End With
    Planningrst.Close 
    End Sub

Discussions similaires

  1. [AC-2007] Affichage d'un champs multi-valué dans un formulaire
    Par MelaAllIn dans le forum IHM
    Réponses: 4
    Dernier message: 17/06/2011, 18h08
  2. [AC-2007] Cumul des valeurs d'un champ multi-valué
    Par eparin dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/05/2011, 10h01
  3. [AC-2007] Champs multi valué
    Par othke dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/05/2010, 13h42
  4. creation d'un champs multi-valué
    Par boumacmilan dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/04/2010, 14h00
  5. Réponses: 2
    Dernier message: 16/01/2008, 16h16

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