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