Acc. 2016 - Générateur d'Expressions - Fonctions intégrées - SQL

Fermé
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017 - 2 sept. 2017 à 22:30
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 3 sept. 2017 à 18:34
Bonsoir,

J'ai paramétré une BDD dans Access 2016 (Windows7) pour une association et je souhaite mettre en place une incrémentation automatique du numéro de Recu fiscal par une DataMacro avant validation de l'enregistrement.
Je souhaite donc utiliser la Fonction Dmax/MaxDom mais je ne la trouve pas dans les fonctions intégrées du générateur d'expressions.
En fait, tout le bloc "Regroupement SQL" manque. Je pense qu'il faut activer qqchose mais je ne sais pas quoi ni où...

Un grand merci par avance à l'ame généreuse qui voudra bien m'aider.

Bonne soirée
A voir également:

7 réponses

yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
2 sept. 2017 à 23:34
bonsoir, que se passe-t'il si tu encodes le nom de la fonction?
0
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
2 sept. 2017 à 23:50
Bonsoir,
Merci de te pencher sur mon pb.

Si je tape la fonction, j'ai un message d'erreur qui dit :
l'action de Macro (DéfinirChamp) possède une valeur non valide pour l'argument.

J'ai essayé de faire cela dans une requete, ma formule fonctionne mais le pb est que pour tous les enregistrements toppés, mes champs "N° de RF" ont la même valeur (valeur trouvée par DMax + 1).

Désolée si je ne suis pas claire :-), mais je suis une apprentie débutante.

J'ai également tenté de mettre ma fonction d'incrémentation dans un module VBA, mais impossible de trouver l'action "ExecuterCode dans le catalogue d'actions proposé par les DataMacro.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
3 sept. 2017 à 09:48
peux-tu partager le code SQL de ta requête, ou, au minimum, l'appel de la fonction DMax?
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
3 sept. 2017 à 13:47
Je pense qu'il est possible d'exécuter du code VBA à partir d'une DataMacro: en utiisant une fonction VBA pour mettre à jour une variable locale de la macro. Cette fonction VBA peut faire tout ce que tu souhaites.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
3 sept. 2017 à 13:33
je pense que cela fonctionne si, dans (DéfinirChamp), tu appelles une fonction VBA au lieu de DMax.
Exemple de fonction VBA:
Public Function maxref() As Long
maxref = DMax("N° de RF", "Dons")
End Function
0
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
3 sept. 2017 à 15:26
Bonjour,
Merci pour ta repose et pour ton temps.
Mais j'ai la même erreur qu'avec DMax.

J'ai tenté deux requêtes ( une de mise à jour) et une de selection mais avec la même formulation dans la formule, donc finalement j'obtiens le même rpoblème. Toutes les valeurs du champs N°RFgenere ont la même valeur.

- Requete 1 : UPDATE Donateurs INNER JOIN Donations ON Donateurs.ID = Donations.IDDonateur SET Donations.Champ2 = DMax("[N°RFgenere]","[Donations]",+1)+1;

-Requete 2 (faite pour exporter toutes les informations dont j'ai besoin pour faire un publipostage Word/Excel) :
SELECT Donateurs.Nom, Donateurs.Prénom, Donateurs.Civilité, Donations.[Montant en lettres], Donateurs.Adresse1, Donateurs.Adresse2, Donateurs.Adresse3, Donateurs.[Code postal], Donateurs.Ville, Donateurs.Pays, Donateurs.Pol1, Donateurs.Pol2, Donations.[Date de la donation], Donations.Montant, Donations.[Forme du don], Donations.[Type de don], Donations.[Nature du don], Donations.[Mode de paiement], Donations.[RF à faire], Donations.[Statut RF], (DMax("[N°RFgenere]","[Donations]",+1)+1) AS Expr2
FROM Donateurs INNER JOIN Donations ON Donateurs.ID = Donations.IDDonateur
WHERE (((Donations.[RF à faire])=Yes));

Merci par avance.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
3 sept. 2017 à 15:55
je propose de faire fonctionner via la DataMacro,
peux-tu partager des informations:
la fonction fonctionne-t'elle quand tu l'appelles en VBA?
peux-tu décrire comment tu as défini l'appel à la fonction dans la datamacro?
peut-être partager ton fichier ou des images?
0
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
3 sept. 2017 à 16:41
La fonction maxref fonctionne.
Je l'ai collé dans une requête et le résultat obtenu est le bon. Elle ressort bien la valeur max des données concernées (N°RFgenere).

Pour la fonction mon module ressemble à cela :

Option Explicit
---------------------------------------------------------------------------------------
Sub RF()

End Sub
---------------------------------------------------------------------------------------
Public Function maxref() As Long
maxref = DMax("N°RFgenere", "Donations")
End Function

Le problème c'est qu'avec les DataMacro dans Access 2016, on ne peut utiliser que les fonctions intégrées dans Access, même si nous définissons une "Public Function", elle n'apparait pas à cet endroit mais est complètement fonctionnelle dans des requêtes (par exemple).
Idem pour les macros : A partir du module VBA ci dessus, je suis supposée avoir créé une macro "RF". Or, elle n’apparaît pas dans ma liste de macro que je peux executer.

Impossible de trouver l'action "ExecuterCode" . Donc je ne sais pas comment appeler ma fonction :-(

J'ai eu le même problème pour transformer mes Montants en chiffres en lettres. J'ai résolu ce souci avec une requête d'ajout.

Je suis perdue.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
3 sept. 2017 à 16:51
moi je n'ai aucun problème pour utiliser maxref()+1 comme valeur dans (DéfinirChamp) de ma DataMacro.
maxref() n’apparaît pas, en effet, à cet endroit, mais fonctionne parfaitement quand je la tape à cet endroit.
0
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
3 sept. 2017 à 16:53
Mince moi cela ne fonctionne pas.

Il y a peut-être un "truc" à activer et que je n'ai pas.
Aurais-tu une idée ?
0

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

Posez votre question
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
3 sept. 2017 à 16:59
J'ai eu droit à un message d'erreur qui ne dit que la valeur n'est pas compatible avec le web.
Mais je m'en moque du web. Ma BDD ne sera pas publiée.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
3 sept. 2017 à 17:08
moi j'ai ceci comme datamacro "avant changement", et cela me semble bien fonctionner (sauf quand j'ajoute en une fois plusieurs enregistrements):
(if) ([ref]=0) Or IsNull([ref])
 (DéfinirChamp)
 ref
 maxref()+1
(end if)
0
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
3 sept. 2017 à 17:15
Rien à faire,cela ne fonctionne pas.
Ma BDD doit être dans un format "bizarre" type 'compatible avec le web pour que cela soit bloquant mais je ne sais pas où se définit ce choix ni si on peut revenir en arrière.

En attendant, un grand merci pour ton temps et ton aide.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
3 sept. 2017 à 17:38
peut-être partager ta base, sans données confidentielles?
0
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
3 sept. 2017 à 17:49
C'est super gentil mais elle est très remplie.

En fait, je crois que j'ai trouvé. C'est un truc que je en savais pas.
Je suis dans ACC 2016 et ma BDD a été créée comme une BDD web et non de bureau. Et en fonction de cela, nous n'avons pas les mêmes possibilités. Grunch, Grunch et re-Grunch.
(https://support.microsoft.com/fr-fr/office/cr%c3%a9er-une-base-de-donn%c3%a9es-access-%c3%a0-partager-sur-le-web-cca08e35-8e51-45ce-9269-8942b0deab26?ui=fr-fr&rs=fr-fr&ad=fr

Je viens donc de créer une nouvelle BDD de type "Bureau" et j'ai importé mon autre BDD (de type web).
Dans la DataMacro, je n'ai plus de message d'erreur concernant la "Valeur" du Champ à définir.
Par contre, j'ai un petit message d'erreur quand je saisi une donnée qui dit "Types incompatibles".
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
3 sept. 2017 à 17:58
"Types incompatibles": par exemple si tu mets un texte et que Access attend un nombre.
0
Nefertari67 Messages postés 9 Date d'inscription samedi 2 septembre 2017 Statut Membre Dernière intervention 3 septembre 2017
3 sept. 2017 à 18:06
Un immense merci pour ton temps, ta disponibilité, tes conseils et ta patience.

"Petit scarabée reconnaissant :-)"
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
3 sept. 2017 à 18:34
avec plaisir!
(si c'est résolu, peux-tu marquer comme résolu?)
0