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

Access Discussion :

Requête de mise à jour avec invite pré-renseignée


Sujet :

Access

  1. #1
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut Requête de mise à jour avec invite pré-renseignée
    Bonjour,

    J'ai crée une requête de mise à jour qui me propose une invite "Numéro de Pince à prendre en compte" pour savoir quoi mettre dans un champ "Cycle Pince" qui est null:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE LOTS SET LOTS.[Cycle Pince] = [Numéro de Pince à prendre en compte]
    WHERE (((LOTS.[Cycle Pince]) Is Null) AND ((LOTS.[Date de cisai]) Is Not Null) AND ((LOTS.LOT)=[Formulaires]![menu principal]![LOT]));

    Il s'avère que ce champ, pour d'autres enregistrement, peut déjà contenir une valeur.

    Est-il possible que mon invite "Numéro de Pince à prendre en compte" soit déjà pré-renseignée par une valeur s'il y en a déjà une qui correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (LOTS.LOT)=[Formulaires]![menu principal]![LOT])
    ou reste vide si c'est le premier enregistrement pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (LOTS.LOT)=[Formulaires]![menu principal]![LOT])
    mais tout en conservant la demande de l'invite et la possibilité de modifier ce qui est proposé?

    Question susbsidaire :
    est-ce qu'on peut faire un contrôle de ce qui est saisi dans cette invite genre le format doit être du genre nombre (1 ou 2 digits) - nombre (3 digits) / nombre (2 digits)?

    Merci d'avance de vos réponses.
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Pour répondre à votre question, oui, on peut.

    Le mieux serait alors de réaliser un formulaire spécifique flottant type POPUP car il offrirait les deux points dont vous avez besoin :
    1. le fait de proposer la valeur existante
    2. le fait de disposer d'un masque de saisie tel vous le souhaitez (en l'occurence 90\-000/00;;_)


    Il faudra prévoir de jouer avec le paramètre OpenArgs de la méthode OpenForm pour passer les paramètres utiles à l'interprétation de la requête pour qu'elle puisse chercher les éventuelles correspondances.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Bonjour argyronet,

    Je connais déjà la manip pour utiliser le champ d'un formulaire dans une requête, je vois donc ce qu'il faut faire dans la requête.

    Dans le cas présent, ce sera donc mon formulaire qui va appeler la requête (via un bouton "OK" par exemple) ou il existe une gestion qui permet d'appeler le formulaire à l'ouverture de la requête?

    Merci
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Arrf, non, surtout pas...!!!

    Je n'utilise jamais de clauses de formulaire dans une requête et en plus, ce n'est pas ce que j'ai écrit...
    Donc ce n'est pas moi qui vais conseiller cette voie.
    Même si de nombreux exemples en sont gorgés et que, c'est vrai, il faut l'avouer, parfois ça marche... Mais ce n'est pas du tout ni conventionnel ni pratique à maintenir ou manipuler...
    Par ailleurs, j'émets aussi des clauses de réserve quant à la fiabilté, notamment en ce qui concerne la portabilité internationale (Formulaire FR ; Forms US ; Formular GE etc...)

    Dans votre cas, il faut créer un petit popup qui s'affiche pour mettre à jour l'enregistrement s'il existe et l'ajouer s'il est nouveau

    Et donc...
    1. soit on met à jour car le lot existe (mais qu'est ce qu'on met à jour ?)
    2. soit on ajoute car le lot n'existe pas et il faut le créer (quels champs sont à remplir ?)

    Quelque chose n'est pas clair ou pas complet dans vos explications car même si j'ai compris la demande, ça m'aiderait à vous guider mieux.

    Voulez-vous bien expliquer d'un oeil métier ce que doit faire votre requête dans un cas comme dans l'autre (en précisant si la date de cisai et le cycle pince doivent être saisis eux aussi) ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Explications sur la base:

    La table LOTS contient des enregistrements d'objets, les objets peuvent faire partie du LOT en cours, ou d'un futur LOT ou d'un LOT déjà traité, on connait le numéro du LOT de l'objet par un champ dédié.

    1 fois par semaine, on récupère une liste des objets "usinés" et une requête de mise à jour associe une date de cisaillage aux enregistrements de la table LOTS qui ont été traités.

    Jusqu'à présent, je mettais à jour manuellement un champ de chacun de ces enregistrements qui permet de suivre avec quelle pince l'objet a été manipulé (c'est pour gérer la durée de vie de ces pinces).

    Comme les CTRL+C/CTRL+V commençaient à m'énerver, on parle de plusieurs dizaines d'objets par semaine, je me suis décidé à faire ma nouvelle requête de mise à jour.

    La requête prend donc en compte le LOT en cours (qui est affiché sur le formulaire principal de la base), et le fait qu'on cherche à traiter les enregistrements des objets avec une date de cisaillage mais pas encore de référence de pince (on ne veut pas toucher aux objets déjà cisaillés et avec une référence de pince déjà renseignée ni à ceux pas encore cisaillés car il est possible que la pince soit changée d'ici leur cisaillage).

    La requête marche bien mais comme je passe d'un extrème à l'autre (CTRL+C/CTRL+V à "truc automatique avec le moins de saisie possible) l'idée serait qu'au lieu d'avoir le POP-UP automatique associé à "LOTS.[Cycle Pince] = [Numéro de Pince à prendre en compte]" j'ai une fenêtre avec une liste déroulante par défaut positionnée sur la dernière référence de pince utilisée pour le LOT en cours (et rien si c'est la première fois pour ce LOT), et que s'il n'y a rien parce que c'est la première fois pour le lot ou alors que la référence de la pince n'est pas présente parce que c'est une nouvelle, alors en cas de saisie qu'il y ait le contrôle du format de référence saisie (bon, là, je veux bien me passer du copntrôle du format, c'est loin d'être vital, parce qu'il faut reconnaitre que si c'est une nouvelle référence de pince, une autre table sera déjà renseignée et la référence devrait donc être dans la requête qui va alimenter la liste déroulante, et comme on change de LOT 3/4 fois par ans, l'autre cas ne me génera pas beaucoup).

    Je ne sais pas si c'est plus clair?
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Ok, j'ai compris...
    Humm, là comme ça pour ma part, il manque un champ de type O/N qui stipulerait que l'outil est terminé ; ainsi, il n'y aurait pas de risque d'y toucher sous prétexe d'une nullité probable (on ne sait jamais) de l'un ou de l'autre champ cycle pince ou date de cisai.

    Bref, en admettant que ce ne soit pas possible de l'ajouter, il faut faire avec ce que l'on a.

    Donc il faut d'abord par un SELECT (dans le formulaire), isoler tous les objets appartenant au LOT en cours, et par la même, lister tous ceux qui ont un Cycle Pince à NULL et une date de cisai qui ne l'est pas :
    [CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL= "SELECT * FROM LOTS WHERE (LOT = '" & Me.Lot &"') AND ([Cycle Pince] Is Null) AND ([Date de cisai] Is Not Null);"
    Via un Recordset, on peut alors parcourir et mettre à jour ou ajouter selon le cas, ce qui donne par exemple :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    Private Sub cmdMAJCycle_Click()
        If MsgBox("Mettre à jour le cycle de ce lot ?", vbQuestion + vbYesNo, "Confirmer") = vbYes Then
            MettreAjourCycle Me.Lot, Me.CyclePince, Me.DateCisai
            Me.Requery
        End If
    End Sub
     
    Sub MettreAjourCycle(ByVal NoLot As Long, ByVal CyclePince As Variant, ByVal DateCisai As Date)
    Dim SQL                                                As String
    Dim oRS                                                As DAO.Recordset
     
        On Error GoTo L_ErrMettreAjourCycle
     
        SQL = "SELECT * FROM LOTS WHERE ([Cycle Pince] Is Null) AND ([Date de cisai] Is Not Null) AND (LOT=" & NoLot & ");"
        Set oRS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
        With oRS
            If Not .EOF Then
                'Le lot existe : on met à jour tous les objet concernés (boucle)
                Do While Not .EOF
                    .Edit
                    .Fields("Cycle Pince") = CyclePince
                    .Update
                    .MoveNext
                Loop
            Else
                'Le lot n'existe  pas : on l'ajoute l'objet
                .AddNew
                .Fields("LOT") = NoLot
                .Fields("Cycle Pince") = CyclePince
                .Fields("Date de cisai") = Format(DateCisai, "mm/dd/yyyy")
                .Update
            End If
            .Close
        End With
     
        On Error GoTo 0
    L_ExMettreAjourCycle:
        Set oRS = Nothing
        Exit Sub
     
    L_ErrMettreAjourCycle:
        MsgBox Err.Description, vbExclamation, Err.Source
        Resume L_ExMettreAjourCycle
     
    End Sub
    Bon, je n'ai pas votre base sous les yeux et puis, les noms des champs ne correspondent certainement pas mais vous pouvez adapter...

    Est-ce que ce code vous inspire et suis-je dans la bonne direction ?

    A vous...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  7. #7
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Je crois que le cap est carrément bon.

    Je pense que je ne vais pas garder la partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Else
                'Le lot n'existe  pas : on l'ajoute l'objet
                .AddNew
                .Fields("LOT") = NoLot
                .Fields("Cycle Pince") = CyclePince
                .Fields("Date de cisai") = Format(DateCisai, "mm/dd/yyyy")
                .Update
    car si le lot n'existe pas, j'ai déjà tout un processus pour en créer un nouveau.

    Du coup, je n'ai pas à passer DateCisai comme paramêtre, c'est ma macro d'import de données qui met à jour les dates de cisaillage pour les objets présents dans LOTS.
    Le n° de lot je vais le récupérer par un champ de mon formulaire principal que je passerai comme paramêtre sur l'appel de mon nouveau formulaire de mise à jour des cycles pinces, et j'alimenterai la liste déroulante de choix de la référence pince à prendre en compte par une requête que j'ai déjà fait qui récupère les différentes références existantes.

    Une petite question quand même, c'est quoi l'intérêt de passer par "MettreAjourCycle", pourquoi ne pas mettre tout le code dans "cmdMAJCycle_Click"?

    Merci pour le coup de main.
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Humm, bonne question

    Disons que c'est ma façon de coder.

    J'ai un contrôle cmdX dans mon Form et là, de deux chose l'une :
    1. soit c'est un formulaire tout simple et le bouton possède son propre code
    2. soit c'est un formulaire plus élaboré, avec plusieurs occurences de contrôles et différents besoins +/- complexes

    Donc, dans le cas N°2, mon bouton cmdX va appeler une fonction qui ave aboutir ou échouer et c'est lui qui possède la gestion d'erreur principale avec le MsgBox qui va bien. Toutes les autres fonctions appelées (imbriquée ou non) transportent l'erreur ou le succès en cascade remontante :
    • Si toutes les fonctions ont abouti, alors message de succès ou rien.
    • Sinon, message d'erreur et là, différents scénarii possibles : RollBack, CancelRecord etc...


    Voici un exemple :
    Créez un formulaire simple avec 2 Textboxes (ChampParam1 et ChampParam2) et 1 bouton (cmdTest)

    Allez dans la classe du formulaire et collez-y ce code :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    Option Compare Database
    Option Explicit
     
    Private Const SUCCESS = 32
     
    Private Sub cmdTest_Click()
    Dim Param1
    Dim Param2
    Dim strFinalMessage                                    As String
    Dim MsgError                                           As String
    Dim SrcError                                           As String
    Dim HError                                             As Long
    Dim lngRetFunct1                                       As Long
    Dim lngRetFunct2                                       As Long
    Dim lngRetFunct3                                       As Long
    Dim dblResultat                                        As Double
     
        On Error GoTo L_ErrcmdTest_Click
        strFinalMessage = "Aucune action n'a été effectuée."
        If MsgBox("Effectuer le truc à faire ?", vbQuestion + vbYesNo, "Confirmer") = vbYes Then
     
            Param1 = Me!ChampParam1
            Param2 = Me!ChampParam2
     
            If Not IsNull(Param1) And Not IsNull(Param2) Then
     
                lngRetFunct1 = Fonction1(CLng(Param1), CLng(Param2), MsgError, HError, SrcError)
                If lngRetFunct1 = False Then
                    Err.Raise HError, SrcError, MsgError
                End If
     
                lngRetFunct2 = Fonction2(CLng(Param1), CLng(Param2), MsgError, HError, SrcError)
                If lngRetFunct2 = 0 Then
                    Err.Raise HError, SrcError, MsgError
                Else
                    lngRetFunct3 = Fonction3(lngRetFunct2, dblResultat, MsgError, HError, SrcError)
                    If lngRetFunct3 = False Then
                        Err.Raise HError, SrcError, MsgError
                    End If
                End If
     
                strFinalMessage = "La tâche a été opérée avec succès : Résultat = " & Round(dblResultat, 4)
            Else
                Err.Raise 94, "cmdTest_Click", "Renseignez d'abord les paramètres !"
            End If
        End If
        On Error GoTo 0
    L_ExcmdTest_Click:
        MsgBox "Procédure terminée." & vbCrLf & vbCrLf & strFinalMessage, vbInformation, "Fin"
        Exit Sub
     
    L_ErrcmdTest_Click:
        strFinalMessage = "Il y a eut un problème :" & vbCrLf & Err.Description & vbCrLf & vbCrLf & "Réf. appel : " & Err.Source & vbCrLf & "(Erreur N° " & Err.Number & ")"
        Resume L_ExcmdTest_Click
    End Sub
     
    Private Function Fonction1(ByVal Param1 As Long, ByVal Param2 As Long, ByRef MsgError As String, ByRef HError As Long, ByRef SrcError As String) As Boolean
     
        On Error GoTo L_ErrFonction1
        SrcError = "Fonction1"
        If Param1 < Param2 Then
            Err.Raise 6, "Fonction1", "Param1  est plus petit que Param2 !"
        End If
        Fonction1 = True
     
        On Error GoTo 0
    L_ExFonction1:
        Exit Function
     
    L_ErrFonction1:
        HError = Err.Number
        MsgError = Err.Description
        Resume L_ExFonction1
    End Function
     
    Private Function Fonction2(ByVal Param1 As Long, ByVal Param2 As Long, ByRef MsgError As String, ByRef HError As Long, ByRef SrcError As String) As Long
    Dim lngRet                                             As Long
     
        On Error GoTo L_ErrFonction2
        SrcError = "Fonction2"
        lngRet = (Param1 / Param2) * SUCCESS
        If lngRet < SUCCESS Then
            Err.Raise 11, "Fonction2", "Param2 ne permet pas la division ou n'est pas supérieur à " & SUCCESS
        End If
        Fonction2 = lngRet
     
        On Error GoTo 0
    L_ExFonction2:
        Exit Function
     
    L_ErrFonction2:
        HError = Err.Number
        MsgError = Err.Description
        Resume L_ExFonction2
    End Function
     
    Private Function Fonction3(ByVal Param1 As Long, ByRef Resultat As Double, ByRef MsgError As String, ByRef HError As Long, ByRef SrcError As String) As Boolean
     
        On Error GoTo L_ErrFonction3
        SrcError = "Fonction3"
        Randomize
        Resultat = (Param1 * Rnd)
     
        If Resultat < 400 Then
            Err.Raise 11, "Fonction3", "Param1 est trop petit pour avoir un résultat correct !"
        End If
        Fonction3 = True
     
        On Error GoTo 0
    L_ExFonction3:
        Exit Function
     
    L_ErrFonction3:
        HError = Err.Number
        MsgError = Err.Description
        Resume L_ExFonction3
    End Function
    Bon c'est un peu «con-con» comme exemple au niveau du rôle mais c'est juste pour l'exemple

    Essayez avec les valeur 5 et 2, puis 100 et 2 puis 500 et 0 et enfin 20 et 50...
    Voyez ce que ça donne ; l'erreur est transportée puis remontée.

    Est-ce que ça vous parle ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  9. #9
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Je comprends bien le principe, l'explication est claire.

    En fait, êtant plutot auo-didacte de la programmation, je sais que j'ai tendance à ne pas trop m'occuper de la gestion d'erreur (le code marche ou pas, et en cas d'erreur imprévie, vive le Debug...).

    Je garde encore un peu le sujet ouvert le temps de finaliser mon fonctionnement et je cloturerai ensuite.

    Encore merci pour le coup de main, les explications et la pédagogie .
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par sibama Voir le message

    Je pense que je ne vais pas garder la partie:
    ...
    car si le lot n'existe pas, j'ai déjà tout un processus pour en créer un nouveau.
    Bien du coup, vous pouvez modifier le procédure comme suit :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Sub MettreAjourCycle(ByVal NoLot As Long, ByVal CyclePince As Variant, ByVal DateCisai As Date)
    Dim SQL                                                As String
    Dim oRS                                                As DAO.Recordset
     
        On Error GoTo L_ErrMettreAjourCycle
     
        SQL = "SELECT * FROM LOTS WHERE ([Cycle Pince] Is Null) AND ([Date de cisai] Is Not Null) AND (LOT=" & NoLot & ");"
        Set oRS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
        With oRS
            If Not .EOF Then
                'Le lot existe : on met à jour tous les objet concernés (boucle)
                Do While Not .EOF
                    .Edit
                    .Fields("Cycle Pince") = CyclePince
                    .Update
                    .MoveNext
                Loop
            Else
                Err.Raise 3021, "Enregistrement introuvable", "Le lot #" & NoLot & " ne permet pas de trouver de date non nulle pour la MAJ des cycles."
            End If
            .Close
        End With
     
        On Error GoTo 0
    L_ExMettreAjourCycle:
        Set oRS = Nothing
        Exit Sub
     
    L_ErrMettreAjourCycle:
        MsgBox Err.Description, vbExclamation, Err.Source
        Resume L_ExMettreAjourCycle
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  11. #11
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Super, ça marche nickel.

    J'ai un peu galéré pour créer les requêtes qui me permettent de mettre quelques infos sur mon formulaire (nombre de données qui vont être mises à jour, dernier n° de pince renseigné...), mais une fois fait, cela me permet d'alimenter les paramètres à passer à la requête et de faire un formulaire simple mais complet.

    Merci pour tout Argy, je ne m'attendais pas a ce que le code me soit donné tout prêt à utiliser, je me suis quand même permis de toucher à 2/3 trucs histoire de voir ce que faisaient les parties de code que je ne comprennait pas forcemment entièrement (ça c'était pour essayer, ton code est copié/collé dans mon module).

    Je ferme la discussion.
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2002] requête de mise à jour avec code VBA
    Par sylvie dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/05/2010, 13h56
  2. Problème avec requête de mise à jour
    Par david71 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/08/2008, 17h02
  3. Requête mise à jour avec jointure interne
    Par joquetino dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/01/2008, 17h41
  4. [Requête/SQL]Mise à jour avec condition
    Par atlantideD dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 22/04/2007, 23h14
  5. Problème avec une requête de mise à jour
    Par Le Pharaon dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/07/2006, 12h16

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