Simplification code VBA sous Access

Bonjour à tous,

Je viens vers vous afin de vous demander si le code que j'ai fais peut être simplifié:

J'ai créer un formulaire en mode tabulaire qui dépend d'une base de données temporaire, celle ci contient 4 champs (Id_Libelle,Etape,Libelle,Bordereau)

Ce code me sert à récupérer des informations indiqué par l'utilisateur pour qu'à la suite celles ci soient transformées puis rediriger dans une table définitive.

Option Compare Database

Private Sub Commande10_Click()
    Dim oBord As DAO.Recordset
    Dim oLib As DAO.Recordset
    Dim oDb As DAO.Database
    Dim Bordereau(), Lib(), Etape&, i&, x&, j&

    'Rafraichissement du formulaire
    Forms![F_Gamme_Opératoire].Requery

    'Affectation des variables
    Etape = Me.Recordset.RecordCount
    Set oDb = CurrentDb
    Set oBord = oDb.OpenRecordset("SELECT bordereau FROM T_Gamme_Opératoire_temp")
    Set oLib = oDb.OpenRecordset("SELECT libelle FROM T_Gamme_Opératoire_temp")

    'Boucle sur toutes les lignes de la colonne bordereau
    Do While oBord.EOF = False
        If IsNull(oBord.Fields(0).Value) = False Then ' Si la ligne est renseignée
            ReDim Preserve Bordereau(i)
            Bordereau(i) = oBord.Fields(0).Value ' Inscription de sa valeur dans l'array "Bordereau"
            DoCmd.SetWarnings False
            DoCmd.RunSQL "DELETE * FROM 4_Op_bord WHERE [B_M_P_OP]=""" & Bordereau(i) & """;" ' Suppression de toutes lignes correspondantes
            i = i + 1 ' Incrémentation
        End If
        oBord.MoveNext ' ligne suivante
     Loop
     If i = 0 Then MsgBox ("Aucun bordereau n'est renseigné"): Exit Sub ' Si aucun enregistrement dans la colonne bordereau, fin de l'instruction

    ' Renitialisation de la variable d'incrémentation
    i = 0
    'Boucle sur toutes les lignes de la colonne libelle
    Do While oLib.EOF = False
        ReDim Preserve Lib(i)
        Lib(i) = oLib.Fields(0).Value ' Inscription de sa valeur dans l'array "Lib"
        i = i + 1 ' Incrémentation
        oLib.MoveNext ' ligne suivante
     Loop

    If i = 0 Then MsgBox ("Aucun libelle n'est renseigné"): Exit Sub ' Si aucun enregistrement dans la colonne Libelle, fin de l'instruction

    'Libération des objets
    oLib.Close
    oBord.Close
    oDb.Close
    Set oLib = Nothing
    Set oBord = Nothing
    Set oDb = Nothing

    ' RAZ de variable X
    x = 0

    'Début de le boucle
    For i = 0 To UBound(Bordereau, 1)
        For j = 0 To UBound(Lib, 1)
            Z = IIf(j - 1 < 10, "0" & j + 1, j + 1) 'Contrôle pour avoir le résultat sous la forme "01"
            'Insertion d'un enregistrment
            DoCmd.RunSQL ("INSERT INTO 4_Op_bord (B_M_P_OP_Etape,LIBELLE, B_M_P_OP) VALUES (""" & Bordereau(i) & Z & """, """ & Lib(j) & """, """ & Bordereau(i) & """)")
            x = x + 1
        Next j
    Next i

    'Suppression des enregistrements de la table temporaire
    CurrentProject.Connection.Execute "DELETE * FROM T_Gamme_Opératoire_temp"
    'Rafraichissement du formulaire
    Forms![F_Gamme_Opératoire].Requery
    Me.Refresh
    'Fermeture du formulaire
    DoCmd.Close acForm, Me.Name
    'Affichage de la table
    DoCmd.OpenTable "4_Op_bord", acViewNormal

End Sub

Private Sub Form_Open(Cancel As Integer)
    CurrentProject.Connection.Execute "DELETE * FROM T_Gamme_Opératoire_temp"
    Forms![F_Gamme_Opératoire].Requery
    Me.Refresh
End Sub

Private Sub LIBELLE_Change()
Etape = Me.CurrentRecord
End Sub

Merci à vous

Rechercher des sujets similaires à "simplification code vba access"