Rechercher : dans
Par :

[Access VBA] problème pour récuperer un champ

Dernière réponse le 3 avr 2008 à 12:15:12 CyPile, le 20 mar 2007 à 10:45:42 
 Signaler ce message aux modérateurs

Résuperer un champ dans une liste.

Bonjour a tous.

J'ai un petit problème et je suis sur que vous pourrez m'aider.

J'ai une BD Access avec pour tous les programmes de mon entreprises, tous les ordinateur ou ceux-ci (les prog) sont installé.

J'aimerai que quand je double clique sur la liste des programmes il m'affiche dans une 2 eme liste tt les pc ou ce programme serai installé..

et je sais pas comment résuperer le champ du programme pour faire ma requete....



Help!!

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « [Access VBA] problème pour récuperer un champ » dans :
VBScript - Les boîtes de dialogue VoirQu'est-ce qu'une boîte de dialogue? Une boîte de dialogue est une fenêtre qui s'affiche au premier plan suite à un événement, et qui permet : soit d'avertir l'utilisateur ; soit le confronter à un choix ; soit lui demander de compléter un champ...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
Servlets - Gestion des formulaires VoirIntroduction aux formulaires Les servlets rendent très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML, c'est-à-dire une interface graphique permettant à l'utilisateur de saisir des données. Grâce à la balise...

1

_goni, le 20 mar 2007 à 10:57:29

Salut,
Pourrais tu etre plus précis ? C'est la requete à réaliser que tu veux ? Benoit.
Enlèves tes doigts sales de mon clavier.

Répondre à _goni

2

bachoune, le 20 mar 2007 à 10:57:31

Hello

En VBA, il te suffit de faire :

nomListe.Value

Et là, il te renvoie la valeur sur laquelle tu as double-cliqué par exemple.

;)

Répondre à bachoune

3

CyPile, le 20 mar 2007 à 12:16:51

Merci pour vos réponse!!

EN fait pas forcement avec une requete mais j'aimerai recuperer cette valeur d'une maniere ou d une autre..



pour le : Nom_de_ma_liste.value j ai un probleme d execution 94 (utilisation incorrect de null)


:(

Répondre à CyPile

4

blux, le 20 mar 2007 à 13:40:53

Salut,

une zone de saisie peut rester vide, dans ce cas elle possède la valeur "null", mais on ne teste pas liste.value = "Null", on teste avec if isnull(liste.value)...

Pour le reste, il suffit donc d'affecter le contenu de la liste à une variable (ou de l'utiliser en tant que tel) :

toto = liste.value

if liste.value = "tata" then

dans ton cas, tu peux générer une requête qui tu mettras en source de la zone dans laquelle tu veux afficher tes PC :

Dim StrSql As String
StrSql = "SELECT num_pc WHERE "
StrSql = " progra = '" & liste.value & "';"
liste2.rowsource = StrSql
Mais c'est un exemple, car dans ton cas, je ne sais pas comment sont tes données et donc comment rechercher les PCs qui ont le programme que tu as sélectionné... A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

6

CyPile, le 20 mar 2007 à 14:02:49

Merci pour ta réponse compléte.


Mon problème est maheureusement plus complexe il m semble...


Je m explique:


J ai une liste qui existe deja avec 3 colones (nom du programme, nom des machines, date du programme)(le tout est dans un formulaire)


moi se que je veut c est quand je double clique sur une ligne de ma liste (pour selectionner un nom de programme), access me retourne juste le nom du programme (et nn tt le ligne) pour que je puisse par la suite construire une requete pour afficher les machines ou le programme que j aurai selectionner est installer.



voila voila...


j espere que tu m as compris un peu mieu :)


parce que normalement ma liste ne devrai pas pouvoir etre NULL puisqu elle est completement rempli..



thanks pour tt

Répondre à CyPile

12

bachoune, le 20 mar 2007 à 14:24:09

List4.Column(2, List4.ListIndex)

2-> ta colonne
List4.ListIndex -> l'index de la ligne sélectionnée

Répondre à bachoune

5

bachoune, le 20 mar 2007 à 13:45:51

Programme le sur un "Double-Click" et teste le sur une liste non vierge à partir du formulaire.

Private Sub List0_DblClick(Cancel As Integer)

MsgBox List0.Value

End Sub

Pour éviter le message d'erreur, fais juste un test sur la valeur renvoyée :

If Not IsNull(List0.Value) Then

' Ton code

End If

;)

Répondre à bachoune

7

CyPile, le 20 mar 2007 à 14:05:08

Merci mais c est le mm problème que j ai expliquer plus haut à Blux...


ma liste n est pas vide...


elle fais partie d un formulaire et se rempli par une requete..


:)

Répondre à CyPile

8

zenon, le 20 mar 2007 à 14:13:00

Bin, pour récupérer la valeur d'une liste, il suffit de déterminer quelle colonne est liée (ou de lier la "bonne colonne").

Dans la feuille des propriétés de la liste, sous l'onglet données, tu peux le paramétrer.
Blux a posté récemment la même manoeuvre en VBA mais je l'ai plus trouvée...

Répondre à zenon

9

CyPile, le 20 mar 2007 à 14:21:23

Merci bcp je vais esseyer de retrouver l article de Bux.. ;)


thanks :)

Répondre à CyPile

16

blux, le 20 mar 2007 à 15:30:06

Yep, l'est là :

access mise en forme contenu zonen de liste#3
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

10

fl0, le 20 mar 2007 à 14:20:52

Salut

les noms que tu a dans ta liste sont rempli avec une requete c'est ca
peut tu la mettre pour que je te donne le code
moi c'est ce que j'ai fais quand je clique sur un nom d'un utlilisateur dans la liste ca me marque le nom de PC sur lequel ce trouve cette utilisateur
Si j'ai ta requete je pense que je pourrais t'aider

Répondre à fl0

11

CyPile, le 20 mar 2007 à 14:25:14

Okay voila la requete:




SELECT DISTINCTROW NomDeProgramme.* FROM NomDeProgramme WHERE (([NomDeProgramme].[Champ3] Like "*"));



champ3 étant le champ3 étant le champ avec le nom des prog...

NomDeProgramme est une requete..


voila voila..

Répondre à CyPile

13

fl0, le 20 mar 2007 à 14:49:50

Desolé mais je comprend pas trop ta requete
tu l'as fait avec l'assistant

est ce qu tu as une table PC qui contient lse champs "pc" "nom programme"

Répondre à fl0

14

fl0, le 20 mar 2007 à 14:58:00

Je vais tenté quand meme


Dim Sql As String
Dim Qry As DAO.QueryDef
Dim rs As DAO.Recordset


Sql = "SELECT PC.nom_PC FROM PC"
Sql = Sql & " WHERE (((PC.nom_programme) = """ & Me.lstnom_prog & """)) "

DoCmd.DeleteObject acQuery, "nom_PC" 'supprime la requête
CurrentDb.CreateQueryDef "nom_PC", Sql 'crée une nouvelle requete

Set Qry = CurrentDb.QueryDefs("nom_PC")
Set rs = Qry.OpenRecordset

While Not rs.EOF

txtnom_PC = rs(0)
rs.MoveNext

Wend

Set Qry = Nothing
Set rs = Nothing


dans mon exemple je suppose que tu a une table qui s'appelle PC avec les champ "nom_PC" et "nom_programme"

""" & Me.lstnom_prog & """ c'est pour prendre la valeur de ta liste

par contre moi je l'affiche dans un texte je n'ai pas cherché pour la liste je pense que ca ce ressemble

il faut que tu creer une requete toute bidon vraiment nimp que tu appelle "nom_PC" seul le nom que tu donne a la requete est important

Répondre à fl0

15

CyPile, le 20 mar 2007 à 15:29:29

Merci bcp..

J ai tt changé pour que sa aille avec ma BD mais j ai une erreur : 3102 " Réference circulaire causé par "nom de ma requete""


je sais pas qui faire...

Répondre à CyPile

17

fl0, le 20 mar 2007 à 15:32:55

Tu as creé une requete avec le nom que je t'ai dit ?

Répondre à fl0

19

CyPile, le 20 mar 2007 à 15:46:00

J ai reussi merci bcp bcp bcp bcp..



franchement merci



:)

Répondre à CyPile

20

fl0, le 20 mar 2007 à 15:48:15

C'etait quoi le probleme pour info

Répondre à fl0

21

CyPile, le 20 mar 2007 à 16:14:41

Me*%de en fait sa marche trop pas..

la requete est vide..



voila le code :


Sql = "SELECT NomDeProgramme.Name FROM NomDeProgramme"
    Sql = Sql & " WHERE (((NomDeProgramme.champ3) = """ & Me.lst_Resultat & """)) "

    DoCmd.DeleteObject acQuery, "nom_PC" 'supprime la requête
    CurrentDb.CreateQueryDef "nom_PC", Sql 'crée une nouvelle requete

    Set Qry = CurrentDb.QueryDefs("nom_PC")
    Set rs = Qry.OpenRecordset
    MsgBox (Sql)

    While Not rs.EOF

    
    Texte138.Value = rs(0)
    
    rs.MoveNext
    
    
    Wend
    
    Set Qry = Nothing
    Set rs = Nothing



NomDeProgramme est une requete,
champ3 est le champ ou se trouve le nom des programmes,


..

Répondre à CyPile

22

fl0, le 20 mar 2007 à 16:20:21

C'est pas pour critiquer mais c'est plus pratique avec des noms logique parceque champ3 dans deux mois si il faut que tu i retouche c'est mort

je ne comprend pas pourquoi tous ca ce trouve dans une requete

peut tu me dire comment tu a fais pour creer la requete que tu utilise dans le code
Sql = ".....

Répondre à fl0

18

fl0, le 20 mar 2007 à 15:39:59

Ce msg n'est pas pour ici

Répondre à fl0

23

CyPile, le 20 mar 2007 à 16:27:27

Je sais les champs sont merdique mais je peu pas changer c est une table exporter de fichier XLS..


Pour la requete c est le code que tu ma donné avant.. c est pas juste ?

Répondre à CyPile

24

fl0, le 20 mar 2007 à 16:32:47

Je ne sais pas mais tu me dit que
NomDeProgramme est une requete
c'est que tu l'as créé avant mais dit moi comment

Répondre à fl0

25

CyPile, le 20 mar 2007 à 16:37:09

Ha ui sorry..

c est une requete tt simple... vu qu aucune table physique existe (juste une liaison sur les fueille exel..) il me faut une requete comme une table...


je sais pas si tu me comprend

Répondre à CyPile

27

CyPile, le 20 mar 2007 à 16:40:53

Requete créé à laide de l assitant...

Répondre à CyPile

26

fl0, le 20 mar 2007 à 16:40:21

Si je te comprend et il te marque un message d'erreur ou tu as juste ta requete qui est vide

Répondre à fl0

28

CyPile, le 20 mar 2007 à 16:42:34

En fait j ai mis un MsgBox comme tu peux voir dans le code il me retourne la requete mais vide...

et si je regarde ma requete physiquement elle est vide aussi...

Répondre à CyPile

29

fl0, le 20 mar 2007 à 16:46:23

Bouge pas j'essaye la msgbox mais je vois pas a quoi ca sert

Répondre à fl0

30

CyPile, le 20 mar 2007 à 16:48:43

Juste a visualiser la requete.. en entier

Répondre à CyPile

31

fl0, le 20 mar 2007 à 16:49:42

Dans ta msgbox tu a quand meme ce que tu as mis entre "" apres le Sql = "...?

Répondre à fl0

32

CyPile, le 20 mar 2007 à 16:53:52

Ui bien sur. La requete s ecrit normalement il manque juste les données...

Répondre à CyPile

34

blux, le 20 mar 2007 à 16:59:36

La plupart du temps, c'est une erreur de syntaxe si la msgbox s'affiche mais que rien ne s'exécute...

J'ai vu que tu avais des double-quotes (guillemets)... Le mieux est de mettre entre simple quote (apostrophe) les valeurs de type chaine, comme j'ai donné l'exemple dans mon message 4...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

39

CyPile, le 21 mar 2007 à 08:40:18

Okay merci je vais test..

Répondre à CyPile

41

CyPile, le 21 mar 2007 à 08:53:14

Okay c est fait... Mais tjr rien ne s affiche dans la nouvelle requette nom_PC



:(

Répondre à CyPile

81

nicoaccess, le 11 avr 2007 à 09:11:52

Puis je te poser une question sur access

Répondre à nicoaccess

33

fl0, le 20 mar 2007 à 16:57:07

Bon la je vais me barré du boulot donc je ne pourrais pas repondre avant demain
mais si tu ne trouve pas
essaye au moment ou tu creé ta requete "NomDeProgramme" de transférer en meme temps dans une table que tu creer avant
je t'explique au cas ou tu ne sais pas

tu as select............... pour creer ta requete
avant tu met

CREATE TABLE table2
SELECT utilisateur, SUM(table1.traitement) INTO table2 FROM table1 ..................

into table2 sert a exporter les infos de la requete que tu creer vers la table2

Répondre à fl0

35

CyPile, le 20 mar 2007 à 17:00:20

Ok moi aussi je me barre..


ouai je connait tt sa mais sa change quoi qu on aye une requete a la palce d une table ??

Répondre à CyPile

37

fl0, le 20 mar 2007 à 17:05:38

Je sais pas mais ca peut merder moi ca marche ùais avec une table

Répondre à fl0

36

fl0, le 20 mar 2007 à 17:05:01

Tu peut aussi essayer dans access au niveau requete tu creer une requete en mode creation tu clique sur le bouton droit dans la fenetre grise et tu fait mode sql et tu ecrit

SELECT NomDeProgramme.Name FROM NomDeProgramme
WHERE NomDeProgramme.champ3 = "le nom d'un programme que tu est sur qui est sur un pc":
Je ne sais pas si il te faut des "" ou j'en ai mis essaye

bonne soiré

Répondre à fl0

38

CyPile, le 21 mar 2007 à 08:38:56

Ciao..


J'ai creer une table nommer "Tbl_Prog" sur la base de ma requete..

    Sql = "SELECT Tbl_Prog.NomPc FROM Tbl_Prog"
    Sql = Sql & " WHERE (((Tbl_Prog.NomProg) = """ & Me.lst_Resultat & """)) "

    DoCmd.DeleteObject acQuery, "nom_PC" 'supprime la requête
    CurrentDb.CreateQueryDef "nom_PC", Sql 'crée une nouvelle requete

    Set Qry = CurrentDb.QueryDefs("nom_PC")
    Set rs = Qry.OpenRecordset

    While Not rs.EOF
   ' MsgBox (Sql)
   
    txtTest.Value = rs(0)
    rs.MoveNext

    Wend

    Set Qry = Nothing
    Set rs = Nothing



NomPc et NomProg étant des nom de champ de ma table
nom_pc étant une requete tt simple



Je sais vraiment pas comment car normalement il faudrai que ma MsgBox me mette la requete avec le nom du champ que j ai sélectionner nn ?

Répondre à CyPile

40

blux, le 21 mar 2007 à 08:52:43

En plus des simple quotes, tu peux essayer avec :

Me.lst_Resultat.value
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

43

CyPile, le 21 mar 2007 à 08:59:58

Merci pour tes réponses..


mais sa ne mmarche tjr pas...


voila le code:


= ""' & Me.lst_Resultat.Value & '"")) "

les ' je n ai pas pu les mettre exactement ou toi tu les avait mis.. car il les pend comme un commentaire... je sais donc pas si s est bon la ou je les ai mis...

@plush

Répondre à CyPile

49

blux, le 21 mar 2007 à 09:09:57

Si tu les refermes correctement avec " ça marche !

= '" & Me.lst_Resultat.Value & "'));" 
Et ce sont bien des simple-quotes (touche 4) et non des back-quotes (touche 7 en ALT-GR).
N'oublie pas non plus le ; à la fin, ça peut servir...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

50

fl0, le 21 mar 2007 à 09:11:46

Ca fait la meme chose mais ecrit differement

Répondre à fl0

46

fl0, le 21 mar 2007 à 09:04:47

Ca ne sert a rien de mettre des .value partout si tu est sous access

Répondre à fl0

42

fl0, le 21 mar 2007 à 08:58:37

Si tu veut que ta msgbox s'affiche il ne faut pas la mettre en commentaire

c'est quoi ton probleme ca ne met toujours rien dans ta requete ?

Répondre à fl0

44

CyPile, le 21 mar 2007 à 09:01:17

Je sais..

Nn rien n est afficher ni dans la case txt ni dans la requete nom_Pc..

Répondre à CyPile

45

fl0, le 21 mar 2007 à 09:03:24

Tu as essayer de creer une requete comme je t dit hier ?
parceque si ca ne marche pas a ce niveau la on aurais une idee du probleme

Répondre à fl0

47

CyPile, le 21 mar 2007 à 09:07:05

J'ai pas eut le temp je test maintenan.. mais normalement sa devrai marcher avec ma new table nn ?

Répondre à CyPile

48

fl0, le 21 mar 2007 à 09:08:01

Je ne sais pas parceque si ca marche en fesant comme je te dit c'est peut etre tout simplement un probleme de reference dans VBa

Répondre à fl0

51

CyPile, le 21 mar 2007 à 09:14:29

Okay parce que la sa marche la requete... mais c est bizard alors que sa marche pas en VBA..


il faudrai traduire :


SELECT Tbl_Prog.NomPC
FROM Tbl_Prog
WHERE (((Tbl_Prog.NomProg)="Nero 7 Premium"));
en VBA avec a la place de "Nero 7 Premium" le champ sélectionner dans la liste ... et c est peu etre sa qui marche pas...

Répondre à CyPile

52

fl0, le 21 mar 2007 à 09:16:47

Tu peut me dire dans VBa au niveau
option->reference
tous ce qui est cocher
(cherche pas trop il ce trouve tous en haut ceux qui sont cocher)

Répondre à fl0

55

CyPile, le 21 mar 2007 à 09:27:48

Pour les réference j ai:

- VB for Application
-Microsotf ACCESS 9.0 Object Library
-OLE Automation
-Microsoft DAO 3.6 Object Library
-Microsoft AciveX Data Object 2.1 Library
-EffectCtrl ActiveX Control module

:)

Répondre à CyPile

53

fl0, le 21 mar 2007 à 09:17:47

Dans ta liste ca affiche bien "Nero 7 Premium" exactement pareil?

Répondre à fl0

54

CyPile, le 21 mar 2007 à 09:23:52

NN sa affiche le nom des pc qui ont d installer Nero 7 premium...

Répondre à CyPile

56

blux, le 21 mar 2007 à 09:31:10

Sql = "SELECT Tbl_Prog.NomPC "
Sql = Sql + " FROM Tbl_Prog "
Sql = Sql + " WHERE Tbl_Prog.NomProg = '" & maliste.value & "';"
MsgBox Sql
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

57

CyPile, le 21 mar 2007 à 09:34:34

Merci mais si je clique immaginons sur la ligne ou se trouve nero il devrai m afficher la requete avec =nero nn ?

parce que la il me met ='' (rien)

Répondre à CyPile

63

blux, le 21 mar 2007 à 09:53:33

C'est donc que tu ne renvoies pas la bonne valeur...

Ta liste est de quel type : déroulant, zone de liste simple, multi-colonne, multi-sélection ?
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

65

CyPile, le 21 mar 2007 à 09:55:38

C est une zone de liste simple avec selection multiple etendu

Répondre à CyPile

58

fl0, le 21 mar 2007 à 09:42:17

Dans ta liste Me.lst_Resultat ca met les noms de pc qui ont le logiciel c'est ca
excuse je macharne mais j'aimerais bien comprendre pour t'aider au mieux

Répondre à fl0

62

CyPile, le 21 mar 2007 à 09:50:57

LOol no problem je m explique mal..

en fait c est une liste ou se trouve : le nom du programme avec comme reference le nom de pc ou il est installé le constructeur et la version du logiciel...

cette liste est le resultat d une recherche que peu fasire l utilisateur..


par ex: chez qui Nero est installé ?

il tappe nero (dans l ex) dans un champ txt puis lst_resultat lui sors la liste avec (dans l ex):

- Nero 7 .. (nomPC) (constructeur) (version)
- Nero 7 .. (nomPC) (constructeur) (version)
Nero 7 .. (nomPC) (constructeur) (version)



etc...
etc..

moi maintenan j aimerai que quand on double clique sur cette liste resultat une autre liste apparait avec tt les nom des machines ou le programmes sélectionné dans lst_resultat est installé..

Répondre à CyPile

66

fl0, le 21 mar 2007 à 09:59:14

En fait si tu peut envoyer une impressin d'ecran ca serait bien parceque je doit etre c.. je ne vois pas du tou les lignes que ta liste affiche mais ne tinquiete pas ca vien de moi

Répondre à fl0

67

CyPile, le 21 mar 2007 à 10:05:34

Heu moi aussi je doit etre c.. je sais pas comment t envoyer une copie d ecran... ??

Répondre à CyPile

69

fl0, le 21 mar 2007 à 10:07:30

Moi non plus j'esperais que tu savais
essaye le test on va faire autrement

Répondre à fl0

71

blux, le 21 mar 2007 à 10:12:18

Ca y est, je crois que j'ai compris...

Il faut que tu récupères la valeur de la colonne qui affiche le logiciel :

liste.column(0), liste.column(1)...

A toi de voir dans la requête que tu as créée quel est le bon numéro de colonne...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

60

fl0, le 21 mar 2007 à 09:44:06

Je pense qu'on ne tape pas les bonne chose pour la requete

Répondre à fl0

59

CyPile, le 21 mar 2007 à 09:43:29

Je pense qu'il y a une probleme au niveau du "ma_liste.value"

etes vous sur que la propriété value raporte la veleur selectionné dans la liste ?

Répondre à CyPile

61

fl0, le 21 mar 2007 à 09:47:01

J'ai dit plus haut que le .value pour moi ca ne sert a rien

pour moi le probleme vien de

Sql = "SELECT Tbl_Prog.NomPc FROM Tbl_Prog"
Sql = Sql & " WHERE (((Tbl_Prog.NomProg) = """ & Me.lst_Resultat & """)) "

on demande de selectionner des truc pour lequel le nomProg est = a la liste mais si tu affiche des nom de pc dans ta liste ca ne marchera jamais

tu me suis ?

Répondre à fl0

64

CyPile, le 21 mar 2007 à 09:53:30

Ben comme tu peux le voir dans le message 62 sa serai juste le nom du programme qu il faudrai récuperer pour pourvoir faire la requete d afficher juste les nom des pc ou le prog est installé...

Répondre à CyPile

68

fl0, le 21 mar 2007 à 10:06:35

OK on va faire un test tous simple

tu creer un texte dans ton formulaire ou tu a ta liste tu l'appelle txttest et dans ta zone de liste tu creer le code sur click

txttest=lst_Resultat

et tu me dit si tu as quelque chose qui ce met dans le texte et surtout quoi

Répondre à fl0

70

CyPile, le 21 mar 2007 à 10:11:50

Rien ne s affiche...


mais dans ma lst_resultat j'ai 4 colonnes... donc si je clique sur une sa selectionne tt la ligne pas juste une données...

Répondre à CyPile

72

fl0, le 21 mar 2007 à 10:14:46

Fqait ce que blux a dit avec mon test mais tu met
txttest=lst_Resultat.column(0)
apres 1 , apres 2 etc...

Répondre à fl0

73

CyPile, le 21 mar 2007 à 10:21:58

Merci a vous 2..


J ai test mais une erreur (2185) apparait : impossible de faire reference a une propriété ou de la definir pour un controle si celle ci n est pas activé...

Répondre à CyPile