Bonjour .
Dans un form j'ai champs qui stock une valeur numérique je voudrai que l'orsque je passe sur un nouveau enregistrement La valeur par défault soit la valeur du dernier enregistrement + 1.
Est-ce Possible.
Merci
Bonjour .
Dans un form j'ai champs qui stock une valeur numérique je voudrai que l'orsque je passe sur un nouveau enregistrement La valeur par défault soit la valeur du dernier enregistrement + 1.
Est-ce Possible.
Merci
slt,
http://www.developpez.net/forums/vie...soluteposition
y a juste à mettre un +1 en plus
J'ai essayé de mettrea application mais cela ne fonctionne pas.
Vois tu une erreur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Form_BeforeInsert(Cancel As Integer) Me.RecordsetClone.AbsolutePosition = Me.CurrentRecord - 1 Me!Num_Prog = Me.RecordsetClone!Num_Prog + 1 End Sub
A priori je ne vois pas d'erreur
S'il ne se passe rien, peut-être faut-il définir l'événement dans les propriétés du formulaire pour que le code s'exécute (parfois en copiant-collant le code, l'événement n'est pas activé, c-à-d [procédure évenementielle] dans l'évenement "Avant Insertion" du formulaire.)
J'ai essayé mais cela ne fonctionne pas.
Par contre si je modifie un autre champs j'ai une erreur 3265
j'ai essayé de taper le code a la main
Je Tape me.
l'assistant ce déclenche et dans la liste je trouve RecordsetClone et ensuite . et la l'assitant ne ce déclenche pas pour AbsolutePosition.
Est ce normal
ça c'est pas grâve, ça me le fait aussiEnvoyé par Yves2507
num_prog c'est bien le nom d'un champ, ou alors un contrôle?
la mise à jour du champ ne se fait que lorsque qu'on commence à modifier l'enregistrement, et si tu est en modification dans le champ num_prog en premier ça doit bloquer la mise à jour du champ par le code
tu peux essayer dans l'événement "sur activation", en testant que tu es sur un nouvel enregistrement :
En modifiant la propriété DefaultValue au lieu de modifier la valeur directement, ça évite que l'enregistrement passe en modification lorsqu'on le sélectionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub Form_Current() If Me.NewRecord Then Me.RecordsetClone.AbsolutePosition = Me.CurrentRecord - 1 Me!Num_Prog.defaultvalue = Me.RecordsetClone!Num_Prog+ 1 End If End Sub
J'ai essayé et cela ne fonctionne toujours pas.
Cela me renvoie l'erreur:
Élément introuvable dans cette collection. (Erreur 3265)
Une tentative pour faire référence à un nom dans une collection a échoué.
Causes possibles :
L'objet n'existe pas dans cette collection. Assurez-vous que l'objet est ajouté à une collection avant d'y faire référence.
Il existe plusieurs objets possédant ce nom dans la collection et l'utilisation de ce nom est une référence ambiguë. Faites référence à l'objet par sa position ordinale dans la collection (par exemple, Recordsets(3)).
J'ai essyé de changer le nom de mon champs mais toujours pareil !!!!!
c'est étrange ça fonctionne bien moi (access 2000)
essaye de placer un msgbox au début de l'événement :
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part MsgBox Me!Num_Prog
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part MsgBox Me.Num_Prog
enfin si si ton champ est bien num_prog c'est peut-être une histoire de syntaxe toute bête, je me souviens avoir des soucis un jour avec le me sous access 97 que j'utilisais mal
Code : Sélectionner tout - Visualiser dans une fenêtre à part MsgBox Me.fields("Num_Prog").value
Cela ne fonctionne pas.
J'ai essayé un truc plus simple:
Cela fonctionne et me donne la valeur de mon champs ID (clef) + 1
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) If Me.NewRecord Then Me.NumProg = Me.CurrentRecord Me.NumProg = Me.NumProg + 1 End If MsgBox Me.NumProg End Sub
Mais ce n'est pas ce que je veux.
Moi je voudrai la valeur du dernier enregistrement du champs numprog + 1.
J'ai l'impression que access ne comprend pas :
Moi non plus d'ailleur
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.RecordsetClone.AbsolutePosition
J'arrive au résultat avec une requete
N'est il pas possible de mettre du SQL en valeur par Défault
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT ([num prog]+1) AS progdef FROM TBL_Programmes_pièce GROUP BY ([num prog]+1);
[Modération, cafeine : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]
non pas directement (et ta requête est bizarre ceci dit)N'est il pas possible de mettre du SQL en valeur par Défault
et si tu veux récupérer la valeur précédente je ne vois pas comment faire, sauf si c'est incrémenté et que tu peux prendre la valeur max
mais le code que je t'ai donné marche bien sur access 2000, t'as quelle version toi?
Dans ta requête ton champ se nomme [Num Prog], alors que dans ton code du début tu as mis Num_Prog
C'est quoi alors le nom correct?
Cela fonctionne javais un problème de syntaxe avec numprog.
Désoler pour le casse tete et merci beaucoup
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