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 :

remplir une zone de liste dans l'évènement notinlist


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 41
    Points : 37
    Points
    37
    Par défaut remplir une zone de liste dans l'évènement notinlist
    Bojour

    Voulant illustrer l’évènement NotInList je procède de la sorte comme dans l’aide d’access
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim ctl As Control
      Set ctl = Me.zdl2
        If MsgBox("Value is not in list. Add it?", _
             vbOKCancel) = vbOK Then
            Response = acDataErrAdded
            ctl.RowSource = zdl2.RowSource & ";" & NewData
        Else
     
            Response = acDataErrContinue
            ctl.Undo
        End If
    Cela fonctionne, mais lorsque je ferme mon formulaire et je l’ouvre à nouveau la zone de liste déroulante ne contient plus de valeur (la propriété contenu de la feuille de propriété ne contient aucune valeur)
    Mon objectif est de pouvoir renseigner la zone de liste si le mot n’est pas dans la liste sans passer par une table qui est liée à la zone de liste déroulante via la propriété origine/source

    Est-il possible de réaliser une telle action ? si oui bien merci de m’aider

  2. #2
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    bonjour sevy1881

    Essaye de rajouter l'instruction

    à la fin. Je pense que ça devrait marcher.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 41
    Points : 37
    Points
    37
    Par défaut
    Désolé,
    quand je teste en mettant a la fin, cela ne fonctionne pas.
    je suis toujours en quête d'une solution

  4. #4
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Question toute bête : comment est alimentée la source de votre liste?

    Car, au vu du code, et de mon essai, cela ajoute une nouvelle valeur à une liste de valeur.
    Mais dans le cas d'une table ou une requête qui alimenterait la liste, cela ne marche pas.

    Pierre

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Pour pouvoir écrire et sauvegarder ton zdl2.RowSource, il faut ouvrir ta Form en Design, modifier zdl2.RowSource et sauvegarder ta Form.

    Le probleme est qu'avant d'ouvrir ta form en mode design, il faut qu'elle soit fermée

    Supposons que ta Form s'appelle Form1

    Au moment de la fermeture, ouvrir une autre Form en passant en paramétre ce qu'il faudra changer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Close()
      Dim str As String
     
      str = Me.zdl2.RowSource
      DoCmd.OpenForm "Frm_Truc_et_Astuce", acNormal, , , , , str
     
    End Sub
    Il faut créer une autre Form Frm_truc_Et_Astuce avec un control libelle qui dit juste "Sauvegarde en cours" et le code suivant qui ouvre, met à jour et sauvegarde Form1. Le timer est obligatoire, sinon Form1 est encore ouovert.
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Compare Database
    Option Explicit
     
    Private Sub Form_Load()
      Me.TimerInterval = 50
    End Sub
     
     
    Private Sub Form_Timer()
      Dim i As Integer
      Dim j As Integer
      Dim str As String
     
      Me.TimerInterval = 0
      str = Nz(Forms!frm_Truc_Et_Astuce.OpenArgs)
      If Len(str) > 0 Then
        '---------------------------------------------------
        ' Attendre la fin de fermeture de la form pour
        ' pouvoir la réouvrir en mode Design
        '---------------------------------------------------
        While Ecran_Is_Open("Form1")
          For i = 1 To 999
            For j = 1 To 999
     
            Next j
          Next i
        Wend
     
     
        '---------------------------------------------------
        ' Sauvegarde de la nouvelle liste
        '---------------------------------------------------
        DoCmd.OpenForm "Form1", acDesign
        Forms("Form1").Controls("zdl2").RowSource = str
        DoCmd.Close acForm, "Form1", acSaveYes
      End If
     
      DoCmd.Close
     
    End Sub
     
     
     
    Function Ecran_Is_Open(Ecran As String) As Boolean
      Dim frm As Form
     
      For Each frm In Forms
        If frm.Name = Ecran Then
          Ecran_Is_Open = True
          Exit Function
        End If
      Next frm
     
      Ecran_Is_Open = False
    End Function
    Dans ton code, il faut ajouter des guillemets, sinon tu vas avoir des soucis.
    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
    Private Sub zdl2_NotInList(NewData As String, Response As Integer)
      Dim ctl As Control
      Dim str As String
     
      Set ctl = Me.zdl2
     
      If MsgBox("Value is not in list. Add it?", vbOKCancel) = vbOK Then
        Response = acDataErrAdded
        '--------------
        ' Guillemets
        '--------------
        ctl.RowSource = ctl.RowSource & ";""" & NewData & """"
     
      Else
        Response = acDataErrContinue
        ctl.Undo
      End If
     
    End Sub
    Le plus simple est quand même d'utiliser une table, un champ dans une table.

    Mais chacun fait comme il veut.

    Bonne journée

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/04/2015, 09h57
  2. [AC-2000] Remplir une zone de liste grâce à une selection dans une autre zone
    Par Tydher dans le forum VBA Access
    Réponses: 8
    Dernier message: 26/07/2011, 16h20
  3. Réponses: 25
    Dernier message: 26/01/2007, 17h04
  4. Critère de requête avec une zone de liste dans un formulaire
    Par Dehez dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2006, 12h49
  5. remplir une zone de liste
    Par captainamerica75 dans le forum Access
    Réponses: 2
    Dernier message: 30/05/2006, 08h40

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