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 :

Controle de saisie sur Champ multivalué [AC-2007]


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 Controle de saisie sur Champ multivalué
    Bonsoir,

    Je travaille actuellement avec un champ multivalué dont j'aimerais contrôler la saisie :
    La première action que j'essaie de faire est un comptage des éléments sélectionnés et j'ai donc mis un code VBA sur l'evênement "AfterUpdate" du champ multivalué en question...

    Le problème est que la seule méthode de manipulation des champs multivalués est le recordset et en ouvrant un recorset contenant les valeurs du champs multivalué et en comptant ces éléments, j'obtiens non pas le nombre d'éléments après modifications...mais avant modifications

    Si par exemple, j'ai le champ vide et que je lui rajoute 2 valeurs....j'obtiendrai 0 mais le coup suivant j'obtiendrai 2 ...

    Y a t-il une autre solution que je puisse utiliser??

    Merci d'avance

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

    Je ne vais pas te donner la solution (je ne la connais pas), mais te dire d'éviter ce genre de champs.

    C'est tout beau, mais en pratique c'est une horreur à gérer, beaucoup de posts sur le sujet où les posteurs regrettent l'utilisation de ce type de champs.

    Philippe

  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 pour cette réponse Philippe

    Et effectivement je me rend compte chaque jour un peu plus de la difficulté de gérer ce type de champs.....
    Celà dit.....si quelqu'un avait la réponse à mon problème ce serait super...

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

    Tu confirmes les dire de tous

    Peux-tu montrer comment tu fais le contrôle actuellement, c'est peut-être ne histoire de parcours de recordset (un movelast et un movefirst à intégrer).

    Philippe

  5. #5
    Membre averti
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Par défaut
    Et bien pour le moment je vais chercher le recordset associe au champ multivalue....le soucis c'est que ce recordset là je l'ouvre au moment où le champs n'est pas encore actualisé....d'où je pense le problème que j'ai décris plus haut du moins c'est ce que je pense avoir compris avoir voilà ce que je met sur l'evenement after_update

    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 Machine_Count(Planningline as Integer) as Integer 
     
        Dim sql as String
        Dim rst as DAO.Recordset, Mvrst as DAO.Recordset
        Dim i as Integer 
     
        i = 0
        sql = "SELECT * " & _
        "FROM Plannning " & _ 
        "WHERE ((Planning.[N°])= " & Planningline & ") "
     
        Set rst = Currentdb.OpenRecordset(sql)
        'Recordset contenant l'enregistrement en cours de modification 
     
     
        With rst 
            Set Mvrst = rst.Fields("Maquina").Value
            'Recordset associé au champs multi-valué
     
            Do until Mvrst.EOF
                i= i+1          'Comptage des valeurs contenues dans le champs 
                Mvrst.Movenext 
            Loop
            Mvrst.Close
        End With 
        Planningrst.Close 
        Machine_count=i
     
    End Function

    Merci d'y jeter un coup d'oeil ....Après celui là j'arrête les champs multivalué.....promis

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    bonjour,

    essaie avec:

    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
    ...
    Set rst = Currentdb.OpenRecordset(sql)
        'Recordset contenant l'enregistrement en cours de modification 
     
    with rst
     
        If Not .EOF Then
        With .Fields("Maquina").Value
          .MoveLast
          Machine_count= .RecordCount
        End With
     
    end with
     
    ' etc...

  7. #7
    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 f-leb mais j'ai le même résultat..à savoir que lorsque j'affiche le résultat du comptage, celui ci correspond au nombre précédent

    Si je selectionne 3 éléments, lors du comptage il me dira 0
    Si je modifie ma sélection et que je rajoute 1 élément par exemple, il me dira 3 et non 4
    etc...

    Le seul moyen que j'ai trouvé pour avoir le bon résultat, c'est de sélectionner mes valeurs dans le champ multi, activer un autre enregistrement puis revenir à l'enregistrement voulu puis faire le comptage sur "Before_Update" d'un autre champ......

    autant dire...bidouille...bidouille...

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    bon, à dire vrai je me suis inspiré de la FAQ:
    [Access 2007] Comment compter le nombre de valeurs d'un champ multi-valué en VBA ?

    je pensais que le .movelast aurait résolu le problème.

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    il faut peut-être d'abord forcer Access à sauvegarder l'enregistrement avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunCommand acCmdSaveRecord

  10. #10
    Membre averti
    Inscrit en
    Février 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 49
    Par défaut
    F-LEEEEEEEEEEEEEEEEEEEEEEEEEEEEB!!!!!!!
    CA MARCHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

    waoooow ca soulage!!!!
    Merci beaucoup
    J'étais partis sur une solution d'ouvrir un formulaire vide puis a son ouverture le fermer...de façon à voir si Access aller me sauvegarder l'enregistrement....
    Bref c'est effectivement beaucoup moins amateur comme ca!!!

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

Discussions similaires

  1. [WSS3] Groupement sur champ multivalué
    Par Ditch dans le forum SharePoint
    Réponses: 6
    Dernier message: 09/04/2008, 10h55
  2. Controle de saisi sur un <input>
    Par bassam0205 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/01/2008, 09h48
  3. Masque de saisie sur champs auto
    Par sam29 dans le forum Access
    Réponses: 8
    Dernier message: 21/08/2006, 15h25
  4. Controle de saisie sur une liste déroulante
    Par antier dans le forum IHM
    Réponses: 3
    Dernier message: 07/12/2005, 06h42

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