Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
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 06/07/2011, 13h47   #1
Invité de passage
 
Inscription : juin 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 8
Points : 1
Points : 1
Par défaut Problème sur évènement OnNotInList dans une liste déroulante

Bonjour à tous,

Voila mon problème, dans un formulaire j'ai une liste déroulante "Nom ville" qui quand on déroule la liste on peut voir deux colonnes (Nom ville et son code postal) que je vais chercher dans une table.

Le problème est que j'aimerai pouvoir rentrer d'autres noms de ville que ceux de ma table.

Deja il faut que je mette "BoundCollums" à 2 pour que la propriété LimitToList puisse se mettre à "False" Pourquoi?

Et quand je mets "BoundCollums" à 2 et que je retourne rentrer un nom de ville (existant dans la liste ou non) il me met une erreur du type "Valeur non valide pour ce champ"

Merci d'avance,

Bonne journée.
jakpot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h53   #2
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonjour,

Sur ta liste déroulante, il te suffit de définir la propriété "Limiter à liste" à NON (Propiétés, Données) ce qui permet de rentrer d'autres valeurs que celles de la liste sans les rentrer dans la table source.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h59   #3
Invité de passage
 
Inscription : juin 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 8
Points : 1
Points : 1
J'ai deja mis cette propriété a FAUX mais pour cela j'ai du changer la propriété BoundCollum de 1 à 2 (je ne sais pas pourquoi mais ca permet a la propriété Limiter a liste d'accepter de passer de VRAI à FAUX.

Donc après que je rentre un nom de ville non compris dans la source il me dit que la valeur rentré est non valide... un autre problème. le texte entré est passé de "aligné a gauche" à "aligné à droite" pourquoi... je n'en sais rien :/

Donc en fait j'aimerai savoir ce que cela a changé de passer la propriété boundCollum de 1 à 2

Merci
jakpot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 16h27   #4
Invité de passage
 
Inscription : juin 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 8
Points : 1
Points : 1
Les deux colonnes sources affichées dans la liste sont les noms des villes et leurs codes postaux. Je pense qu'après avoir modifié la propriété BoundCollum de 1 à 2 il veut une valeur numerique (type code postal) ...

Car même en selectionnant dans la liste un choix definis dans la table il me met valeur non valide quand le nom d'une ville apparait dans la zone de texte...
jakpot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2011, 22h31   #5
Membre éclairé
 
Homme Christophe AUMOITTE
Inscription : octobre 2009
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Christophe AUMOITTE
Âge : 43
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : octobre 2009
Messages : 254
Points : 303
Points : 303
Salut Jackpot,

Tu as de la chance, j'ai déjà été confronté à ce genre de situation et comme j'ai un peu de temps ce soir je t'ai préparé quelques lignes.
Je n'ai pas pris en compte le fait que 2 villes avec le même nom ne puissent avoir le même code postal. A toi de te débrouiller avec çà.

Donc tu as une zone de liste (Lst_Ville) basée sur un table (Tbl_Ville) qui contient une clé primaire (Id), un champ Ville et un champ CP (code postal).
Propriétés de la zone de liste :
Onglet données : Limitée à liste : Non
Onglet format : Nombre de colonnes : 3 (l'Id, le champ Ville et le champ CP)
Onglet format : Largeur colonnes : 0;5;2
Pour ce dernier paramètre, seul le 0 est important, il cache la clé primaire.

Ensuite, tu colle le code suivant :

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
56
57
58
59
60
61
62
63
64
65
66
67
68
Private Sub Lst_Ville_AfterUpdate()
    ' Rechercher l'enregistrement correspondant au contrôle.
    Dim rs As Object
 
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Id] = " & str(Nz(Me![Lst_Ville], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
 
Private Sub Lst_Ville_NotInList(NewData As String, Response As Integer)
On Error GoTo Err
 
Dim oId As Long
 
'Message pour ajouter la ville
If MsgBox("Souhaitez-vous ajouter cette nouvelle ville ?", _
            vbYesNo + vbQuestion + vbDefaultButton2, "Ajout d'un nouvelle ville") = vbYes Then
        'Ajoute le nom de la nouvelle ville
        DoCmd.RunSQL "INSERT INTO Tbl_Ville ( Ville ) SELECT """ & NewData & """;"
        'Zappe le message d'erreur système
        Response = acDataErrAdded
        'Récupère la clé primaire de la dernière valeur ajoutée dans la table
        oId = DLast("Id", "Tbl_Ville")
        'Si on clique sur Annuler dans la boite de dialogue de saisie du code postal
        If AdCodePostal(oId) = False Then
            GoTo On_Annule
        End If
    Else
On_Annule:
        Response = acDataErrContinue
        Me.Lst_Ville.Undo
        Exit Sub
 End If
 
'On est obligé de remetre cette ligne de code pour actualiser la liste avec le code postal
Response = acDataErrAdded
 
Fin: Exit Sub
 
Err:
    MsgBox "Erreur n° : " & Err.Number & vbLf & "Description : " & Err.Description
    Resume Fin
End Sub
 
Private Function AdCodePostal(Id As Long) As Boolean
 
Dim sInput As String
On_Relance:
'Ouverture de la boite de dialogue pour saisir le code postal
sInput = InputBox("Saisir le code postal :", "Code postal")
 
            If StrPtr(sInput) = 0 Then 'Si on appuie sur Annuler
                MsgBox "Opération annulée." & vbLf & "La ville saisie précédement va être supprimée.", vbOKOnly, "Information"
                'Suppression de la ville
                DoCmd.RunSQL "DELETE * FROM Tbl_Ville WHERE (((Tbl_Ville.Id)=" & Id & "));"
                'Annule la saisie dans le champ de la liste
                AdCodePostal = False
            ElseIf Not IsNumeric(sInput) Then
                MsgBox "Le code postal doit être numérique.", vbOKOnly + vbCritical, "Information"
                GoTo On_Relance 'On relance la boite de dialogue
            ElseIf Len(sInput) <> 5 Then
                MsgBox "Le code postal doit avoir 5 chiffres.", vbOKOnly + vbCritical, "Information"
                GoTo On_Relance 'On relance la boite de dialogue
            Else
                'Met à jour le code postal de la ville saisie précédement
                DoCmd.RunSQL "UPDATE Tbl_Ville SET Tbl_Ville.CP = " & sInput & " WHERE (((Tbl_Ville.Id)= " & Id & "));"
            End If
End Function
Et voilà le travail

Cordialement

Christophe
marsouin_89 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 03h29.


 
 
 
 
Partenaires

Hébergement Web