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
Tessel75 - 17 août 2015 à 12:13
A voir également:
- Macro ouvrir formulaire VS Apostrophes
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Udp vs tcp - Guide
- Comment ouvrir un fichier docx ? - 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
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
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 :)
Mais merci quand même :)
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
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
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!
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
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
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.
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.
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
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!
Je n'ai pas tout compris, mais l'important c'est que ça fonctionne! :P
Merci beaucoup!
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
14 août 2015 à 00:18
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 :)