Vb - Page 2

  1. 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
  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. 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
  4. 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. 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. 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
      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. 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
      4. 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. 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. ????
            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. 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. 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. Enlève l'espace:
                mRs("date_réalisation") et non mRs("date_réalisation ")

                Le tout petit détail qui tue lol
                :-)
                0
                1. Pfiuuuuu !!!! Je commençais à avoir des doutes sur mes capacités

                  :-)
                  0
                  1. non je te rassure t'es vraiment très fort
                    et merci encore
                    0
                    Précédent
                    • 1
                    • 2