Bonjour,
Nous voulons créer une table pour laquelle la valeur par défaut d'un champ serait la valeur de la ligne précédente pour le même champ.(avec initialisation )
Est-ce possible ? Et si oui comment procéder ?
Merci d'avance
Bonjour,
Nous voulons créer une table pour laquelle la valeur par défaut d'un champ serait la valeur de la ligne précédente pour le même champ.(avec initialisation )
Est-ce possible ? Et si oui comment procéder ?
Merci d'avance
bjr,
Il n'y a pas de notion de ligne précédente dans une table.
Tu peux essayer de faire ça au niveau du formulaire à l'insertion d'un nouvel enregistrement en VBA.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Sub Form_BeforeInsert(Cancel As Integer) on error goto Gestion_erreurs Me.RecordsetClone.AbsolutePosition = Me.CurrentRecord - 1 Me!MonChamp= Me.RecordsetClone!MonChamp Gestion_erreurs: if err.number <>0 then msgbox err.description End Sub
Rebonjour,
On a mis ce programe dans le code mais ca fonctionne pas.
En fait, on avait penser passer par valeur par défaut qu'on maitriserai mieux que VBA,
Peut on mettre dans la définition de la valeure:
=[non du champ]( "et la on mait le numero de la ligne (avec le num auto) -1)
Je sais pas si c'est possible.
Je ne pense pas qu'on puisse faire ça avec une valeur par défaut sans VBA.
Avec Access il arrive toujours un jour où on doit faire un choix :
- soit utiliser VBA pour programmer de nouvelles fonctionnalités
- soit abandonner la fonctionnalité voulue...
J'explique un peu plus ma solution.
Pour mettre en place le code VBA :
- ouvrir le formulaire en mode création
- aller dans ses propriétés
- dans l'onglet événements, choisir [procédure événementielle] sur l'événement "Avant insertion"
- cliquer sur les trois petits points [...] à droite de [procédure événementielle]
- le module de code s'ouvre avec la définition de la procédure pré-remplie
- il suffit ensuite d'ajouter les lignes à l'intérieur pour avoir le code ci-dessous
J'ai commenter le code pour l'expliquer un peu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 ' Code s'exécutant à chaque insertion d'un nouvel enregistrement Private Sub Form_BeforeInsert(Cancel As Integer) ' En cas d'erreur, l'exécution "saute" à l'étiquette Gestion_erreurs: en bas on error goto Gestion_erreurs ' Me.RecordsetClone est un clone du jeu de données affiché sur le formulaire ' On se déplace dans ce clone à la ligne courante - 1 Me.RecordsetClone.AbsolutePosition = Me.CurrentRecord - 1 ' On remplace le contenu du champ MonChamp dans la ligne courante (celle en cours d'insertion) ' par le contenu de la ligne du clone (donc la dernière ligne du jeu de données du formulaire) ' Il faut remplacer ici MonChamp par le nom du champ qui doit être mis à jour par défaut Me!MonChamp= Me.RecordsetClone!MonChamp ' Ci dessous on affiche un message en cas d'erreur Gestion_erreurs: if err.number <>0 then msgbox err.description End Sub
Si le nom du champ comporte des espaces il faudra l'encadrer avec des crochets.
En fait, pour être précis :
cela fonctionne à moitié : c'est-à-dire que lors de la saisie dans le formulaire, la date précédente est bien notée. Le hics c'est qu'ensuite la date n'est pas enregistrée dans la table. enfin c'est du moins ce que je constate.
j'ai regardé sur de nombreux site et de tutoriels et je n'ai rien sur ce sujet, c'est pourquoi je me permet de le poster.
Je suis dailleurs étonner de ne rien de trouver dessus, car ça pourrait être très pratique lors de la saisie de données (par exemple pour lequels un certains nombres de données se répètent).
Peut-être y a t-il un autre moyen ?
Merci encore
DELPHINE
eXCUSE MOI J4AVAIS PAS VU TON POSTE !
je vais essayé et te tiens au courant ! Merci pour ton aide
Delphine
Voilà, apres avoir procédé de la manière que tu as précisée, lorsqu'on ajoute un élément grâce au formulaire, rien ne se passe.
De plus en ajoutant un MsgBox dans ce bout de code pour verifier qu'il est bien executé, rien ne se passe non plus. J'en déduis donc que le code n'est pas interprété.
Y a-t'il une procédure supplémentaire pour forcer access à le lire? (de meme j'ai tenté de mettre un point d'arret dans le code pour débugger, mais une fois de plus aucune réaction?)
En te remerciant de ton aide !!!
Delphine
Okay, après bidouillage, Merci pour ton aide si précieuse. Ton code marche très bien. C'est juste moi qui faisait de mauvaises manipulations !(désolé je débute totalement dans l'utilisation d'Access...)
Merci encore et bonne continuation
Delphine
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager