Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2010, 17h15   #1
Candidat au titre de Membre du Club
 
Patrick Aulas
Inscription : février 2010
Messages : 41
Détails du profil
Informations personnelles :
Nom : Patrick Aulas

Informations forums :
Inscription : février 2010
Messages : 41
Points : 11
Points : 11
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 :
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
sevy1881 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 17h21   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
bonjour sevy1881

Essaye de rajouter l'instruction

à la fin. Je pense que ça devrait marcher.
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 18h33   #3
Candidat au titre de Membre du Club
 
Patrick Aulas
Inscription : février 2010
Messages : 41
Détails du profil
Informations personnelles :
Nom : Patrick Aulas

Informations forums :
Inscription : février 2010
Messages : 41
Points : 11
Points : 11
Désolé,
quand je teste en mettant a la fin, cela ne fonctionne pas.
je suis toujours en quête d'une solution
sevy1881 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 09h57   #4
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
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
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 12h26   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 2
Points : 2
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 :
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 :
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 :
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
Pascal 999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h51.


 
 
 
 
Partenaires

Hébergement Web