Vb

Fermé
nad - 4 mars 2003 à 10:59
 nad - 6 mars 2003 à 15:29
coucou,
g dois faire une sorte de boucle dans mon code vb sur access
celle-ci doit servir à remplir les champs une fois être allé sur le bouton
cela doit affecter une date aux champs (ça serai rempli ds la table)qui sont à affichés sur le formulaire
g n c pas trop cmt faire
g essayé d faire avec une requête main non dc si vs avez des idées
elles st les bienvenues
A voir également:

38 réponses

coucou,
alors j'ai un formulaire où j'ai soit la possibilité de saisir soit l'affichage d'un calandrier qui me permet de choisir le jour
une fois la date entrée j'ai un bouton " ouvrir" qui me permet d'ouvir le formulaire "dossier" dans ce bouton j'ai :
stLinkCriteria = "[date_cmde]=" & "#" & Me![datecmde] & "#"
qui me permet de faire le lien entre les deux dates
donc dans le formulaire "dossier" j'ai tous les dossiers qui ont été commandés à cette date ( la date choisie dans le premier formulaire)
j'ai un champs dans ma table commande qui est date_envoie c'est la date à laquelle on envoie l'ensemble des dossiers
je veux que dès que j'appuie sur le bouton envoie la date d'envoie s'affecte à tous les dossiers affichés
je n'arrive pas à faire cela, ça ne s'affiche que pour le premier dossier
voila j'espère que ça sera mieux compris parce que j'ai vraiment besoin d'aide il faut absolument que je le finisse
merci
0
Il faut traiter les enregistrements de la table directement. Essaye qqchose comme ceci:

Supposons
que ta table s'appel "tDossier"
que le champ de ton form contenant la date s'appel "nDate"

#XXX# --> commentaires

Private Sub NonDeTonBouton_Click()

Dim mDb As DataBase
Dim mRs As Recordset

Set mDb = CurrentDb #Ouverture de la DB#
Set mRS = mDB.OpenRecordset("SELECT * FROM tDossier WHERE [date_envoie ] = ' " & Me!nDate.Value & " ';") #Ouverture de la table contenant les enregistrements à modifier#

mRs.MoveFirst
mRs.Edit #passer en mode édit#

Do While (Not mRs.EOF) #Tant que la fin du fichier n'est pas atteinte#
mRS("date_envoie ") = Me!nDate.Value #Modifier la date#
mRSMvtsFiltredSorted.MoveNext #Aller à l'enregistrement suivant#
mRS.Update #Faire une màj de la table#
Loop

mDb.Close
End Sub

ATTENTION: pour que cela marche, il faut que la date soit présente dans le formulaire contenant le bouton.
0
Une correction:

pas "mRSMvtsFiltredSorted" mais "mRs"

:-)
0
après avoir fait cela une erreur arrive lors de l'éxécution
" pas d'enregistrement courant"
il faut savoir que j'affecte à la date d'envoi la date du jour donc comme dans la table ce champs est vide peut etre que c'est pour ça que l'erreur apparait
enfin je crois
0
S'il te dit "pas d'enregistrement courrant" c'est qu'il ne trouve aucun dossier avec la date que tu spécifie.

Soit prudent avec les dates en Access. Le format de date de ta table doit être identique au format de date du champ dans le form.

Tu peux débugger pour voir où exactement il s'arrête. Pour celà, dans ta fenêtre de code, tu clics dans la zone grise à gauche. Une boule rouge apparaît. Le programme s'arrêtera à cet endroit. En appuiant sur "F8", je crois, tu le fais avancer ligne par ligne. Tu veras où il se plante.

Tu peux aussi inséré des msgbox du style
MsgBox nDate.value pour qu'il affiche, durant l'exécution, la valeur de la date.

:-)
0
alors j'ai mis dans le champs de la table au format date, général et j'ai fait de meme dans le champs du formulaire
mais à l'éxécution j'ai une erreur du genre "type de données incompatible " et ça concerne la selection dans la requete ( je l'ai vu par le debogage)
0
Je te suggère de mettre comme format "Short date".

Ou alors ddmmyyyy.

essaye également sans les # #

Je fais un essais et reviens.

:-)
0
j'ai mis comme masque de saisie ddmmyyyy au deux ( dans la table et dans le formulaire) mais ça reviens à la premiere erreur
" pas d'enregistrement courant" et c'est mRs.MoveFirst qui est souligné
0

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

Posez votre question
J'ai ta solution. Essaye ceci

Private Sub Boutton_Click()
Dim mDb As Database
Dim mRs As Recordset

Set mDb = CurrentDb
Set mRs = mDb.OpenRecordset("tDossier", dbOpenDynaset, dbSeeChanges, dbPessimistic)


mRs.MoveFirst

Do While (Not mRs.EOF)
If mRs("dateCmd").Value = Me!maDateSelection.Value Then
mRs.Edit
mRs("dateEnvoi").Value = Date()
mRs.Update

End If
mRs.MoveNext
Loop
mDb.Close

End Sub
0
oui mais en fait tout ce qui concerne les dossiers est dans une table "ligne commande"
et la table commande contient la date commande, la date d'envoie et sa clé
donc en fait j'ai deux table à utiliser ici alors comment je fait dans
Set mRs = mDb.OpenRecordset("tDossier", dbOpenDynaset, dbSeeChanges, dbPessimistic)
0
Là il faut que tu m'en dises plus. Que contiennent tes deux tables?
Quel champs faut-il mettre à jour suivant quel critère?
Quel sont les clés de tes deux tables?

Si je comprend bien, tu as un form qui contient un champ de saisie "date". Quand tu clics sur un bouton, tu veux que le champ date d'envoie de la table commande soit mis à jour (=Date() ) si la date de commande de l'enregistrement = date du champ de saisie.
Y-a-t il un autre critère? Dois tu mettres à jour des données dans ta table "ligne commande"?

Je suis un peu paumé là.

Je vais manger. Je suis de retours vers 14H. Donc prend ton temps pour expliquer ce que tu veux CLAIREMENT.
:-)
0
alors j'ai essayé mais comme la date de la commande et date d'envoie sont dans la table commande j'ai mis Set mRs = mDb.OpenRecordset("commande", dbOpenDynaset, dbSeeChanges, dbPessimistic)
mais en exécutant il y a une erreur " variable non définie" et ça concerne dbOpenDynaset
0
Là il faut que tu m'en dises plus. Que contiennent tes deux tables?
Quel champs faut-il mettre à jour suivant quel critère?
Quel sont les clés de tes deux tables?

Si je comprend bien, tu as un form qui contient un champ de saisie "date". Quand tu clics sur un bouton, tu veux que le champ date d'envoie de la table commande soit mis à jour (=Date() ) si la date de commande de l'enregistrement = date du champ de saisie.
Y-a-t il un autre critère? Dois tu mettres à jour des données dans ta table "ligne commande"?

Je suis un peu paumé là.

Je vais manger. Je suis de retours vers 14H. Donc prend ton temps pour expliquer ce que tu veux CLAIREMENT.
:-)
0
alors j'explique le tout
table "LigneCommande" qui a comme champs : num_LC qui est la clé, numdos, nomdos, date-réception et commentaire
celle-ci a comme clé étrangère num_cmde

table "Commande" qui a comme champs: num_cmde, date_cmde et date_de_réalisation qui est en fait la date d'envoie dont j'ai parlé

voila pour les deux table que j'utilise
Maintenant on en viens aux formulaires

formulaire "date", j'y ai un edit box qui sert à saisir la date de commande mais il y a une autre possibilité pour l'utilisateur c'est celle de cliquer sur la date voulue dans un calendrier qui en fait le sous formulaire de celui-ci
il y a aussi le bouton ouvrir qui ouvre le formulaire "dossiers selon la date de la commande" et un autre bouton qui sert à fermer le formulire

pour le formulire "dossiers selon la date de la commande" alors dès son ouverture on à l'apparition des dossiers qui ont était commandé à cette date
puis j'ai un bouton qui permet d'imprimer un état
enfin je voudrai pouvoir affecter la date de réalisation aux dossiers qui sont affichés c'est à dire que cette date marque le moment où l'administrateur va recolter les commandes des differents utilisateurs et va les envoyer
donc cette date prend la date du jour et elle doit être affectée à toutes les commandes des dossiers ( dans mon MCD une commandes peut contenir plusieurs ligne commande)

voila j'espère que c'est plus clair
0
Donc, si on fait une sélection (dans la table commande) de tous les enregistrements avec date_cmde = date du formulaire, on a la liste des enregistrements à mettre à jour. C'est ça?

Si c'est le cas, remplace simplement
Set mRs = mDb.OpenRecordset("tDossier", dbOpenDynaset,
dbSeeChanges, dbPessimistic)
par
Set mRs = mDb.OpenRecordset("Commande", dbOpenDynaset, dbSeeChanges, dbPessimistic)

ATTENTION, pour que les nouvelles dates apparaissent dans le formulaire, il faut faire un update (ou l'ouvrir et le fermer)

:-)
0
Pour faire un refresh du form, écris

Me.Refresh

juste avant le End Sub

:-)
0
C'est ce que j'ai fait mais il y a une erreur, il me dit variable non definie et quand j'appuie sur ok ( du message d'errur qui est apparu) et bien c'est DbOpendDynaset qui est souligné
donc voila où j'en suis
0
Bon, je reprend,

Private Sub Boutton_Click()
Dim mDb As Database
Dim mRs As Recordset

Set mDb = CurrentDb
Set mRs = mDb.OpenRecordset("Commande")


mRs.MoveFirst

Do While (Not mRs.EOF)
If mRs("date_cmde ").Value = Me!maDateSelection.Value Then
mRs.Edit
mRs("date_de_réalisation ").Value = Date()
mRs.Update

End If
mRs.MoveNext
Loop
mDb.Close
Me.Refresh
End Sub
0
j'ai toujours la meme erreur
0
????
Même en ayantt supprimé la variable? Donc
Set mRs = mDb.OpenRecordset("Commande") sans aucun autre paramètres?

Fais un deboggage et dis mois où ils s'arrête et quel est EXACTEMENT le message d'erreur.

:-)
0
non c'est parce que j'avais pas encore vu ton message
sinon j'ai fais ce que tu m'a dis mais quand tu pas
Me!maDateSelection.Value
oui que dois je mettre à la place de madateselection car c'est dans le premier formulaire que je saisie ?????
0
Alors:

1. tu crée un module (dans l'onglet Modules) que tu nomes "Globals" et tu écris (exactement):

Public gDateSel As Date

2. Dans ton premier formulaire. Au début de la routine qui provoque l'ouverture du deuxième formulaire (Private Sub XXX_Click() ) tu écris:

gDateSel = Me!NonDuChampDeSaisie.Value

où !NonDuChampDeSaisie est le nom du champ dans lequel du saisis date (ATTENTION, pas son "caption").

3. Tu remplace dans la routine ci dessus
Me!maDateSelection.Value Par gDateSel

:-)
0
oui après avoir fait ça j'ai une erreu " element non trouvé dans cette collecton" et quand je vais sur débogage et bien c'est
mRs("date_réalisation ").Value = date
qui est souligné
pourtant date_réalisation est bien écris comme ça dans ma table
0
Enlève l'espace:
mRs("date_réalisation") et non mRs("date_réalisation ")


Le tout petit détail qui tue lol
:-)
0
Merci !!!!!!!!!!!!
c'est impect!!!!!!!
0
Pfiuuuuu !!!! Je commençais à avoir des doutes sur mes capacités

:-)
0
non je te rassure t'es vraiment très fort
et merci encore
0