Vb
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
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
38 réponses
Résumé de la discussion
Il s’agit de mettre en place une boucle en VBA sous Access pour remplir des champs sur un formulaire et attribuer une date, qui doit être enregistrée dans la table au clic sur le bouton. La solution clé consiste à créer un module global nommé Globals et une variable publique gDateSel de type Date, afin de partager la date entre les formulaires. Ensuite, dans le premier formulaire, avant d’ouvrir le second, il faut assigner gDateSel = Me!NonDuChampDeSaisie.Value et remplacer Me!maDateSelection.Value par gDateSel dans les appels ultérieurs utilisés. En cas de doute, il faut vérifier les noms exacts des contrôles et s’assurer que la date est bien initialisée dans le module Globals avant tout appel à la seconde fenêtre.
-
non je te rassure t'es vraiment très fort
et merci encore -
Pfiuuuuu !!!! Je commençais à avoir des doutes sur mes capacités
:-) -
Merci !!!!!!!!!!!!
c'est impect!!!!!!! -
Enlève l'espace:
mRs("date_réalisation") et non mRs("date_réalisation ")
Le tout petit détail qui tue lol
:-) -
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 -
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 ?????-
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
:-)
-
-
????
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.
:-) -
j'ai toujours la meme erreur
-
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 -
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 -
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-
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)
:-) -
-
-
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-
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.
:-)
-
-
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)-
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.
:-)
-
-
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 -
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é -
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) -
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-
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.
:-)
-
-
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-
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. -
-
-
?? Là, je suis largué !!
Tu as, dans le bouton du premier formulaire, un lien avec la date ?
Tu as fait comment ? Tu as utilisé la propriété .Tag du bouton ??
Là, je suis de plus en plus à l'ouest.... Plus ça va, moins je comprends... Tu tires tes données par la source du formulaire ?
Où j'ai le cerval qui gèle, où c'est la vieillerie, mais je ne te suis pas ???? Je pige 0....
Qui comprends ? Teebo ? A l'aide !! (il est tard, je me donne des excuses...)
Wild and Free -
non je tire mes données du formulaire par sa source
et j'ai dans le bouton du premier formulaire un lien avec la date pour que quand on ouvre le deuxieme on est les dossiers consernant la date
- 1
- 2
Suivant