Enregistrement,reprendre enregistrement précé

RougeXIII Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   -  
OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai un formulaire me permettant d'ajouter du matériel informatique .
Dans ce formulaire j'ajoute sa localisation, son model , son type, etc..

Concrètement quand je vais sur le terrain je réinscrit toujours le même lieu (car j'ai 3 à 8 matériel par lieu)
Et j'aurais aimé savoir si il etait possible de reprendre l'enregistrement précédent effectué par cette zone de texte ?

Merci d'avance de votre aide.

13 réponses

  1. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Bonsoir,
    c'est possible mais il faudrait le coder. J'ai peut-être une solution plus simple.
    Vous connaissez par avance le nombre et la liste des éléments matériels, je ferai ceci :
    1) Créer une table qui contient votre liste de matériel
    2) Dans le formulaire j'ajouterai une zone de liste déroulante qui afficherai le contenu de ma table. Ainsi à chaque fois que vous devrez choisir le matériel, il suffira de le choisir dans la liste en un simple clic.
    Si jamais vous ne savez pas comment faire, je vous l'expliquerai.
    0
  2. RougeXIII Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   2
     
    Bonjour,

    merci de la réponse, mais j'ai surment du mal m'exprimer.
    Ce que je souhaite c'est faire l'inventaire d'un matériel. C'est à dire que mon formulaire est vierge ( et ma base de donné vide ) et je dois remplis tous les champs.
    Et dans l'esprit de faciliter la saisie de ces matériels je souhaiterais que certaines zone de texte, reprenne les informations inscrit précédement . Car le lieu ( Bâtiment, Etage, pièce et service) son les même pour tous les matériels que je rencontre quand je vais dans le bureau de la DRH(par exemple) parce qu'elle à 2unité central,2 ecran, 1 imprimante. ( par exemple ) donc j'ai 5 matériel cela signifie que j'ai 5fois a remplire mon formulaire.
    0
  3. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Ce n'est pas plus clair ... :-) Si votre base de données est vide comment reprendre l' "historique" de ce que vous auriez saisit ???

    Vous dites qu'il y a plusieurs machines mais chacune peut ouvrir la même base de données ??? Donc travaillez-vous en client-serveur ?

    Supposons que c'est le cas...

    C'est donc possible mais vous n'échapperez pas à devoir coder un peu.
    Avez-vous définit une clé primaire dans votre table ?

    Je suppose que c'est le cas et j'appellerai celui-ci "PKService". Sur ce, exécutez les étapes suivantes :

    1) Mettez le formulaire où vous désirez ajouter les dernières valeurs dernièrement ajoutées en mode création

    3) Choisissez les propriétés de votre formulaire et cliquez sur l'onglet "Evènement"

    4) Cliquez sur le bouton qui affiche trois petits points à côté de l'évènement "Avant insertion" (Before insert)

    (5) Une fenêtre s'affiche et vous choisirez "Générateur de code" > En Office 2007)

    6) Vous vous retrouvez dans l'outil de développement VBA où est affiché les lignes suivantes :
    Option Compare Database
    
    Private Sub Form_BeforeInsert(Cancel As Integer)
    
    End Sub


    7) Dans cette fenêtre vous choisirez, si ce n'est déjà fait, "Outils" > "References"

    8) Vous cochez "Microsoft DAO 3.51 Object Library" et vous cliquez sur "Ok"

    9) Nous allons maintenant aller rechercher le dernier record de votre table avec les lignes suivantes avant la ligne "End Sub"

    On Error GoTo Err_
        
        Dim DB As DAO.Database
        Set DB = CurrentDb
        
        Dim strSQL As String
        '
        ' Ne connaissant pas le nom de votre table, je l'appellerai "MaTable"
        '
        strSQL = "SELECT PkService, Batiment, Etage, Piece, Service FROM MaTable "
        strSQL = strSQL & "WHERE PkService "
        strSQL = strSQL & "IN ("
        strSQL = strSQL & "SELECT Max(PkService) FROM MaTable)"
                   
        Dim rst As DAO.Recordset
        Set rst = DB.OpenRecordset(strSQL, dbopendynset)
        
        If rst.RecordCount > 0 Then
            '
            '   Ne connaissant pas le nom que vous
            '   avez donné à vos controles,
            '   j'ai appellé ceux-ci "txtBatiment", "txtService"
            '
            Me.txtBatiment = rst!Batiment
            Me.txtEtage = rst!Etage
            
            ' Etc, etc, ...
            
        End If
        rst.Close
        
        Set rst = Nothing


    Dès lors, à chaque fois que vous ajouterez un nouvel enregistrement, les valeurs ajoutées au dernier seront affichées dans votre formulaire.

    Voilà ;-)

    ps : Je teste toujours ce que je poste, cela fonctionne donc.
    0
  4. RougeXIII Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   2
     
    super vous avez compris ce que je souhaitais !

    j'ai donc essayé le VBA que vous m'avez fournis en remplaçant avec mes donner

    Private Sub Form_BeforeInsert(Cancel As Integer)
    On Error GoTo Err_

    Dim DB As DAO.Database
    Set DB = CurrentDb

    Dim strSQL As String
    '
    ' Le nom de ma table est "Lieux"
    '
    strSQL = "SELECT ID_Localisation, Batiment, Etage, Pièce, Service FROM Lieux "
    strSQL = strSQL & "WHERE ID_Localisation "
    strSQL = strSQL & "IN ("
    strSQL = strSQL & "SELECT Max(ID_Localisation) FROM Lieux)"

    Dim rst As DAO.Recordset
    Set rst = DB.OpenRecordset(strSQL, dbopendynset)

    If rst.RecordCount > 0 Then
    '
    ' Le nom des mes contrôles sont :"txt_batiment","txt_etage","txt_piece","txt_service"
    '
    Me.txt_batiment = rst!Batiment
    Me.txt_etage = rst!Etage
    Me.txt_piece = rst!piece
    Me.txt_service = rst!Service

    End If
    rst.Close

    Set rst = Nothing

    End Sub

    Et j'ai le méssage d'erreur : Etiquette non définie

    Voici quelque info supplémentaire : - mon formulaire regroupe mes 3 tables (Lieux, Materiel, information Fournisseur)
    0
    1. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
       
      Si vous avez tapé exactement ce que vous affichez l'erreur se trouve ici :

      Me.txt_piece = rst!piece

      car dans votre SQL le champ s'appele "Pièce" avec un accent !
      C'est pourquoi je vous conseille ceci :
      1) Ne jamais mettre d'espace dans les noms des tables ou des champs d'une base.
      2) Ne jamais mettre d'accent non plus

      Si votre champ s'appelle "Pièce", essayez ceci :

      Me.txt_piece = rst("Pièce")


      ou, si je me base sur le contenu de votre requête :

      Me.txt_piece = rst(3)


      Le 2, représente l'index dans l'ordre dans lequel vous sélectionnez vos champs.
      Index 0 : ID_Localisation
      Index 1 : Batiment
      Index 2 : Etage
      Index 3 : Pièce
      Index 4 : Service

      ;-)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. RougeXIII Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   2
     
    J'ai retourné les lignes de tous les sens mais rien à faire :( j'ai toujours le même message d'erreur
    et la ligne "On Error GoTo Err_" en surbrillance.

    je vous met ci dessous la base de donnée. Pour que celavous semble plus clair.

    http://dl.free.fr/getfile.pl?file=/ucLOXcBK

    (ps : je vais essayer d'etre connecté ce soir pour voir sa ensemble )
    0
  7. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Ok j'ai trouvé,
    enlevez le On Error Goto Err_
    et avant le End Sub, ajoutez ceci :
    Exit Sub
    
    Err_:
    Msgbox Err.Description
    Err.clear
    0
  8. RougeXIII Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   2
     
    Merci de votre réponse mais j'ai toujours un message d'erreur...

    "Erreur d'execution '3001' :
    Argument non valide"

    et il me met en surbrillance cette ligne : "Set rst = DB.OpenRecordset(strSQL, dbopendynset) "
    0
  9. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Avez-vous faire référence à la libraire "Microsoft DAO.3.51 Objects" ?
    Parce que sinon ça ne peut pas fonctionner ... Ne vous inquiétez pas cette une librairie standard à Office, cela existe depuis la version 2 !
    0
  10. RougeXIII Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   2
     
    Mince elle ne s'etait pas activé précédement!
    je viens de mettre "Microsoft DAO.3.6 Objects" et sa ne fonctionne toujours pas
    =(
    0
  11. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Postez le code complet du bouton, pour que je puisse vérifier ligne par ligne ce que vous avez mit svp.
    Pour info, je ne répondrai peut-être plus avant 21h30, 22h.
    0
  12. RougeXIII Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   2
     
    Ce n'est pas pour une bouton c'est pour un Formulaire.

    Je rapelle que plus haut dans la conversation j'ai mis un link de ma base de donné si vous souhaitez essayer.

    ci-dessous ce que j'ai marqué pour mon Formulaire :

    ' cette commande VBA à pour but: à chaque fois que vous ajouterez un nouvel enregistrement, les valeurs ajoutées au dernier seront affichées.

    Private Sub Form_BeforeInsert(Cancel As Integer)

    Dim DB As DAO.Database
    Set DB = CurrentDb

    Dim strSQL As String
    '
    ' Selection des Tables & champs qui sont en source de mes zones de texte
    '
    strSQL = "SELECT ID_Localisation, Batiment, Etage, Pièce, Service FROM Lieux "
    strSQL = strSQL & "WHERE ID_Localisation "
    strSQL = strSQL & "IN ("
    strSQL = strSQL & "SELECT Max(ID_Localisation) FROM Lieux)"

    Dim rst As DAO.Recordset
    Set rst = DB.OpenRecordset(strSQL, dbopendynset)

    If rst.RecordCount > 0 Then
    '
    ' Me."Nom des champs" = rst!"Source de la zone"

    Me.txt_batiment = rst!Batiment
    Me.txt_etage = rst!Etage
    Me.txt_piece = rst!Pièce
    Me.txt_service = rst!Service

    End If
    rst.Close

    Set rst = Nothing
    Exit Sub

    Err_:
    MsgBox Err.Description
    Err.Clear

    End Sub
    0
  13. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    A la ligne : Set rst = DB.OpenRecordset(strSQL, dbopendynset)

    C'est dbOpenDynaset
    0
  14. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Et pour être nickel, remettez en dessous de :
    Private Sub Form_BeforeInsert(Cancel As Integer)

    On Error Goto Err_

    A la ligne suivante de Err.Clear, ajoutez Resume Exit_

    Et la ligne précédente de Exit Sub Exit_:

    Il faut toujours mettre une gestion d'erreur c'est plus propre.
    0