Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème d'apostrophe dans un formulaire Access

7 réponses
Avatar
marriie
Bonjour,
J'ai construit sous Access un formulaire de saisie de données qui contient une liste déroulante permettant de trouver l'enregistrement voulu (des noms de pharmacie).
Voici mon code de départ sous VBA :

Private Sub Modifiable253_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[NOM] = '" & Me![Modifiable253] & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Hélas j'ai des noms qui contiennent des apostrophes et donc j'ai un bug quand je tente d'afficher ces noms là. En allant sur les forums, j'ai bien compris qu'il faut placer la fonction replace qq part mais je n'y arrive pas dans mon programme. Est-ce que qq un pourrait prendre le temps de me sortir de là ? (j'utilise VBA via les formulaires Access... donc autant dire que je suis très novice dans ce langage).

Merci par avance pour votre aide.

7 réponses

Avatar
db
Le 23/02/2011 13:59, marriie a écrit :
Bonjour,
J'ai construit sous Access un formulaire de saisie de données qui contient une
liste déroulante permettant de trouver l'enregistrement voulu (des noms de
pharmacie).
Voici mon code de départ sous VBA :

Private Sub Modifiable253_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[NOM] = '"& Me![Modifiable253]& "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Hélas j'ai des noms qui contiennent des apostrophes et donc j'ai un bug quand
je tente d'afficher ces noms là. En allant sur les forums, j'ai bien compris
qu'il faut placer la fonction replace qq part mais je n'y arrive pas dans mon
programme. Est-ce que qq un pourrait prendre le temps de me sortir de là ?
(j'utilise VBA via les formulaires Access... donc autant dire que je suis très
novice dans ce langage).

Merci par avance pour votre aide.



Essayez :

rs.FindFirst "[NOM] = " & chr(34) & Me![Modifiable253] & chr(34)

(J'ai enlevé tous les ' )

db
Avatar
marriie
db a écrit le 23/02/2011 à 18h11 :
Le 23/02/2011 13:59, marriie a écrit :
Bonjour,
J'ai construit sous Access un formulaire de saisie de données qui
contient une
liste déroulante permettant de trouver l'enregistrement voulu (des noms
de
pharmacie).
Voici mon code de départ sous VBA :

Private Sub Modifiable253_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[NOM] = '"& Me![Modifiable253]&
"'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Hélas j'ai des noms qui contiennent des apostrophes et donc j'ai un bug
quand
je tente d'afficher ces noms là. En allant sur les forums, j'ai bien
compris
qu'il faut placer la fonction replace qq part mais je n'y arrive pas dans mon
programme. Est-ce que qq un pourrait prendre le temps de me sortir de
là ?
(j'utilise VBA via les formulaires Access... donc autant dire que je suis
très
novice dans ce langage).

Merci par avance pour votre aide.




Essayez :

rs.FindFirst "[NOM] = " & chr(34) & Me![Modifiable253] &
chr(34)

(J'ai enlevé tous les ' )

db


Bonsoir et un grand merci pour cette réponse rapide !
Je viens de tester le bout de programme et cela fonctionne à merveille !!
Avatar
marriie
db a écrit le 23/02/2011 à 18h11 :
Le 23/02/2011 13:59, marriie a écrit :
Bonjour,
J'ai construit sous Access un formulaire de saisie de données qui
contient une
liste déroulante permettant de trouver l'enregistrement voulu (des noms
de
pharmacie).
Voici mon code de départ sous VBA :

Private Sub Modifiable253_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[NOM] = '"& Me![Modifiable253]&
"'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Hélas j'ai des noms qui contiennent des apostrophes et donc j'ai un bug
quand
je tente d'afficher ces noms là. En allant sur les forums, j'ai bien
compris
qu'il faut placer la fonction replace qq part mais je n'y arrive pas dans mon
programme. Est-ce que qq un pourrait prendre le temps de me sortir de
là ?
(j'utilise VBA via les formulaires Access... donc autant dire que je suis
très
novice dans ce langage).

Merci par avance pour votre aide.




Essayez :

rs.FindFirst "[NOM] = " & chr(34) & Me![Modifiable253] &
chr(34)

(J'ai enlevé tous les ' )

db


Une dernière question sur un sujet très proche :
En fait ma liste déroulante de recherche sur mon formulaire Access se base sur 3 champs : le nom du pharmacien, son code postal et sa ville.

Or avec la programmation actuelle (rs.FindFirst "[NOM] = " & chr(34) & Me![Modifiable253] &
chr(34)), je ne peux pas choisir entre DUPONT qui a un code postal = 45000 et DUPONT dont le code postal = 65000.

Dans un autre formulaire, j'avais résolu ce problème avec une ligne égale à :
rs.FindFirst "[NOM] = '" & Me![Modifiable327].Column(0) & "' And [CP] = '" & Me![Modifiable327].Column(1) & "'"

(Je m'occuperai des ' plus tard!)

Hélas, ce programme ne veut pas fonctionner ! (j'ai une fenêtre qui apparaît : erreur d'exécution '3464'. Type de données incompatible dans l'expression du critère).


Encore merci pour votre aide.
Avatar
3stone
Bonjour,

marriie wrote:
[...]
En fait ma liste déroulante de recherche sur mon formulaire Access
se base sur 3 champs : le nom du pharmacien, son code postal et sa
ville.

Or avec la programmation actuelle (rs.FindFirst "[NOM] = " & chr(34)
& Me![Modifiable253] &
chr(34)), je ne peux pas choisir entre DUPONT qui a un code postal >> 45000 et DUPONT dont le code postal = 65000.

Dans un autre formulaire, j'avais résolu ce problème avec une ligne
égale à : rs.FindFirst "[NOM] = '" & Me![Modifiable327].Column(0) &
"' And [CP] = '" & Me![Modifiable327].Column(1) & "'"






Il te manque probablement une clé primaire dans ta table...

A défaut, il est évident que si tu sélectionnes un nom dont il existe
des homonymes, c'est toujours le premier qui est affiché !

Il suffit donc d'ajouter comme premier champ de la table, une
simple clé primaire en numéroauto et de cacher ce (premier)
champ dans la liste en mettant sa largeur à zéro.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
marriie
3stone a écrit le 24/02/2011 à 16h45 :
Bonjour,

marriie wrote:
[...]
En fait ma liste déroulante de recherche sur mon formulaire Access
se base sur 3 champs : le nom du pharmacien, son code postal et sa
ville.

Or avec la programmation actuelle (rs.FindFirst "[NOM] = " &
chr(34)
& Me![Modifiable253] &
chr(34)), je ne peux pas choisir entre DUPONT qui a un code postal >>
45000 et DUPONT dont le code postal = 65000.

Dans un autre formulaire, j'avais résolu ce problème avec une
ligne
égale à : rs.FindFirst "[NOM] = '" &
Me![Modifiable327].Column(0) &
"' And [CP] = '" & Me![Modifiable327].Column(1) &
"'"








Il te manque probablement une clé primaire dans ta table...

A défaut, il est évident que si tu sélectionnes un nom
dont il existe
des homonymes, c'est toujours le premier qui est affiché !

Il suffit donc d'ajouter comme premier champ de la table, une
simple clé primaire en numéroauto et de cacher ce (premier)
champ dans la liste en mettant sa largeur à zéro.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


Merci pour ta réponse.
Effectivement, c'est un pb de clé primaire... Sauf que mon formulaire est basé sur une requête et non une table... Même si le champ qui me sert de clé apparait dans cette requête, je n'ai pas la possibilité de faire cette colonne cachée dans la liste déroulante de recherche.
Je m'en suis sortie différemment : j'ai modifié ma requête : mon champ nom est maintenant la concaténation du nom du pharmacien et de sa ville (unique)... (ce champ 'nom' ne me servait que pour la liste déroulante donc c'était pas un pb de le modifier).

En tout cas, merci encore pour ta réponse,
Avatar
3stone
Salut,

marriie wrote:
[...]
Effectivement, c'est un pb de clé primaire... Sauf que mon
formulaire est basé sur une requête et non une table... Même si le
champ qui me sert de clé apparait dans cette requête,






Cela ne change strictement rien !!

je n'ai pas la
possibilité de faire cette colonne cachée dans la liste déroulante
de recherche.






Mais si, mais si... n'affirme pas ce que tu ne connais pas :-/



Je m'en suis sortie différemment : j'ai modifié ma requête : mon
champ nom est maintenant la concaténation du nom du pharmacien et de
sa ville (unique)... (ce champ 'nom' ne me servait que pour la liste
déroulante donc c'était pas un pb de le modifier).






Méthode bourin...

Donc, je répète :
Dans les propriétés de la liste, tu peux définir la largeur des
différents "champs" de cette liste.
Il suffit de mettre 0cm pour le premier champ, pour qu'il soit caché !
Mais caché ne veux pas dire absent... et lors d'une sélection, la liste
sélectionnera alors l'enregistrement ayant la bonne clé (unique)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
marriie
3stone a écrit le 25/02/2011 à 01h37 :
Salut,

marriie wrote:
[...]
Effectivement, c'est un pb de clé primaire... Sauf que mon
formulaire est basé sur une requête et non une table...
Même si le
champ qui me sert de clé apparait dans cette requête,








Cela ne change strictement rien !!

je n'ai pas la
possibilité de faire cette colonne cachée dans la liste
déroulante
de recherche.








Mais si, mais si... n'affirme pas ce que tu ne connais pas :-/



Je m'en suis sortie différemment : j'ai modifié ma
requête : mon
champ nom est maintenant la concaténation du nom du pharmacien et de
sa ville (unique)... (ce champ 'nom' ne me servait que pour la liste
déroulante donc c'était pas un pb de le modifier).








Méthode bourin...

Donc, je répète :
Dans les propriétés de la liste, tu peux définir la
largeur des
différents "champs" de cette liste.
Il suffit de mettre 0cm pour le premier champ, pour qu'il soit caché !
Mais caché ne veux pas dire absent... et lors d'une sélection, la
liste
sélectionnera alors l'enregistrement ayant la bonne clé (unique)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


Désolée d'avoir froissé ta sensibilité d'expert...!
J'ai testé ta suggestion, merci pour le conseil, c'est plus simple et ça fonctionne aussi à merveille !