IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

[FORMULAIRE] saisies multiples


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut [FORMULAIRE] saisies multiples
    Bonjour à tous.
    Tout d’abord, excusez le détail de ce premier post et n’hésitez pas a me dire si je peux continuer sur ce forum ou plutôt me tourner vers un autre forum-site plus destiné aux bleus comme moi

    Après mure réflexion je me lance dans cette première demande… après avoir vu la terrible vidéo de MH sur les ++++ et encore + d’Access par rapport à Excel..

    Aussi, voulant voir par moi-même tester la puissance et la facilitée sans égale de MSAccess, je me suis dit : et pourquoi pas ! Alors, j’ai téléchargé la beta 2010 et me suis dit : « wahouuuuu , super ».
    Mais bon, quand même, j’ai voulu commencer soft, ai révisé toutes mes vieilles formations Access97 et me suis lancé un petit défi… qui me met le bec dans l’eau, moi qui ne suis pas canard du tout…
    Voici le problème, simple, posé :
    J’ai un parc de photocopieurs et je souhaiterai faire du reporting grâce aux beaux états d’Access.
    J’ai donc 2 tables, tbl_parc et tbl_relevé.

    Dans la tbl_parc, j’ai le détail de mes appareils avec, en plus, un champs O/N pour définir s’il sont couleur ou noir.

    Dans la tbl_relevé, j’ai :
    Champs date ; champs appareil ; champs compteur couleur ; champs compteur noir

    Les 2 tables sont liées 1 tbl_parc vers tbl_relevé
    Jusque là tout va bien.
    Mais j’ai cherché à mettre en place un formulaire qui me permettrait de saisir rapidement l’ensemble de mes relevés compteur pour les ajouter à la tbl_relevéLe formulaire est en soit simple, puisqu’il liste les appareils, avec la case a cocher pour savoir s’il sont couleur ou pas et les cases pour saisir les relevés.
    En haut de ce formulaire, un champ date qui doit être dupliqué pour chaque ligne renseignée.

    La validation de ce formulaire va enregistrer les lignes dans la table tbl_relevé avec, pour info, une ligne composée de date-copieur-relevéC-relevéNB si un ou les deux compteurs sont renseignés, sinon, bien évidemment, pas besoin de renseigner une ligne à zéro

    Voilà, c'est certainement bête, mais je n'arrive pas a m'en sortir avec ce formulaire.

    Je vous remercie par avance pour toute info succeptible de me guider dans ma quête du saint graal

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Bonjour et bienvenue !

    Il y a probablement plusieurs solutions, mais voici ce que je te propose :
    - eviter espaces et accents dans les noms de champs
    - ajouter 2 champs dans le parc : "dernier_noir" et "dernier_couleur"
    - proposer la mise à jour de ces champs dans un formulaire "liste" classique
    - faire un bouton "valider" qui par du code VBA ajoute ces valeurs dans la table des relevés si la date du jour est supérieure à la date du dernier relevé

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Merci nico84 pour l'accueil et pour m'avoir montré le chemin
    Effectivement, il y a plusieurs moyens. Voici celui que je suis en train d'exploiter :

    Ajout des champs DernierReleveC et DernierReleveNB dans la tbl_parc

    Requête avec paramètre date sur la tbl_parc pour avoir la liste des copieurs et une colonne avec la date en paramètres pour tous les copieurs.

    Le formulaire basé sur la requête... donne ça

    Par contre, j'ai essayé 2 choses supplémentaires sur lesquelles je bloque aussi

    1) ignorer le relevé des copies couleur "LastCopieC" si le copieur n'est pas "couleur"
    j'ai tenté dans les paramètres du champ "LastCopieC" au niveau du formulaire pour voir si on peut, par exemple, l'activer ou le vérouiller SI la case a cocher = vrai.
    Pas de piste pour l'instant... je pensais naîvement que la gestion des formules était calquée sur le modèle des formules d'Excel
    Et s'il faut mettre les mains dans le camboui, via un évenement, je suppose qu'il n'y a point de salut sans VBA ?


    2) enfin, une fois arrivé à la fin de la saisie de mon formulaire, pour lancer automatiquement une procédure de mise à jour, comme je ne peux pas ajouter, sauf erreur, de bouton d'action dans cette configuration, il faut que je passe par ou ?
    [EDIT] POUR LE 2, c'est bon Les voyages en RER font travailler les méninges...ON PEUT RAJOUTER UN BOUTON D'ACTION DANS L'EN-TETE
    (bouton de commande, fermer formulaire) mais bon, après faut que je vois ce que je met comme action...

    En plus, dans les options du formaulaire, puisqu'il ne s'agit que d'un relevé et qu'aucune création de ligne n'est exigée, j'ai mis en propriété Formulaire>Données>Ajout autorisé>non

    D'avance merci pour vos pistes... qui me permettront de ne pas me laisser mettre au tapis trop vite par Access

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Ah les joies du RER...

    Pour le 1) il est possible de mettre un format conditionnel sur le champ : ainsi il peut être grisé si le copieur est N&B

    Pour le 2) le bouton peut aussi être placé en pied de page
    Sur click il faut alors placer un programme en VBA par exemple comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    recordset.movefirst
    while not recordset.eof
      if nz(dlookup("date_releve","releve","appareil='" & appareil & "'"),0)<date then
        CurrentDb.Execute "INSERT INTO releves (appareil, quand, combien) VALUES ('" & appareil & "',date()," & lastcopienb & ");", dbFailOnError
      end if
      recordset.movenext
    wend
    Je te laisse adapter, tester et ajouter la couleur...

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Ah les joies du RER...

    Pour le 2) le bouton peut aussi être placé en pied de page
    Eh oui... la solution est souvent juste a ses pieds

    Merci pour ta boucle de code.
    Avant de te lire j'était en train de faire des petits tests avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande26_Click()
    'For Each Materiel In Form_frm_releve :aie: ça le fait pas :-(
    MsgBox ("coucou")
    MsgBox (Expr1)
    MsgBox (LastCopieC)
    'End
    End Sub
    en me plongeant dans le guide DAO de CW
    Dès que j'ai une avancée significative (pour moi ) je post... mais si d'autre on des propals, des liens, du café... je suis prenneur
    @+
    Ahhh et puis un lien pour l'aide sur les fonctions VBA, parceque le F1 sur une expression VB dans la beta 2010 ne renvoit vers rien... Pfffffiouuuu

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Les fonctions VBA

    C'est (me.)recordset qui fait "for each..."

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Les fonctions VBA

    C'est (me.)recordset qui fait "for each..."
    Merci

    Et pour la mise en forme conditionnelle, j'ai cherché un peu ou c'était... mais une fois trouvé...... c'est hyper simple et génial merci
    j'ai donc fait une condition pour vérouiller les cellules LastCopiesC si le copieur est noir&blanc
    le résultat est que mes tabulations ne me stoppent que là ou il y a une saisie a faire
    une petite photo pour ceux que ça interessent

    Bon sinon... avec mon bouton d'action... je progresse... lentement mais sûrement
    l'objectif pour moi étant de comprendre ce qui se passe...
    Et le Dlookup ma mis un petit coup de blouze avec ses 4 paramètres
    Je ne le lâche pas mais j'y vais molo

    Pour l'instant, grace a tes pistes, je sais a quoi sert un Recodset.EOF
    j'arrive même a naviger entre mes Recordset.Fields ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub Commande27_Click()
    Recordset.MoveFirst 'on va sur la première ligne d'enregistrements
    While Not Recordset.EOF 'tant qu'on est pas à la dernière
    '===ACTIONS SUR LA LIGNE====
    ''If Nz(DLookup("date_releve", "releve", "appareil='" & appareil & "'"), 0) < Date Then
    ''    CurrentDb.Execute "INSERT INTO releves (appareil, quand, combien) VALUES ('" & appareil & "',date()," & lastcopienb & ");", dbFailOnError
    ''End If
     
    MsgBox Recordset.Fields("Materiel").Value 'on récupère la valeur du champs "Materiel"
    MsgBox Recordset.Fields("Couleur").Value 'itou
    MsgBox Recordset.Fields("Expr1").Value 'itou
    If IsNull(Recordset.Fields("LastCopieC").Value) Then 'alors là... on fait gaffe et on évite d'avoir une erreur
    'due au fait qu'un champs ne peut être vide, si j'ai bien compris...
    MsgBox "champs vide"
    Else
    MsgBox Recordset.Fields("LastCopieC").Value
    End If
    'If Not IsNull(Recordset.Fields("LastCopieN").Value) Then 'la même mais a l'envers...
    'MsgBox Recordset.Fields("LastCopieN").Value
    'End If
    Recordset.MoveNext 'et on passe à la ligne suivante
    Wend 'fin de la boucle YEAHHHH
    End Sub
    ça mérite un smiley champagne, mais comme y a pas, ben je me fais une

    Et je viens de comprendre ce que faisait ce Nz(DLookup...

    Bon, j'ai plus de café, on verra la suite demain et encore merci pour ton soutien nico84, je me sens moins seul

  8. #8
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Oui je fais dans le compact

    Pour info, Recordset.Fields("Expr1").Value s'écrit aussi ... Expr1

    Et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If IsNull(Recordset.Fields("LastCopieC").Value) Then 'alors là... on fait gaffe et on évite d'avoir une erreur
    'due au fait qu'un champs ne peut être vide, si j'ai bien compris...
    MsgBox "champs vide"
    Else
    MsgBox Recordset.Fields("LastCopieC").Value
    End If
    Peut s'écrire aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox nz(LastCopieC,"champ vide")

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox nz(LastCopieC,"champ vide")
    wahouuuu du conditionnel direct via le NZ dans la msgbox ... "you me"

    Bon, objectif du jour : essayer de faire quelque chose avec ce Dlookup...
    entre le repas, la promennade et autres activités familiales

    à ce soir

  10. #10
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Le langage SQL oblige à tout coder dans la même instruction, et quand on y a pris goût if then else end if semble bien encombrant...

    Tout ça pour dire qu'il y a une petite erreur : la date du dernier relevé est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dmax("date_releve","releve","appareil='" & appareil & "'")
    et non Dlookup (qui renvoie une date au hasard...)

  11. #11
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Tout ça pour dire qu'il y a une petite erreur : la date du dernier relevé est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dmax("date_releve","releve","appareil='" & appareil & "'")
    et non Dlookup (qui renvoie une date au hasard...)
    Et moi, est-ce que je ne ferais pas une erreur grossière en partant d'un
    Private Sub Commande28_Click() positionné dans mon formulaire pour interroger une requête via Dlookup ? Dlookup ne s'appliqe que - si j'ai bien lu - aux tables et requêtes. Il faudrait donc que je déclare explicitement que je dois travailler avec ces éléments...

    Ce que j'ai réussi a manipuler jusqu'a présent c'était les Recordset de mon formulaire... tous sans exception, même la date

    et puis j'ai vu ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "INSERT INTO tbl_releves (appareil, quand, combien) VALUES ('" & appareil & "',date()," & lastcopienb & ");", dbFailOnError
    au début j'ai rien panné avec tout ces ' " ' " ' "
    Et puis, en faisant une recherche sur le mot clé INSERT INTO, je me suis rendu compte que c'était une commande SQL, c'est ça ?? ...

    Bon alors, après avoir navigué sur Internet, j'ai trouvé ceci :

    INSERT INTO tblClients2 ( NumCli, NomCli, PreCli )
    SELECT [Numéro Client], [Nom Client], [Prénom Client]
    FROM tblClients;
    Un exemple un peu plus complexe : AJOUTER à la table tblClients2 (dont les champs s'appellent NumCli, NomCli et PreCli) les champs Numéro Client, Nom Client et Prénom Client de la table tblClients.
    Cette fois, ce ne sont pas des valeurs fixes qui sont ajoutées à tblClients2, mais tous les clients de la table tblClients.
    alors, sur Private Sub Commande28_Click() de mon formulaire
    j'ai supprimmé la boucle et ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Commande28_Click()
    CurrentDb.Execute "INSERT INTO tbl_releves ([Materiel], [CopieN]) SELECT [Materiel], [LastCopieN] FROM tbl_parc; "
    End Sub
    a ma grande surprise, ça marche, puisque comme conseillé au départ, le formulaire renvoi les valeurs des derniers relevés sur la table Parc

    Voilà... je n'ai pas testé avec les autres champs mais je ferai ça demain

    PS, pour dbFailOnError, ça marche comment ?

  12. #12
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Et oui, M. Jourdain aussi faisait de la prose sans le savoir...

    Pour la gestion des erreurs, voir par exemple cette file toute fraiche

    Dmax, Dlookup... sont des raccourcis de commande SQL (spécifiques à access mais bien pratiques) qu'ont peut utiliser aussi bien dans des requetes que dans du code VBA

  13. #13
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Et ben, plus on avance et plus on s'apperçoit que sans une bonne connaissance du logiciel, on peut perdre un sacré temps...
    Mais si le jeu de Recordset peut faire gagner le match...ça vaut la peine

    Dans la requete SQL (ou je peux même rajouter du WHERE... j'en apprend toutes les heures ) il ne m'est par contre pas possible de récupérer le paramètre de la requête (choix de la date du relevé)

    Toutefois, comme il m'est possible dans le frm_releve de voir ce paramètre dans le champ [Expr1], j'ai déclaré une variable rien que pour lui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Cmde85_Click()
    Dim para
    'Recordset.MoveFirst
    para = Recordset.Fields("Expr1").Value
    MsgBox para
     
    End Sub
    Mais je n'ai pas trouvé le moyen d'INSERTer INTO la valeur de ce paramètre dans le champs [MajReleveDate] de la t_parc
    tout seul ou avec les autres champs

    Enfin, j'ai aussi testé
    CurrentDb.Execute "INSERT INTO t_parc ([LastReleveC], [LastReleveN]) SELECT [MajReleveC], [MajReleveN] FROM t_parc; "
    mais apparement c'est pas comme ça qu'on copie un champ vers un autre dans une même table en SQL


    En fait, c'est la date entrée en paramètre de la r_parc qui me fait tourner en rond.
    J'ai suivi les conseils de http://access.developpez.com/faq/?page=TAReq#ParamReq
    mais, si j'ai bien compris mes plantages successifs , cette solution basée du coût sur 2 tables en relation bloque le frm_releve basé sur le modèle "plusieurs éléments" qui ne semble être opérationnel que sur la base d'une table.

    J'ai donc aussi essayé de faire une t_para001 avec un seul [DateReleve] qui se met a jour via un frm_para001. ça marche
    J'utilise ce formulaire pour lancer la r_parc, puis lancer le frm_releve puis fermer le r_parc (très sympa le module macro )
    Mais là je n'ai pas encore réussit a dire à ma r_parc d'utiliser en paramètre le résultat de mon formulaire...

    Voilà ou j'en suis... Et j'vous jure, j'ai fait chauffer google et les onglets d'IE8
    Le bilan n'est pas brillant mais je n'abandonne pas... je considère l'exercice comme un super dérouillage des neurones... plus fort que le sudoku****

    @+ et bonne nuit

  14. #14
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Il y a toujours plusieurs solutions qui marchent...et plein d'autres qui ne marchent pas !!!

    Pour décomposer une écriture dans la table à partir des données de la fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim sr as string
    sr = "INSERT INTO releves"               'dans quoi je veux insérer
    sr = sr & " (appareil, quand, combien)"  'ce que je veux insérer
    sr = sr & " VALUES ('" & appareil & "'"   '1ere valeur : le contenu du champ est entre ' car c'est une string !
    sr = sr & ",date()"                      '2e valeur : date systeme au format SQL
    sr = sr "," & lastcopienb & ");"         '3e valeur : entier
    msgbox sr                               'visualisation pour vérif
    CurrentDb.Execute sr, dbFailOnError  'écriture :)

  15. #15
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    On avance, on avance
    Alors, voilà les petits trucs qui coinçaient...

    D'abord, ton dernier post m'a fait réfléchir sur les type de variable. Se pourrait-il que la commande d'insertion de SQL bloque si le type qui transite n'est pas le même d'un bout a l'autre ?
    Ben là, c'est pas le cas
    Si j'ai, dans un frm, une donnée jj/mm/aaaa dans "Texte2" ou une donnée liée a la requête parametrée "Expr1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CurrentDb.Execute "INSERT INTO Table1 (Champ1) VALUES ('" & Texte2 & "');"
    Dim para As String
    para = Texte2
    Set variable = Texte2
    CurrentDb.Execute "INSERT INTO Table1 (Champ1) VALUES ('" & variable & "');"
    CurrentDb.Execute "INSERT INTO Table1 (Champ1) VALUES ('" & para & "');"
    les trois solutions fonctionnent (testé aussi avec "Expr1")

    Par contre,
    CurrentDb.Execute "INSERT INTO t_releves ([DateReleve]) VALUES ('" & Texte2 & "');"
    ça ne marchait pas WHYYYYYYYY ???
    Le coupable était le champ [Materiel] dans la t_releves avec Null interdit !!! En tous les cas, le petit souci du Null Interdi montre qu'il faut vraiment maistriser tous les paras avec leurs incidences car aucun message d'erreur après l'exécution de la commande SQL n'a été généré

    Maintenant, il ne reste plus qu'a combiner - si c'est possible - le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO t_releves ([DateReleve]) VALUES ('" & Expr1 & "');"
    DANS le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "INSERT INTO t_releves ([Materiel], [CopieN]) SELECT [Materiel], [LastCopieN] FROM t_parc; "
    pour que chaque ligne crée dans la t_releves le soit avec la date de "Expr1" du paramètre de la requête servant de base à mon frm.

  16. #16
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Maintenant, il ne reste plus qu'a combiner - si c'est possible - le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO t_releves ([DateReleve]) VALUES ('" & Expr1 & "');"
    DANS le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "INSERT INTO t_releves ([Materiel], [CopieN]) SELECT [Materiel], [LastCopieN] FROM t_parc; "pour que chaque ligne crée dans la t_releves le soit avec la date de "Expr1" du paramètre de la requête servant de base à mon frm.
    ET BEN NON faut quand même pas mélanger les ajouts et les mise a jour
    Alors, j'ai enfin compris qu'il faut y aller en 2 étapes... et ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Cmde85_Click()
    MsgBox Expr1
    '=====COMMANDE SQL 01=====
    '=====MISE A JOUR DE LA COLONNE [MajReleveDate] dans la t_parc
    CurrentDb.Execute "UPDATE t_parc SET [MajReleveDate] = datevalue('" & Expr1 & "');" 'MAJ de la Date
    'en utilisant un conversion - datevalue('" & Expr1 & "') - pour que la commande SQL interprete bien la donnée Date d'Access
    '=====COMMANDE SQL 02=====
    '=====MISE A JOUR DES DONNEES DU FORMULAIRE POUR CHAQUE [Materiel] dans la t_releves
    CurrentDb.Execute "INSERT INTO t_releves ([Materiel],[ReleveN],[ReleveC],[ReleveDate])SELECT [Materiel],[MajReleveN],[MajReleveN],[MajReleveDate] FROM t_parc; "
    'cela AJOUTE X lignes dans la t_releves, et la, pas de problème de conversion de date, les 2 champs sont au format Date et la Copie est Ok
    Bon ben comme y a pas de smiley :champ: ben permétez-moi de m'applaudir


    Maintenant que je sais comment mettre a jour la date dans la t_parc, je vais pouvoir réviser mon frm qui va remplacer le paramètre de la requête...
    Mais le plus dur a été fait... Et puis inclure une condition WHERE pour que SEUL les relevés réellement fait soit ajoutés dans la t_relevés
    Je vais essayer de mettre tout ça au propre et faire un beau résumé pour clore ce post

    Encore merci nico84 d'avoir aidé le

  17. #17
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Un dernier petit post :

    - il vaut mieux avoir une gestion d'erreur sinon effectivement access ne fait rien mais ne dit rien non plus !
    - je ne vois pas à quoi sert l'update si le formulaire est sur la table Tparc ?

  18. #18
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Un dernier petit post :
    - il vaut mieux avoir une gestion d'erreur sinon effectivement access ne fait rien mais ne dit rien non plus !
    - je ne vois pas à quoi sert l'update si le formulaire est sur la table Tparc ?
    alors pour la gestion des erreurs... j'ai pas encore tout pané

    Pour l'Update, le formulaire est bien basé sur la requête de la t_parc
    Mais la date du relevé étant un paramètre de requête aléatoire et non basé sur une valeur existante dans un champs de la t_parc, je ne pouvais pas l'utiliser dans INSERT INTO...

    Mon INSERT INTO ne me permettait donc d'agir que sur les champs
    [Materiel], [CopieC], [CopieN] présents dans la t_parc vers la t_releves
    Et là, il me manquait l'info fondamentale de la date du relevé ans la t_releves

    Comment faire ?
    J'ai pensé dans un premier temps a rajouter l'info [DateDernierReleve] a chaque nouvelle lignes [Materiel], [CopieC], [CopieN] de la t_releves
    Maintenant, il ne reste plus qu'a combiner - si c'est possible - le
    Code :
    "INSERT INTO t_releves ([DateReleve]) VALUES ('" & Expr1 & "');"
    DANS le
    Code :
    CurrentDb.Execute "INSERT INTO t_releves ([Materiel], [CopieN]) SELECT [Materiel], [LastCopieN] FROM t_parc; "
    pour que chaque ligne crée dans la t_releves le soit avec la date de "Expr1" du paramètre de la requête servant de base à mon frm.

    Et puis je me suis dit : Et si ma requête de la t_parc était plus simple... sans paramètre...
    Pour cela, il faudrait que je mette a jour le champ [DateDernierReleve]
    Et c'est là que j'ai bifurqué sur
    UPDATE t_parc SET [MajReleveDate] = datevalue('" & Expr1 & "');"
    ou l'Expr1 fut, dans un premier temps, le paramètre de ma requête, et maintenant un beau formulaire Boite de dialoque modale qui, quand on valide,
    UPDATE toutes les valeurs de la [MajReleveDate] pour chacun des appareils de la t_parc puis lance le formulaire basé sur la requête.

    Du coût, fini la requête paramètrée, il n'y a plus qu'a saisir les relevés et ajouter chaque ligne d'enregistrement composée du [Materiel][CopieN][CopieC][DateReleve] dans la t_releves

    Oups... il faut que le corrige mon INSERT qui doit avoir 2 fois le même champs de destination
    Voilà, il ne me reste plus qu'à rajouter une condition pour que SI l'enregistrement n'a aucun relevé CopieN ou CopieC, il n'est pas besoin de rajouter la ligne 50 dans la t_releves
    Mais bon, en plus, je vais pouvoir repasser mon champs Materiel à Null non autorisé
    Mais ce sera pas demain, je pars en vacances dans un coin déconnecté des deux-sèvres

Discussions similaires

  1. [MySQL] Saisie multiple dans un formulaire
    Par white_tiger dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/07/2007, 16h02
  2. procédure pour une MAJ d'un formulaire à choix multiple
    Par Zen_Fou dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/05/2006, 14h46
  3. Formulaire : Liste multiple
    Par Visiteur_33 dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2006, 11h23
  4. [PHP-JS] saisie multiple
    Par nah_wah dans le forum Langage
    Réponses: 5
    Dernier message: 26/12/2005, 13h00
  5. formulaire choix multiple
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 02/02/2003, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo