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

Requêtes et SQL. Discussion :

boucle DO mais plus de ligne à traiter [AC-2013]


Sujet :

Requêtes et SQL.

  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 DO mais plus de ligne à traiter
    Bonjour,

    Dans un formulaire, à l'aide d'un bouton ajout, j'ajoute des articles dans un sous formulaire donc voici le 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
    'Bouton servant à ajouter un article dans le sous formulaire temporaire SF_CdeTempo
    Private Sub FTAjoutArticle_Click()
     
            'Condition d'avoir du budget
    If (Int(BudgetDispo.Value) < 0) Then
    MsgBox "Attention, Le solde Budget ne permet pas de commande"
    End If
     
    Dim base As Database: Dim ligne As Recordset: Dim requete As String: Dim TotalPrix As Single: Dim total_EurosCde As Single
     
     
        'Calcul du quotient Prix article X nombre commandé
    TotalPrix = Abs(FTEuros.Value) * Abs(FTQComptoir.Value)
     
    Set base = Application.CurrentDb
    requete = "INSERT INTO T_CdeTempo (Article,Taille, ACder, CodeArticle, Total) VALUES ('" & Rech_Article & "', '" & Rech_Taille & "',  " & FTQComptoir & ", '" & CodeArt & "', " & TotalPrix & ")"
    base.Execute requete
     
    Set ligne = base.OpenRecordset("SELECT Total FROM T_CdeTempo", dbOpenDynaset)
     
    ligne.MoveFirst
    Do
    total_EurosCde = total_EurosCde + Abs(ligne.Fields("Total").Value)
     
    ligne.MoveNext
    Loop Until ligne.EOF
    BudgetConso.Value = total_EurosCde
     
     
    If (Int(SoldeBudget.Value) < 0) Then
    MsgBox "Attention, Dépassement du budget financier alloué, Veuillez supprimer des articles et ensuite cliquer sur le bouton correctif de la Commande Magasin "
    End If
     
     
    ligne.Close
    base.Close
    Set ligne = Nothing
    Set base = Nothing
     
    DoCmd.Requery
     
    End Sub
    il est possible que l'on ai fait un ajout de ligne par erreur et que l'on veuille la supprimer.
    Etant débutant, le moyen le plus facile pour moi est de faire un clic droit sur l'article, puis DELETE. Comme la somme dépensée ne sera plus correcte, l'appui sur un bouton correctif permet de recalculer. Tout va bien tant qu'il existe des lignes, mais si je supprime la seule ligne encodée et que je fais correctif, ma boucle ne peux fonctionner.

    Une solution existe afin que si pas de ligne dans la boucle, recalculer quand même la somme...

    ci-dessous le code utilisé pour le bouton correctif:

    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
    'Correctif en cas d'annulation sur Cde tempo
    Private Sub Miseajour_points_Modif_table_tempo_Click()
     
    Dim base As Database: Dim ligne As Recordset
    Dim requete As String: Dim Total As Integer: Dim total_EurosCde, EurosCde As Single
     
    Set base = Application.CurrentDb
    Set ligne = base.OpenRecordset("SELECT * FROM T_CdeTempo", dbOpenDynaset)
     
    ligne.MoveFirst
     
    Do
     
    EurosCde = ligne.Fields("Total")
    If EurosCde = 0 Then
    MsgBox "Plus aucun articles dans votre commande"
    Else
    total_EurosCde = total_EurosCde + Abs(ligne.Fields("Total").Value)
     
    ligne.MoveNext
    Loop Until ligne.EOF
    BudgetConso.Value = total_EurosCde
     
     
    If (Int(SoldeBudget.Value) < 0) Then
    MsgBox "Attention, vous êtes toujours en dépassement du budget financier alloué, Veuillez encore supprimer des articles et ensuite cliquer sur le bouton correctif de la Commande Magasin "
    End If
    Exit Sub
    End If
     
    ligne.Close
    base.Close
    Set ligne = Nothing
    Set base = Nothing
     
    DoCmd.Requery
    End Sub
    Merci de votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 131
    Points : 151
    Points
    151
    Par défaut
    Petite question :
    s'il ya pas d'articles dans ton formulaire es ce que la somme sera égale à 0?

  3. #3
    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
    Oui oui, tout à fait

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 131
    Points : 151
    Points
    151
    Par défaut
    Dans ce cas tu vas juste affecter 0 à ton total quand tu appuies sur le bouton correctif

  5. #5
    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
    ??

    Comme je passe par un:

    Set ligne
    ligne.movefirst

    et qu'il n'y à plus de ligne dans le cas d'un seul article qui à été enlevé, il se crée une erreur dans la boucle do.

    Je pensais donner une condition dans le code afin de ne pas effectuer la boucle mais bien recalculer si pas de ligne...

  6. #6
    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
    J'ai remplacé par ce code et cela à l'air de fonctionner...

    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
     
    'Correctif en cas d'annulation sur Cde tempo
    Private Sub Miseajour_points_Modif_table_tempo_Click()
     
    Dim base As Database: Dim ligne As Recordset
    Dim requete As String: Dim Total As Integer: Dim total_EurosCde, EurosCde As Single
     
    Set base = Application.CurrentDb
    Set ligne = base.OpenRecordset("SELECT * FROM T_CdeTempo", dbOpenDynaset)
     
    If ligne.EOF Then
    BudgetConso = 0
    MsgBox "Plus aucun articles dans votre commande"
    End If
    If Not ligne.EOF Then
    ligne.MoveFirst
     
    Do
    EurosCde = ligne.Fields("Total")
    total_EurosCde = total_EurosCde + Abs(ligne.Fields("Total").Value)
     
    ligne.MoveNext
    Loop Until ligne.EOF
    BudgetConso.Value = total_EurosCde
    End If
     
    If (Int(SoldeBudget.Value) < 0) Then
    MsgBox "Attention, vous êtes toujours en dépassement du budget financier alloué, Veuillez encore supprimer des articles et ensuite cliquer sur le bouton correctif de la Commande Magasin "
     
    Exit Sub
    End If
     
    ligne.Close
    base.Close
    Set ligne = Nothing
    Set base = Nothing
     
     
    DoCmd.Requery
    End Sub

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/02/2006, 19h44
  2. SELECT avec RAND() mais plus avancé
    Par Sebou San dans le forum Requêtes
    Réponses: 6
    Dernier message: 06/11/2005, 09h30
  3. Réponses: 7
    Dernier message: 03/06/2005, 23h26
  4. Réponses: 2
    Dernier message: 01/06/2004, 15h08

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