Zone de liste modifiable....

Résolu
fatlaw Messages postés 10 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 19 octobre 2005 - 21 juil. 2005 à 16:50
fatlaw Messages postés 10 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 19 octobre 2005 - 3 août 2005 à 11:46
salut j'ai un petit problème.
J'ai créée une zone de liste modifiable contenant les informations d'une table et je voudrais que lorsque j'aurais choisi un élément de la liste c'est à dire un champ que les autres informations s'affichent sur les autres zones de texte de mon formulaire. voici le code que j'ai écrit:

Private Sub Modifiable37_AfterUpdate()
Dim dbs As Database
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("SELECT [libellé] FROM CATEGORIE where code='&modifiable37&'")
rst.MoveLast
dbs.Close
Texte4 = rst
End Sub

Merci de me répondre!!!

9 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
2 août 2005 à 09:52
Hop là, de retour de congés, désolée pour le retard ^^

Je ne sais toujours pas si ton champ est déclaré en texte ou en numérique

Si ton code est du style FR00005012 (oui, vive la bourse ^^), un mélange de chiffres et de lettres, on va déclarer le code comme du texte.

Déclare ta table CATEGORIES comme ceci :
Num : NuméroAuto (Clé primaire)
Code : Texte
Libellé : Texte

Ton formulaire contient :
Liste modifiable Modifiable37 (propriétés : Nb de colonne 2, colonne liée 1, largeur colonne : 0;4)

Zone de texte Texte4

Au chargement du formulaire :
Private sub Form_load()

Modifiable37.rowsource = "CATEGORIES"

End sub

Là, ta zone modifiable doit afficher tous les codes que tu auras saisis dans ta table.

Private sub modifiable37_click()

'Définition des variables
Dim SQL as String

'Création de la requête
SQL = ""
SQL = "SELECT * FROM CATEGORIES WHERE Num=" & modifiable37.Value

Set Base = CurrentDb()
Set Table = Base.OpenRecordset(SQL)
Table.MoveFirst

texte4.Value = Table.Fields("Libellé").Value

'Fermeture de la table
Table.Close
Set Base = Nothing

End sub



Reprenons maintentant Si ton code est entièrement numérique (et qu'il est unique, qu'il n'existe pas 2 codes identiques. S'il existe des doublons, tu gères comme plus haut avec une clé primaire Num)
Déclare ta table CATEGORIES comme ceci :
Code : Numérique (Pas de clé primaire)
Libellé : Texte

Je vais te marquer les seules différences avec le code plus haut :
Propriétés de Modifiable37 : Nb de colonne 1, colonne liée 1, largeur colonne : laisse à vide

Dans la procédure de click :
'Création de la requête
SQL = ""
SQL = "SELECT * FROM CATEGORIES WHERE Code=" & modifiable37.Value




Voilà, quand tu vas cliquer sur un code dans ta zone de liste, ça va t'afficher le libellé correspondant.
Moi, je viens de tester les 2 méthodes sous ACCESS2000 et ça fonctionne parfaitement.

Molenn
3
zouzounounours Messages postés 7 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 25 juillet 2005
21 juil. 2005 à 17:14
zouzounounours

Salut, si j'ai bien compris se que tu veux faire, tu dois implémenter la méthode évènementielle "clic" qui te permet de récupérer la valeur sélectionnée dans ta liste. ensuite, tu affecte la valeur aux différents contrôles texte.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
21 juil. 2005 à 17:18
Je te conseillerai d'alimenter ta listBox de cette façon :
ListBox.rowsource = "Requête SQL"
Même une requête autre que la suivante tant que dedans tu retrouves au moins une information en commun

Dans les propriétés de ta liste box, tu mets en colonne liée l'info commune (la clé primaire par exemple).

Plus qu'à mettre ce bout de code dans la procédure de click
Private sub ListeBox_click()
'Récupération des variables

'Création de la requête
SQL = ""
SQL = "SELECT * FROM Table WHERE Num=" & lst_Liste.Value

Set Base = CurrentDb()
Set Table = Base.OpenRecordset(SQL)
Table.MoveFirst

txt_toto1.Value = Table.Fields("Toto1").Value
cbo_toto2.Value = Table.Fields("Toto2").Value
etc ...

'Fermeture de la table
Table.Close
Set Base = Nothing

End sub

C'ets tiré d'un petit programmme que je me suis fait.
Faut bien entendu que tu l'adaptes à ton cas.
0
fatlaw Messages postés 10 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 19 octobre 2005
22 juil. 2005 à 09:43
j'ai essayé le code mais la machine me répond qu'il y a trop peu de paramètres au niveau de la ligne que j'ai mise en gras. voici le code .

Private Sub Modifiable37_Click()
Dim sql As String
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase("BIBLIOTHEQUE.mdb")
Set db = CurrentDb
Set rs = db.OpenRecordset("CATEGORIE", dbOpenTable)
rs.MoveFirst

sql = "SELECT [libellé] FROM CATEGORIE where code=" & Modifiable37.Value

Set rs = db.OpenRecordset(sql)

Texte4.Value = rs![libellé]

rs.Close
db.Close


End Sub

Au fait tu as bien compris mon problème zouzounounours !!

Merci de me répondre
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
22 juil. 2005 à 12:03
Alors, ça, ça vient de la requête qui est mal définie, ce qui est normal puisque j'ai fait un exemple sans connaître ta base.
Je vais te faire un exemple avec une base bidon puisque je ne connais pas la tienne. Un répertoire téléphonique par ex.

Table : tel
Champs : Num (numéroAuto-Clé primaire) - Nom (Texte) - Téléphone (Texte)
ex : 1 - Toto - 01.23.45.67.89
2 - Tata - 98.76.54.32.10

Dans un formulaire, tu mets :
Une ListBox que j'appelle lst_Répertoire (propriétés : Nb de colonne 2, colonne liée 1, largeur colonne : 0;4)

Deux zones de texte : txt_Nom et txt_téléphone


Au chargement du formulaire :
Private sub Form_load()

lst_répertoire.rowsource = "tel"

end sub

Ton formulaire est donc chargé, et la liste box contient :
Toto
Tata

Alors, ce que tu veux obtenir, c'est que lorsque tu cliques sur Toto dans la listBox, les zones de texte donne le nom et le numéro de téléphone.
C'est donc dans la procédure click de ta listBox.

Private sub lst_répertoire_click()

'Définition des variables
Dim SQL as String

'Création de la requête
SQL = ""
SQL = "SELECT * FROM tel WHERE Num=" & lst_répertoire.Value

Set Base = CurrentDb()
Set Table = Base.OpenRecordset(SQL)
Table.MoveFirst

txt_nom.Value = Table.Fields("Nom").Value
txt_tel.Value = Table.Fields("Tel").Value

'Fermeture de la table
Table.Close
Set Base = Nothing

End sub

Voilà.
Je viens de créer ma propre base avec cet exemple et ça fonctionne.
Si tu es bien dans ton formulaire Access, tu n'as pas besoin de cette commande :
Set db = OpenDatabase("BIBLIOTHEQUE.mdb")
puisque tu travailles dans une base déjà ouverte.


Il ne te reste qu'une seule chose à faire :
Remplacer ma table "tel" par ta table,
adapter la requête au champ que tu veux rechercher
Ajouter le nombre de zones de texte nécessaires pour afficher toutes tes données

Molenn
0
fatlaw Messages postés 10 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 19 octobre 2005
22 juil. 2005 à 17:19
j'ai fait exactement ce que tu as dit mais il génère la même erreur au niveau de la ligne:
Set rs = db.OpenRecordset(SQL)
il répond trop peu de paramètres 1 attendu au fait je travaille avec access 97

Merci de me répondre
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
22 juil. 2005 à 19:19
C'est donc ta requête qui ne remonte aucune donnée.

La raison la plus évidente qui me vient à l'esprit :
Tu ne cherches pas le même type de donnée.
Ce que contient ton Modifiable37, c'est quoi ? Du texte, du numérique ?
Comment est-il alimenter ? Si tu as plusieurs colonnes dedans, le .value ne te donne pas ce qui est affiché, mais le contenu de la première colonne (dans mon exemple, c'est la clé primaire).

Ensuite, dans quel type de champ cherches tu ? Un champ texte, numérique ? ...
Donne moi juste une description de ta table ... et la façon dont est alimentée ton Modifiable37.
0
fatlaw Messages postés 10 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 19 octobre 2005
25 juil. 2005 à 10:42
Je travaille avec la table CATEGORIE qui contient deux champs: code et libellé;
la liste modifiable Modifiable37 permet de choisir une valeur du champ code et la zone de texte Texte4 doit afficher le libellé correspondant. Les deux champs sont de type texte. Ma liste modifiable est donc alimentée par CATEGORIE et comporte donc deux colonnes mais affiche seulement le code après le clic.


je ne sais pas si j'ai été assez claire sinon je te donnerai d'autres précisions.


Merci de me répondre
0
fatlaw Messages postés 10 Date d'inscription mercredi 6 juillet 2005 Statut Membre Dernière intervention 19 octobre 2005
3 août 2005 à 11:46
c' est bon ca marche mais j'ai trouvé un code qui utilise DLookup voici le code:


Private Sub Modifiable37_AfterUpdate()
If Not (Modifiable37 = VBA.vbNullString) Then
Texte4 = DLookup("libcat", "CATEGORIE", "Modifiable37=code")
Else
Modifiable37 = VBA.vbNullString
Texte4 = VBA.vbNullString
End If
End Sub
merci beaucoup
0
Rejoignez-nous