Macro ouvrir formulaire VS Apostrophes
Résolu
RachelMartel
Messages postés
435
Date d'inscription
Statut
Membre
Dernière intervention
-
Tessel75 -
Tessel75 -
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!
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:
- Macro ouvrir formulaire VS Apostrophes
- Whatsapp formulaire opposition - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Formulaire de réclamation facebook - Guide
5 réponses
Bonjour,
"sauf pour les enregistrements contenant un apostrophe"
Qu'appelles-tu les enregistrements contenant un apostrophes? Et quels problèmes apparaissent?
"sauf pour les enregistrements contenant un apostrophe"
Qu'appelles-tu les enregistrements contenant un apostrophes? Et quels problèmes apparaissent?
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 " , "Où " , acFormEdit, acWindowNormal
Les 2 conditions qui t'intéressent ici sont NomDuFiltre et Où 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
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 " , "Où " , acFormEdit, acWindowNormal
Les 2 conditions qui t'intéressent ici sont NomDuFiltre et Où 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
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
' __ ' et non pas doubles, qui sont réservés.
Bonne suite
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!
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!
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
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
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.
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.
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
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
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 :)