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 :

Correction code vba


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Inscrit en
    Août 2003
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 228
    Par défaut Correction code vba
    Bonjour,

    Je suis très novice en VBA , je créer plusieur code vba que j'ai empile en fonction de déroulement des actions demande.

    Pouvez-vous jeter un oeil pour me corrige et si c'est correct.

    Merci

    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
     
     
    Private Sub GenerationET_Click()
     
    If Not IsNull(Me.Edition_etiquette.Value) Then
        MsgBox "Les etiquettes sont deja affectées a un numero de lot"
        Exit Sub
    End If
     
     
    DoCmd.SetWarnings False
     
    '=== Mise a jour qte par rapport a l'of et vide la table tmp prep archivage
    DoCmd.SetWarnings False
     
    Dim Dtbase As DAO.Database, strSql As String
    strSql = "UPDATE [TB-TempPrepOF] INNER JOIN [TB-liste_of] ON [TB-TempPrepOF].N°of = [TB-liste_of].of_id SET [TB-TempPrepOF].QTE = [TB-liste_of].[qte_pr];"
    strSql = "DELETE [TB-TempPrepArchi].* FROM [TB-TempPrepArchi];"
    strSql = "delete [TB-TempEnreNumeroLot].* from [TB-TempEnreNumeroLot];"
    Set Dtbase = CurrentDb()
    Dtbase.Execute (strSql)
    Dtbase.Close
     
    '=== Creer le nombre d'etiquette dans tb prepAchivage
     
    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
     
     
    Set rst1 = CurrentDb.OpenRecordset("TB-TempPrepOF")
    Set rst2 = CurrentDb.OpenRecordset("TB-TempPrepArchi")
     
    While Not rst1.EOF
     
        For I = 1 To rst1.Fields(0)
            rst2.AddNew
            rst2.Fields(0) = rst1.Fields(2)
            rst2.Fields(1) = rst1.Fields(1)
            rst2.Update
     
        Next
     
        rst1.MoveNext
    Wend
     
    rst1.Close
    rst2.Close
     
    Set rst1 = Nothing
    Set rst2 = Nothing
     
    '=== Mise a jour numero de lot
     
    '== comptage etiquette 1 a...
    DoCmd.OpenQuery "RQ-Comptage etiquette"
     
     
    '== mise à jour numero de lot avec dernier lot
     
    DoCmd.OpenQuery "RQ-Fusion N°etiquette+Lot"
    strSql = "UPDATE [TB-TempPrepOF] INNER JOIN [TB-liste_of] ON [TB-TempPrepOF].N°of = [TB-liste_of].of_id SET [TB-liste_of].Edition_etiquette = Yes;"
     
     
    Set Dtbase = CurrentDb()
    Dtbase.Execute (strSql)
    Dtbase.Close
     
     
    '== mise a jour du dernier lot sur donnée etiquette
     
    DoCmd.OpenQuery "RQ-Dernier lot de l'edition"
    DoCmd.OpenQuery "RQ-Mise_a_jour_dernier_lot_article"
    DoCmd.OpenQuery "RQ-Ajout dans archivage"
    DoCmd.SetWarnings True
     
    MsgBox "Génération terminé.", vbInformation
     
    End Sub

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour,
    Une première correction, je ne suis pas allé plus loin
    La 2ème ligne écrase la premiere et la 3ème écrase la seconde donc strSQL vaut la dernière déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    strSql = "UPDATE [TB-TempPrepOF] INNER JOIN [TB-liste_of] ON [TB-TempPrepOF].N°of = [TB-liste_of].of_id SET [TB-TempPrepOF].QTE = [TB-liste_of].[qte_pr];"
    strSql = "DELETE [TB-TempPrepArchi].* FROM [TB-TempPrepArchi];"
    strSql = "delete [TB-TempEnreNumeroLot].* from [TB-TempEnreNumeroLot];"
    Set Dtbase = CurrentDb()
    Dtbase.Execute (strSql)
    Dtbase.Close
    Il faut donc exécuter chaque requête après sa déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    strSql = "UPDATE [TB-TempPrepOF] INNER JOIN [TB-liste_of] ON [TB-TempPrepOF].N°of = [TB-liste_of].of_id SET [TB-TempPrepOF].QTE = [TB-liste_of].[qte_pr];"
    DoCmd.Runsql strSQL
    strSql = "DELETE [TB-TempPrepArchi].* FROM [TB-TempPrepArchi];"
    DoCmd.Runsql strSQL
    strSql = "delete [TB-TempEnreNumeroLot].* from [TB-TempEnreNumeroLot];"
    DoCmd.Runsql strSQL

  3. #3
    Membre confirmé
    Inscrit en
    Août 2003
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 228
    Par défaut
    ha super, effectivement sa me gérai des erreurs.
    Merci de ta correction

    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
     
     
     
    Private Sub GenerationET_Click()
     
    If Not IsNull(Me.Edition_etiquette.Value) Then
        MsgBox "Les etiquettes sont deja affectées a un numero de lot"
        Exit Sub
    End If
     
     
    DoCmd.SetWarnings False
     
    '=== Mise a jour qte par rapport a l'of et vide la table tmp prep archivage
    DoCmd.SetWarnings False
     
    Dim Dtbase As DAO.Database, strSql As String
    strSql = "UPDATE [TB-TempPrepOF] INNER JOIN [TB-liste_of] ON [TB-TempPrepOF].N°of = [TB-liste_of].of_id SET [TB-TempPrepOF].QTE = [TB-liste_of].[qte_pr];"
    DoCmd.RunSQL strSql
    strSql = "DELETE [TB-TempPrepArchi].* FROM [TB-TempPrepArchi];"
    DoCmd.RunSQL strSql
    strSql = "delete [TB-TempEnreNumeroLot].* from [TB-TempEnreNumeroLot];"
    DoCmd.RunSQL strSql
    Set Dtbase = CurrentDb()
    Dtbase.Execute (strSql)
    Dtbase.Close
     
    '=== Creer le nombre d'etiquette dans tb prepAchivage
     
    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
     
     
    Set rst1 = CurrentDb.OpenRecordset("TB-TempPrepOF")
    Set rst2 = CurrentDb.OpenRecordset("TB-TempPrepArchi")
     
    While Not rst1.EOF
     
        For I = 1 To rst1.Fields(0)
            rst2.AddNew
            rst2.Fields(0) = rst1.Fields(2)
            rst2.Fields(1) = rst1.Fields(1)
            rst2.Update
     
        Next
     
        rst1.MoveNext
    Wend
     
    rst1.Close
    rst2.Close
     
    Set rst1 = Nothing
    Set rst2 = Nothing
     
    '=== Mise a jour numero de lot
     
    '== comptage etiquette 1 a...
    DoCmd.OpenQuery "RQ-Comptage etiquette"
     
     
    '== mise à jour numero de lot avec dernier lot
     
    DoCmd.OpenQuery "RQ-Fusion N°etiquette+Lot"
    strSql = "UPDATE [TB-TempPrepOF] INNER JOIN [TB-liste_of] ON [TB-TempPrepOF].N°of = [TB-liste_of].of_id SET [TB-liste_of].Edition_etiquette = Yes;"
     
     
    Set Dtbase = CurrentDb()
    Dtbase.Execute (strSql)
    Dtbase.Close
     
     
    '== mise a jour du dernier lot sur donnée etiquette
     
    DoCmd.OpenQuery "RQ-Dernier lot de l'edition"
    DoCmd.OpenQuery "RQ-Mise_a_jour_dernier_lot_article"
    DoCmd.OpenQuery "RQ-Ajout dans archivage"
    DoCmd.SetWarnings True
     
    MsgBox "Génération terminé.", vbInformation
     
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    personnellement j'aurai fait comme ça! C'est plus rapide que DoCmd
    Code à helas : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CurrentDb.Execute "UPDATE [TB-TempPrepOF] INNER JOIN [TB-liste_of] ON [TB-TempPrepOF].N°of = [TB-liste_of].of_id SET [TB-TempPrepOF].QTE = [TB-liste_of].[qte_pr];"
    CurrentDb.Execute "DELETE [TB-TempPrepArchi].* FROM [TB-TempPrepArchi];"
    CurrentDb.Execute "delete [TB-TempEnreNumeroLot].* from [TB-TempEnreNumeroLot];"

  5. #5
    Membre confirmé
    Inscrit en
    Août 2003
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 228
    Par défaut
    Merci de ton astuce,

    juste une question qui me trotte dans la tete,

    C'est quoi le plus rapide pour access, c'est exécuter une requette en vba ou lance une requette ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "DELETE [TB-TempPrepArchi].* FROM [TB-TempPrepArchi];"
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenQuery "RQ-Comptage etiquette"

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Execute est une action direct.
    DoCm est une action sous-traité a Access

    Execute est le puis rapide.

    Maintenant si tu veux exécuter une requête sauvegardé dans ta base utilises QuerryDef.

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

Discussions similaires

  1. [AC-2010] Help : dde correction formulaire avec code Vba/Sql
    Par anopaname dans le forum Access
    Réponses: 0
    Dernier message: 24/03/2014, 13h14
  2. [XL-2007] Correction code Recherche VBA
    Par Pexou dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/11/2013, 13h50
  3. [XL-2007] Correction code VBA
    Par bigokou dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/09/2012, 15h12
  4. Correction de mon code vba svp
    Par njinkeu.mbakob dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/04/2008, 12h21
  5. [VBA-E] Correction code opérations sur cellules
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/03/2007, 21h52

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