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 :

actualisation d'une liste deroulante


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut actualisation d'une liste deroulante
    Bonjour

    J'ai un formulaire qui intègre un sous formulaire.
    Dans ce sous formulaire, j'ai une liste deroulante sur le champ individu.
    Si le nom mis dans le champ individu n'existe pas, on envoit un formuliare de creation d'une nouvelle personne. Mais aorès avoir renseigné les informations pour cette nouvelle personne, si je reviens dans la liste déroulante cette nouvelle personne n'apparaît pas.
    Je ne comprend pas pourquoi , d'autant lus que j'utilise le même code pour un champ destination qui lui est dans le formulaire principal

    Ci-dessous le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Code_destination_NotInList(NouvellesDonnées As String, Réponse As Integer)
     
     
        Dim entNouvDest As Integer, entTronqueNom As Integer, chTitre As String, entmsgDialogue As Integer
     
             DoCmd.OpenForm "Ajouter une destination", acNormal, , , acAdd, acDialog, NouvellesDonnées
     
     
            Réponse = acDataErrAdded
     
     
    End Sub
    Merci pour vos réponses.
    Est ce parce que c'est dans un sous formaulaire ?
    Par contre, si je vais dans ma table individu je retrouve bien mon nouvel enregistrement

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Si la valeur est stockée en table, il faut rafraîchir la liste avec par exemple une méthode Requery :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Code_destination.Requery
    Argy

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut
    le requery ne fonctionne pas.
    En fait mon probleme :
    ça focntionne très bien pour la destination.
    Par contre pour l'individu (en prenant le mm type de code de destination sur absence dans liste), ça ne marche pas.
    Quand je reviens dans la liste déroulante, le nouveau nom que j'ai rentré via un formulaire individu, n'y est pas. Pourtant il a été enregistré.
    Je ne comprend c'est identique et ça ne marche que pour destination

    Pourquoi ?

  4. #4
    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 pascale86 Voir le message
    Je ne comprend c'est identique et ça ne marche que pour destination
    Ce n'est pas identique une liste dans un formulaire et une autre dans un sous formulaire. Et en plus apparamment l'ajout se fait par un formulaire externe.

    Il faut bien nommer le sous formulaire à partir de l'endroit d'où l'ajout se fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Forms!FormulairePrincipal.Form!SousFormulaire!NomChamp.Requery

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut
    Bon je suis dans le brouillard complet .... Help me please

    Mon formulaire principal est F-deplacement
    Mon sous formulaire est F-OM-individu
    mon formulaire externe est Ajouter un individu
    Mon champ liste déroulante à actualiser dans le sous formulaire est n° individu.
    Je mets quoi extactement et à quel endroit : sur absence dans liste, sur la validation du forulaire externe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!FormulairePrincipal.Form!SousFormulaire!NomChamp.Requery

    Merci merci

  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 pascale86 Voir le message
    Bon je suis dans le brouillard complet .... Help me please

    Mon formulaire principal est F-deplacement
    Mon sous formulaire est F-OM-individu
    mon formulaire externe est Ajouter un individu
    Mon champ liste déroulante à actualiser dans le sous formulaire est n° individu.
    Je mets quoi extactement et à quel endroit : sur absence dans liste, sur la validation du forulaire externe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!FormulairePrincipal.Form!SousFormulaire!NomChamp.Requery

    Merci merci
    Tu fais du remplacer ! Faut quand même t'y mettre un peu non !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut
    Merci pour cette réponse. Mais pour info, avant de demander, j'ai essayé
    J'ai fait du remplacer, mais ça ne fonctionne pas mieux

    Je connais un peu access puisque j'ai dejà developpé des applis, mais là je bloque.
    Pas grave je vais chercher ailleuirs

  8. #8
    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 pascale86 Voir le message
    Merci pour cette réponse. Mais pour info, avant de demander, j'ai essayé
    J'ai fait du remplacer, mais ça ne fonctionne pas mieux

    Pas grave je vais chercher ailleuirs
    Eh bien montres ce que tu as fais.

    Citation Envoyé par pascale86 Voir le message
    Pas grave je vais chercher ailleuirs
    Et il n'est pas content en plus

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![F-Deplacement].Form![F-OM-individu]![N° individu].Requery

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Humm, disons que dans l'absolu, tu n'as pas besoin d'un formulaire externe pour ajouter la valeur mais simplement d'une fonction générique qui se déclenche sur l'événement et que tu appelles pour chaque combo de ton formulaire...

    Par exemple:
    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
    Function NotInList(MyCombo As ComboBox, NewData As String, Response As Integer, Optional ByVal AddIfMissed As Boolean = True) As Integer
        If Response = acDataErrDisplay Or IsNull(MyCombo.ControlSource) Or IsNull(NewData) Then
          If AddIfMissed Then
            If MsgBox("Cette valeur n'existe pas !" & vbCrLf & "Voulez-vous l'ajouter ?", vbQuestion + vbYesNo, "Valeur manquante") = vbYes Then
                Response = acDataErrAdded
                MyCombo = NewData
                Me.Requery
            Else
                Response = acDataErrContinue
                MyCombo.Undo
            End If
          End If
        End If
        NotInList = Response
    End Function
    Argy

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut
    Si j'ai besoin d'un formulaire externe car il faut que je rentre des infos complémentaires pour la nouvelle personne saisie.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut
    et voila le prg sui se déclenche sur absence dans liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub N°_individu_NotInList(NouvellesDonnées As String, Réponse As Integer)
     
        Dim entNouvInd As Integer, entTronqueNom As Integer, chTitre As String, entmsgDialogue As Integer
     
         DoCmd.RunCommand acCmdUndo
     
                   DoCmd.OpenForm "Ajouter un individu", acNormal, , , acAdd, acDialog, NouvellesDonnées
     
            Réponse = acDataErrAdded
     
            End Sub

  13. #13
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Eh bien tu ajoutes avec la fonction que je t'ai proposé et tu ouvres ton formulaire après.
    N'importe comment, c'est le formulaire appelé qui rafraîchit la liste du formulaire appelant sur l'événement Close par exemple ou sur le click du bouton Enregistrer ce formulaire.

    Dans ton cycle, l'événement NotInList et DoCmd.OpenForm n'ont pas à gérer la Response & acDataErrAdded parce que tu ne peux pas savoir si tu vas planter ou valider l'ajout.

    • Sur NotInList tu appelles l'ouverture : OK
    • Sur Load, tu affecte la valeur
    • Tu fais un Save à confirmer
    • Sur Close, tu fais un Requery en conséquence
    • Et la valeur de Response dépend de ce qui se passe dans ce formulaire.


    Argy

  14. #14
    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
    Oui Argy c'est une méthode mais il n'ya aucune raison que fait que ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Forms![F-Deplacement].Form![F-OM-individu]![N° individu].Requery
    ne marche pas.

    En principe c'est après avoir ajouter un enregistre que tu actualise les données mais à partir de ton formulaire "Ajouter un individu". C'est bien à ce niveau que tu l'as mis !

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut
    Bon
    sur Notinlist j'ouvre le formalaire Ajouter un individu = ok
    Sur Load, j'affecte la valeur
    SurClic du bouton valider (formulaire Ajouter un individu) je fais un Sur Liberation du formulaire Ajouter un individu je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![F-Deplacement].Form![F-OM-individu]![N° individu].Requery
    Et là message comm quoi avant d'actualiser il faut que l'enregistrement soit sauvegarger.

  16. #16
    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
    Après ton docmd.Save fais un Me.Requery ensuite raffraichissement ta liste ici pour voir

  17. #17
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Oui, DMboup, je partage ton point de vue.

    Bien, oui, l'actualisation n'est pas forcément disponible... Tout dépend dans quel contexte tu te trouves.
    Avec la fonction que je t'ai proposée, ça marche puisque tu restes dans l'événement mais elle ne répond pas à tes attentes.
    Bon, récapitulons, du fait que tu veuilles externaliser l'ajout, le champ recevant la valeur inexistante déclenche le NotInlist si LimitToList=True mais ne peut pas s'actualiser à cause de la façon dont est géré ton appel.
    De là, toi, tu veux ouvrir un formulaire qui te propose d'ajouter la dite valeur et par le biais du paramètre OpenArgs , pose la valeur dans un champ approprié du formulaire en question... Tu ajoutes d'autres valeurs et tu valides.
    Du fait que tu ne proposes pas de confirmer l'ajout, tu n'as pas besoin du "acDataErrAdded".
    Dans ton formulaire d'ajout, tu dois écrire le code qui ajoute effectivement la donnée avec une clause INSERT par exemple.
    Une fois sorti du formulaire, tu réaffectes le RowSource de ta zone de liste et appeles la méthode requery comme le stipule DMBoup.

    mais, j'ai un doute sur le fait que dans le cas du N°_Individu, il faille utiliser un NotInList. Je verrais plutôt un BeforeUpdate...

    Le N° d'individu représente quoi par rapport à l'enregistrement ?

    Argy

  18. #18
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    On ne peut pas faire Form.Requery après modification d'un contrôle Combobox, dont la valeur n'est pas enregistrée, dans ton cas c'est le sous-formulaire:
    Forms![F-Deplacement].Form![F-OM-individu] qui est en état "Dirty".

    Donc essaie cela dans l'évènement du sous-formulaire Forms![F-Deplacement].Form![F-OM-individu]:

    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
     
    Private Sub N°_individu_NotInList(NouvellesDonnées As String, Réponse As Integer)
     
      Dim entNouvInd As Integer, entTronqueNom As Integer, chTitre As String, entmsgDialogue As Integer
     
    '  DoCmd.RunCommand acCmdUndo
     
    '
    ' "Ajouter un individu" est ouvert un acDialog, très bien:
    '
      DoCmd.OpenForm "Ajouter un individu", acNormal, , , acAdd, acDialog, NouvellesDonnées
     
    '
    '  donc ici forcément "Ajouter un individu" est fermé, donc NouvellesDonnées a été enregistré.
    '
    ' Annuler modification d'abord:
      Me.undo
    '
    ' maintanant je peux .Requery sans souci:
      Me.[N° Individu].Requery
    '
    '  je peux ensuite assigner la nouvelle valeur:
      Me.[N° Individu].value = NouvellesDonnées 
     
    '
    ' je communique avec ACCESS:
    '
      Réponse = acDataErrAdded
    End Sub

  19. #19
    Membre actif

    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : Luxembourg

    Informations forums :
    Inscription : Septembre 2007
    Messages : 120
    Points : 257
    Points
    257
    Par défaut Màj liste déroulante
    Afin d'actualiser la liste déroulante, aller dans les propriétés du formulaire contenant la liste déroulante :

    Evénement sur activation : DoCmd.Requery = "ModifiableX"

    (X étant le numéro de la liste déroulante)

    Ciao.

  20. #20
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Lorenzole+bo Voir le message
    Afin d'actualiser la liste déroulante, aller dans les propriétés du formulaire contenant la liste déroulante :
    Evénement sur activation : DoCmd.Requery = "ModifiableX"
    (X étant le numéro de la liste déroulante)
    Ciao.
    Il est recommandé, lors de suggestions, de ne pas préconiser une solution avec une erreur de syntaxe...
    La méthode Requery associé à l'objet DoCmd est restée d'actualité pour une compatibilité avec Access 95 mais n'est pas la meilleure à utiliser.
    Sa syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Requery [nom du contrôle]
    Et non pas comme tu le cites Lorenzole+bo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Requery = "ModifiableX"
    Il est préférable, si on veut actualiser un contrôle qui ne se trouve pas dans le formulaire actif, d'utiliser plutôt la méthode Requery du contrôle lui-même.

    Quand bien même Lorenzole+bo, la méthode Requery telle qu'il faut l'utiliser a déjà été suggérée...
    Merci de ton intervention.

    Argy

Discussions similaires

  1. actualiser une liste deroulante sans actualiser la page
    Par mohcultiv dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/02/2008, 11h24
  2. cmt selectionner tout les champ d'une liste deroulante
    Par mangamat dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/03/2005, 10h08
  3. Parcourir une liste deroulante
    Par brandon dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/02/2005, 19h03
  4. plusieurs value dans une liste deroulante
    Par lepierre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 16/11/2004, 14h53
  5. Actualisation d'une liste "dépendante".
    Par Trilby dans le forum ASP
    Réponses: 6
    Dernier message: 19/11/2003, 18h39

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