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

VBA Access Discussion :

Boucle sur un update avec plusieurs conditions. [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut Boucle sur un update avec plusieurs conditions.
    Bonjour,
    Je bloque sur un UPDATE assez complexe pour moi, j'essaye mais je n'aboutis pas.

    Une table T_CdeMagDetail stocke différents commandes d'un ou plusieurs article avec notamment les champs Article, Taille, QuCde pour la quantité commandée, QuIN1 pour la quantité déjà reçue, Suivi pour l’état de la commande (Complet, Partiel, Commandé), Livraison pour la quantité livrée et réceptionnée et enfin Souffrance pour le solde à recevoir (champ calculé QuCDe - QuIN1).

    Un formulaire permettant le choix d'un numéro commande rempli un sous formulaire détaillant la T_CdeMagDetail pour ce N° de Commande rappelé sur le formulaire par une zone de texte indépendante (numcom).

    Lors de la modification manuelle de la valeur de livraison-réception (champ Livraison) d'un ou plusieurs articles et d'un click de validation, la QuIN1 devrait se voir ajouter la valeur de la livraison, modifier le Suivi (si QuIN1 = 0 alors "Commandé", si QuCde = QuIN1 alors "Complet", Si QuCde > QuIn1 alors "Partiel".

    Ensuite l'idéal avant de remettre à zéro les valeurs de Livraison, c'est de faire un UPDATE dans une Table T_Stock modifiant son champ QUANTITE en lui ajoutant aussi la valeur de livraison à condition que les champs Article et Taille de la commande provenant de la T_CdeMagDetail correspondent aux champs Article et Taille de la T_Stock.

    Pour un débutant comme moi, cela fait pas mal de chose à gérer sur un seul SUB.

    j'ai essayer un code ci-dessous, celui-ci fonctionne pour modification des QuIN1, mais me pose des soucis pour le reste.

    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
    Private Sub ConfirmerSuivi_Click()
     
     
        'Mise à jour de toute les quantités reçues (QuIn1) en rapport à la livraison (Livraison)
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.QuIN1 = [QuIN1] + [Livraison]  WHERE  NCde='" & numcom & "'", dbFailOnError
     
     
    Me.Requery
     
        'Traitement du champ (Suivi) de la commande après mise à jour des quantités déjà reçues (QuIN1)
    Dim base As Database: Dim ligne As Recordset
    Dim Rst As String: Dim Rst2 As String: Dim critere As String
    Dim livre As Integer
    livre = Livraison.Value
     
     
    Set base = Application.CurrentDb
    Set ligne = base.OpenRecordset("SELECT * FROM T_CdeMagDetail WHERE NCde='" & numcom & "' ", dbOpenDynaset)
     
     
    ligne.MoveFirst
     
        'boucle afin de traiter tout enregistrement concernant la même commande (numcom)
    Do
       'Condition afin de donner la valeur adéquate au champ (Suivi)
    If QuIN1 = QuCde Then
     critere = "Complet"
    ElseIf QuIN1 = 0 Then
    critere = "Commandé"
    Else: critere = "Partiel"
     
    End If
     
     
        'Mise à jour du champ (Suivi)et remise à zéro du champ (Livraison)
    Rst = "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi = '" & critere & "',T_CdeMagDetail.Livraison = 0 WHERE  NCde='" & numcom & "'"
    base.Execute Rst
     
        'Mise à jour de la table T_Stock
    Rst2 = "UPDATE T_Stock SET T_Stock.QUANTITE = [QUANTITE] + int(livre)  WHERE  T_Stock.Article='" & Article.Value & "' and T_Stock.Taille = '" & Taille.Value & "'"
    base.Execute Rst2
    ligne.MoveNext
    Loop Until ligne.EOF
     
    Livraison.Value = 0
     
        'Vider la mémoire
    ligne.Close
    base.Close
    Set ligne = Nothing
    Set base = Nothing
     
     
    End Sub

  2. #2
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Je pense avoir avancé pas mal quoique vu d'un oeil d'expert cela devait paraître simple....

    Reste mon problème de mise à jour de me stocks...

    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
    Private Sub ConfirmerSuivi_Click()
     
     
     
     
        'Mise à jour des quantités reçues (QuIn1) en rapport à la livraison (Livraison)
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.QuIN1 = [QuIN1] + [Livraison]  WHERE  NCde='" & numcom & "'", dbFailOnError
     
        'Mise à jour des suivis selon les conditions
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi = '" & "Complet" & "'  WHERE  QuIN1 = QuCde And NCde='" & numcom & "'", dbFailOnError
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi = '" & "Commande" & "'  WHERE T_CdeMagDetail.QuIN1 = 0 And NCde='" & numcom & "'", dbFailOnError
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi = '" & "Partiel" & "'  WHERE  NCde='" & numcom & "' And QuIN1 < QuCde And QuIN1 <> 0 And NCde= '" & numcom & "'", dbFailOnError
     
        'Mise à jour des stock (NE FONCTIONNE PAS)
    'CurrentDb.Execute "UPDATE T_Stock SET T_Stock.QUANTITE = T_Stock.QUANTITE + T_CdeMagDetail.Livraison  WHERE T_Stock.Article = T_CdeMagDetail.Article And T_Stock.Taille = T_CdeMagDetail.Taille And NCde='" & numcom & "'", dbFailOnError
     
        'Remise à zéro de la livraison
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET [Livraison] = 0  WHERE  NCde='" & numcom & "'", dbFailOnError
     
    Me.Requery
     
    End Sub

  3. #3
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    je propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CurrentDb.Execute "UPDATE T_CdeMagDetail INNER JOIN T_Stock ON (T_CdeMagDetail.taille = T_Stock.taille) AND (T_CdeMagDetail.article = T_Stock.article) SET T_Stock.quantite = [T_Stock]![quantite]+[T_CdeMagDetail]![livraison] WHERE (((T_CdeMagDetail.NCde)='" & numcom & "'));"

  4. #4
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    un grand merci, fonctionne à merveille.

    Me voilà encore grandi j'ai appris le code. INNER JOIN.

    Très gentil à toi.

    Espère pouvoir encore avoir besoin de toi à l'avenir, car je dois m'attaquer à des calculs avec des différences de dates, lol.

    Bon WE

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

Discussions similaires

  1. [Débutant] Boucle if avec plusieurs conditions ?
    Par Imène_23 dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/09/2011, 14h06
  2. [XL-2003] Création de Boucles VBA avec plusieurs Conditions
    Par MatMout dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/07/2010, 10h31
  3. Réponses: 3
    Dernier message: 11/04/2008, 09h31
  4. Réponses: 10
    Dernier message: 26/03/2008, 15h00
  5. [SQL] Requête sur un champ mais avec plusieurs conditions
    Par lowkey dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/02/2008, 12h26

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