Macro ouvrir formulaire VS Apostrophes

Résolu/Fermé
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 - 13 août 2015 à 02:52
 Tessel75 - 17 août 2015 à 12:13
Bonjour,

Je tiens d'abord à préciser que je ne suis pas une bête de programmation, j'utilise uniquement le générateur de macro.

J'ai une zone de liste et un bouton qui ouvre un formulaire selon l'enregistrement sélectionné dans la zone de liste. Tout fonctionne bien, sauf pour les enregistrements contenant un apostrophe. J'ai lu un peu à ce sujet sur les forums et toutes les solutions semblaient se faire par programmation... sql...vba... Bref, pas du tout mon champ d'expertise!

Y a-t'il moyen de régler le problème sans passer par la programmation (et sans demander à mes utilisateurs de ne pas utiliser d'apostrophe!)?

Sinon, est-ce que quelqu'un peut m'expliquer, pas à pas, comment modifier le code pour régler le problème? J'ai quand même une base de vba en Excel.

Merci à l'avance!

A voir également:

5 réponses

Bonjour,
"sauf pour les enregistrements contenant un apostrophe"
Qu'appelles-tu les enregistrements contenant un apostrophes? Et quels problèmes apparaissent?
0
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 25
14 août 2015 à 00:18
Plus concrètement, j'ai une table Entreprises. Dans cette table, j'ai le nom de l'entreprise, et d'autres informations sur l'entreprise. Dans un formulaire, j'ai une zone de liste avec tous les noms d'entreprise. Lorsque je clique sur une entreprise dans la liste et que je clique sur le bouton "ouvrir formulaire", le formulaire de cette entreprise s'ouvre. En général, tout ce passe à merveille.

Par contre, lorsque le nom de l'entreprise contient un apostrophe (par exemple "Auberge sur le bord de l'eau"), le formulaire n'ouvre pas. Un message d'erreur s'affiche : "Erreur de syntaxe (opérateur absent) dans l'expression « [Entreprises]='Auberge sur le bord de l'eau' ».

Merci de vous intéresser à mon problème :)
0
Bonjour,
Question intéressante parce qu'effectivement je ne me l'étais jamais posée ne l'ayant jamais rencontrée. Cela dit, en reprenant la syntaxe de VBA, il faut croire que les " " (doubles) ou ' ' (simples) sont des signes réservés qui ont une signification particulière, à savoir l'ouverture et la fermeture d'un nom propre.
Ainsi, si on prends la commande d'ouverture d'un formulaire, on aura:
DoCmd OpenForm " LeFormulaireABC ", acNormal , " NomDuFiltre " , " " , acFormEdit, acWindowNormal

Les 2 conditions qui t'intéressent ici sont NomDuFiltre et qui doivent être mis entre guillemets, ce qui obligent en plus à mettre des guillemets simples lorsqu'il qu'il faut indiquer un nom à l'intérieur du nom mis entre guillemets.
Càd que si à l'intérieur d'un contrôle et d'un champ, il y a des guillemets, Access ne peut pas savoir s'il s'agit de guillemets ouvrants, fermants ou autre chose.
La seule solution est donc de renoncer simplement à mettre des guillemets à l'intérieur de tes champs qui bloquent la lecture du code sous-jacent.
Bonne suite
0
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 25
14 août 2015 à 19:06
Je ne crois pas que ce soit la seule solution, car j'ai trouvé des solutions sur d'autres forums, mais je n'arrive pas à les appliquer puisque j'utilise seulement le générateur de macro.

Mais merci quand même :)
0
Bon! Alors, c'est ce que je disais plus haut, càd qu'il faut mettre ces noms entre guillemets simples:
' __ ' et non pas doubles, qui sont réservés.
Bonne suite
0
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 25
15 août 2015 à 17:40
J'ai finalement réussi à avoir le code de ma macro :

Function test()
On Error GoTo test_Err
With CodeContextObject
DoCmd.OpenForm "Entreprises", acNormal, "", "[Entreprise]=" & "'" & .Liste9 & "'", , acNormal
End With


test_Exit:
Exit Function

test_Err:
MsgBox Error$
Resume test_Exit

End Function

Qu'est-ce que je dois modifier?

Merci!
0
Compare à la syntaxe-type que j'avais donnée et replace les termes à leur position respective:
DoCmd OpenForm " LeFormulaireABC ", acNormal , " NomDuFiltre " , "Où " , acFormEdit, acWindowNormal
et
DoCmd.OpenForm "Entreprises", acNormal, "", "[Entreprise]=" & "'" & .Liste9 & "'", , acNormal
Il faut regarder le 4ème terme, càd:
"Où " , qui est le terme qui sélectionne les enregistrements
==> "[Entreprise]=" & " ' " & .Liste9 & " ' ",
Tu , ou celui qui t'a aidé, es obligé d'aménager la continuité de l'argument par des " " et des signes de concaténation (&) puis de mettre les guillemets simples entre guillemets doubles pour que Access accepte l'écriture avec des guillemets des noms propres de tes entreprises. Alors qu'il aurait suffit d'écrire une expression du genre:
DoCmd.OpenForm "Entreprises", acNormal, "", "[Entreprise]= [Forms]![NomFormulaireDeSelection]![Liste9 ]", , acNormal

Et que feras-tu quand certains noms n'auront pas été saisis avec des guillemets, et que d'autres l'auront été?
Il me semble qu'il vaut mieux être simple, plutôt que s'engager inutilement dans des difficultés sans fin.
Bonne suite
0
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 25
17 août 2015 à 03:13
C'est le générateur de macro qui a écrit la macro ainsi. J'ai essayé ta proposition et ça ne fonctionne pas, j'ai le même message d'erreur avec les noms d'entreprise contenant des apostrophes.

Function test()
DoCmd.OpenForm "Entreprises", acNormal, "", "[Entreprise]=[Forms]![Accueil]![Liste9]", , acNormal
End With


test_Exit:
Exit Function

test_Err:
MsgBox Error$
Resume test_Exit

End Function

Je ne comprends pas la dernière partie de ton commentaire : "Et que feras-tu quand certains noms n'auront pas été saisis avec des guillemets, et que d'autres l'auront été?"

Je veux que Access accepte les noms, qu'ils aient des apostrophes ou non.
0
RachelMartel Messages postés 435 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 24 mars 2021 25
17 août 2015 à 03:35
Finalement ça fonctionne avec les modifications proposées. Le bouton ne faisait pas référence à la macro convertie.

Je n'ai pas tout compris, mais l'important c'est que ça fonctionne! :P

Merci beaucoup!
0

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

Posez votre question
Oui! Je sais que c'est le convertisseur qui avait écrit la fonction, puisqu'il est fait pour ça; les macros ne sont finalement rien d'autre qu'une série de fonctions VBA simplifiées et préprogrammées pour les débutants. Je n'ai appris le VBA qu'en décryptant les conversions des macros que j'avais écrit auparavant.
Pour ce que je disais; c'est simplement que la syntaxe des fonctions VBA est très strictes et qu'on ne peut pas faire n'importe quoi; dès lors l'introduction de guillemets est toujours problématique, et c'est pourquoi il faut remplacer les guillemets de l'écriture normale par des guillemets simples. Dans ces conditions, introduire des guillemets dans un contrôle ou un champ, va poser des grandes difficultés parce que certains enregistrements seront avec guillemets et d'autres sans. Ce sera un casse-tête impossible de gérer ça.
Bonne suite
0