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

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.

Bobot (l’IA à votre service)
  1. non je te rassure t'es vraiment très fort
    et merci encore
    0
    1. Pfiuuuuu !!!! Je commençais à avoir des doutes sur mes capacités

      :-)
      0
      1. Merci !!!!!!!!!!!!
        c'est impect!!!!!!!
        0
        1. Enlève l'espace:
          mRs("date_réalisation") et non mRs("date_réalisation ")

          Le tout petit détail qui tue lol
          :-)
          0
          1. 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
            1. 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
              1. 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
            2. ????
              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
              1. 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
                1. 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
                  1. 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
                    1. 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
                    2. Pour faire un refresh du form, écris

                      Me.Refresh

                      juste avant le End Sub

                      :-)
                      0
                  2. 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
                    1. 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
                  3. 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
                    1. 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
                  4. 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
                    1. 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
                      1. 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
                        1. Je te suggère de mettre comme format "Short date".

                          Ou alors ddmmyyyy.

                          essaye également sans les # #

                          Je fais un essais et reviens.

                          :-)
                          0
                      2. 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
                        1. 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
                      3. 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
                        1. 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
                        2. Une correction:

                          pas "mRSMvtsFiltredSorted" mais "mRs"

                          :-)
                          0
                      4. ?? 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
                        0
                        1. 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
                          0
                          • 1
                          • 2