OVH Cloud OVH Cloud

Problèmes de liste !

5 réponses
Avatar
debdrai
Salut à tous,

J'ai déjà posé plusieurs questions sur les zones de liste, mais la
réponse qu'on me donne systématiquement concerne les zones de listes
déroulantes (évenement Absence dans liste). Mon problème est que je
travaille avec une zone de liste NON modifiable, liste que j'ai besoin
de rattacher à une table. Le but est qu'un usager aille chercher le
nom d'un fichier sur l'ordi en cliquant sur un simple bouton
ouverture, et que ce nom aille s'inscrire dans une table rattachée
(Dieu sait comment!) à ma zone de liste (et donc aussi dans la liste
en question). L'évènement Additem n'existe pas en Access 2000, et
l'évènement RowSource ajoute le nom dans la liste mais pas la table
(et quand je ferme le formulaire et le rouvre, plus rien).

Certains d'entre vous parle de Recordset mais je comprends mal. Bref,
si on considère que je récupère un nouveau nom de fichier à ajouter
dans une varaible que j'appelerai Toto, quelqu'un peut-il me donner le
code pour que le contenu de Toto s'ajoute comme nouvel enregistrement
dans la table et la liste liée ?

De plus, si je veux supprimer l'un des éléments de cette liste,
comment faire ?

Merci beaucoup, je ne sais plus vers qui me tourner...

Deb

5 réponses

Avatar
Raymond [mvp]
Bonsoir.

dans le principe de fonctionnement:
Le click sur un bouton Commande1 récupère le nom d'un fichier donné par
l'api openfile, une requête ajout est lancée pour rajouter ce nom dans la
table "table1", un requery est exécuté sur la liste basée sur Table1 pour
remettre toutes les valeurs dans le rowsource. pour la suppression c'est
pareil mais avec une requête suppression.
avec ça tu dois pouvoir écrire le code. si tu n'y arrive pas dis-le.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"La p'tite Deb" a écrit dans le message de
news:
Salut à tous,

J'ai déjà posé plusieurs questions sur les zones de liste, mais la
réponse qu'on me donne systématiquement concerne les zones de listes
déroulantes (évenement Absence dans liste). Mon problème est que je
travaille avec une zone de liste NON modifiable, liste que j'ai besoin
de rattacher à une table. Le but est qu'un usager aille chercher le
nom d'un fichier sur l'ordi en cliquant sur un simple bouton
ouverture, et que ce nom aille s'inscrire dans une table rattachée
(Dieu sait comment!) à ma zone de liste (et donc aussi dans la liste
en question). L'évènement Additem n'existe pas en Access 2000, et
l'évènement RowSource ajoute le nom dans la liste mais pas la table
(et quand je ferme le formulaire et le rouvre, plus rien).

Certains d'entre vous parle de Recordset mais je comprends mal. Bref,
si on considère que je récupère un nouveau nom de fichier à ajouter
dans une varaible que j'appelerai Toto, quelqu'un peut-il me donner le
code pour que le contenu de Toto s'ajoute comme nouvel enregistrement
dans la table et la liste liée ?

De plus, si je veux supprimer l'un des éléments de cette liste,
comment faire ?

Merci beaucoup, je ne sais plus vers qui me tourner...

Deb


Avatar
J-Pierre
Bonsoir,

Sur le plan du principe, si j'ai bien compris, je ne vois aucune difficulté:

Un bouton Ajouter, sur clic ouvre une boîte de dialogue recherche de fichier, code déjà souvent publié ici.
Si un fichier est sélectionné, un peu de code VBA insère une ligne dans ta table.
Requery de la zone de liste dont le contenu est ta table.

Un bouton supprimer, sur clic:
Si une ligne de ta zone de liste est sélectionnée, delete de la ligne correspondante dans la table
Requery de la zone de liste dont le contenu est ta table.

J'ai fait une recherche sur Google, l'exemple de code du lien de PierreCFI n'est pas si mal que ça, il te permet d'ajouter une ligne
dans une table. Par contre, changer de fil (question le 19/11, réponse le 21/11), ça démotive le répondeur qui ne se rappelle
plus.....Et ton post du 25/7, quatre personnes ont répondu, si tu n'étais pas contente, il fallait insister...... :-)))))

Bon, tu dis déjà ce que tu penses de mon principe et on verra.

ET TU NE CHANGES PAS DE FIL, NE TE TROMPE PAS DE BOUTON :-)))))

J-Pierre - Expert en fil et en couture

"La p'tite Deb" a écrit dans le message de news:
Salut à tous,

J'ai déjà posé plusieurs questions sur les zones de liste, mais la
réponse qu'on me donne systématiquement concerne les zones de listes
déroulantes (évenement Absence dans liste). Mon problème est que je
travaille avec une zone de liste NON modifiable, liste que j'ai besoin
de rattacher à une table. Le but est qu'un usager aille chercher le
nom d'un fichier sur l'ordi en cliquant sur un simple bouton
ouverture, et que ce nom aille s'inscrire dans une table rattachée
(Dieu sait comment!) à ma zone de liste (et donc aussi dans la liste
en question). L'évènement Additem n'existe pas en Access 2000, et
l'évènement RowSource ajoute le nom dans la liste mais pas la table
(et quand je ferme le formulaire et le rouvre, plus rien).

Certains d'entre vous parle de Recordset mais je comprends mal. Bref,
si on considère que je récupère un nouveau nom de fichier à ajouter
dans une varaible que j'appelerai Toto, quelqu'un peut-il me donner le
code pour que le contenu de Toto s'ajoute comme nouvel enregistrement
dans la table et la liste liée ?

De plus, si je veux supprimer l'un des éléments de cette liste,
comment faire ?

Merci beaucoup, je ne sais plus vers qui me tourner...

Deb


Avatar
debdrai
Salut Messieurs,

J'ai bien lu vos conseils et réussi à ajouter des enregistrements dans
ma table par une requete Ajout. Cela dit, ils n'apparaissent pas dans
la zone de liste "attachée" à la table, malgré l'instruction
"Matable.Requery" que j'ai ajouté juste après la requete dans mon code
VBA.

2e probleme: Je n'arrive pas davantage à sélectionner un
enregistrement puis le supprimer de la table. En créant une requete
avec le générateur, ça marche. Mais en VBA, NADA ! Voici mon code
(calqué sur celui de la requete ajout qui, elle, marche):

Dim strsql as string
strSql = "DELETE FROM tblMNT WHERE
((tblMNT.Fichier)=[frmMNT].[lstMNT]);"
CurrentDb.Execute strSql

3e (et dernier!) probleme: requete MISE A JOUR ! Et oui, les amis, je
les aurai toutes passé !
En plus de ma zone de liste, il y a deux autres champs dans mon
formulaire: une liste déroulante et un champ texte dans lequel
l'usager rentre des commentaires. Quand l'usager ajoute un nom de
fichier dans la table et la zone de liste associée, il doit ensuite
remplir manuellement ces deux autres controles, lesquels doivent être
également ajoutés dans la table. J'ai donc créé un bouton permettant
une mise à jour de la table en bas du formulaire quand tout est
rempli. Et bien sur, CA MARCHE PAS !

Voici le petit casse-tete. Je ne sais pas si le probleme est dans la
syntaxe de la requete ou dans son execution...

Dim strType As String
Dim strComMNT As String
strType = TypeF
strComMNT = CommentairesMNT
CurrentDb.Execute = "UPDATE tblMNT SET Image = strType, strComMNT ComMNT;"

A votre bon coeur, messieurs, je vous jure que je me fais moi-meme
pitié !

Merci à ceux qui auront le courage de lire tout ca !
Avatar
J-Pierre
Bonsoir,

Tu avances bien, je trouve :-)

1/ Il faut faire le requery sur ta zone de liste,
me.lstMNT.requery

2/ Tu dois spécifier Forms, et plutôt utiliser des "!", et délimiter les strings avec '
Dim strsql as string
strSql = "DELETE FROM tblMNT WHERE tblMNT.Fichier = '" & [Forms]![frmMNT]![lstMNT] & "';"
CurrentDb.Execute strSql

3/ Le problème est dans la syntaxe, VBA évalue l'expression avant de la passer à SQL:
Il faut délimiter les chaînes de caractères par des '
Si les chaînes de caractère comportent des ', il faut les changer en ''
Il manque une clause WHERE, tu vas mettre à jour toutes les lignes de ta table.
Dim strType As String
Dim strComMNT As String
strType = replace(TypeF, "'", "''")
strComMNT = replace(CommentairesMNT, "'", "''")
CurrentDb.Execute = "UPDATE tblMNT SET Image = '" & strType & "', ComMNT = '" & strComMNT & "' WHERE monChamp = '" &
[Forms]![monForm]![leChamp] & "';"

En espérant avoir fait un minimum de fautes de frappe !!!!!!

J-Pierre

"La p'tite Deb" a écrit dans le message de news:
Salut Messieurs,

J'ai bien lu vos conseils et réussi à ajouter des enregistrements dans
ma table par une requete Ajout. Cela dit, ils n'apparaissent pas dans
la zone de liste "attachée" à la table, malgré l'instruction
"Matable.Requery" que j'ai ajouté juste après la requete dans mon code
VBA.

2e probleme: Je n'arrive pas davantage à sélectionner un
enregistrement puis le supprimer de la table. En créant une requete
avec le générateur, ça marche. Mais en VBA, NADA ! Voici mon code
(calqué sur celui de la requete ajout qui, elle, marche):

Dim strsql as string
strSql = "DELETE FROM tblMNT WHERE
((tblMNT.Fichier)=[frmMNT].[lstMNT]);"
CurrentDb.Execute strSql

3e (et dernier!) probleme: requete MISE A JOUR ! Et oui, les amis, je
les aurai toutes passé !
En plus de ma zone de liste, il y a deux autres champs dans mon
formulaire: une liste déroulante et un champ texte dans lequel
l'usager rentre des commentaires. Quand l'usager ajoute un nom de
fichier dans la table et la zone de liste associée, il doit ensuite
remplir manuellement ces deux autres controles, lesquels doivent être
également ajoutés dans la table. J'ai donc créé un bouton permettant
une mise à jour de la table en bas du formulaire quand tout est
rempli. Et bien sur, CA MARCHE PAS !

Voici le petit casse-tete. Je ne sais pas si le probleme est dans la
syntaxe de la requete ou dans son execution...

Dim strType As String
Dim strComMNT As String
strType = TypeF
strComMNT = CommentairesMNT
CurrentDb.Execute = "UPDATE tblMNT SET Image = strType, strComMNT > ComMNT;"

A votre bon coeur, messieurs, je vous jure que je me fais moi-meme
pitié !

Merci à ceux qui auront le courage de lire tout ca !


Avatar
debdrai
Salut J-Pierre,

Merci INFINIMENT !Ça marche parfaitement ! Concernant la requete
UPDATE, j'ai juste du faire une petite modification en déclarant
d'abord la requete comme un String (sql = "..."), PUIS en faisant
Current... car il refuse de me le prendre en une seule ligne.

Merci d'avoir pris le temps de m'aider ! Bonne journée!

Deb