OVH Cloud OVH Cloud

Généraliser un code VB?!!

6 réponses
Avatar
hasardeux
Bonsoir,

Le code ci-desous est affecté à l'événement sur_click d'un bouton de commande.

Je voudrais le généraliser, c'est à dire le convertir en une fonction à
appeler en fonction de la table.
Car je vais l'utiliser pour d'autres tables sur d'autres boutons de
commandes. Et de ce fait, si j'ai à modifier le code, je modifier juste la
fonction une fois pour toute.

Merci bcp


.................................................................
Private Sub Commande13_Click()

Dim val2 As Variant
Dim val3 As Variant
Dim val4 As Variant

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", False
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", False
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", False

Set db = CurrentDb()
Set Rs = db.OpenRecordset("T_ANALYSE")

CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE =241110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)=241130));"
'...........etc
' Il y a plusieurs requêtes mise à jour de ce type agissant sur la même table


Set Rs = Nothing
Set db = Nothing

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", True
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", True
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", True

End Sub

.................................................................................

6 réponses

Avatar
Raymond [mvp]
Bonjour.

au lieu de passer par tes getoption et setoption, essaie de passer par:
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE $1110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)$1130));"
'...........etc
DoCmd.SetWarnings True


ça devrait faire le même effet.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"hasardeux" a écrit dans le message de
news:
Bonsoir,

Le code ci-desous est affecté à l'événement sur_click d'un bouton de
commande.

Je voudrais le généraliser, c'est à dire le convertir en une fonction à
appeler en fonction de la table.
Car je vais l'utiliser pour d'autres tables sur d'autres boutons de
commandes. Et de ce fait, si j'ai à modifier le code, je modifier juste la
fonction une fois pour toute.

Merci bcp


.................................................................
Private Sub Commande13_Click()

Dim val2 As Variant
Dim val3 As Variant
Dim val4 As Variant

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", False
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", False
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", False

Set db = CurrentDb()
Set Rs = db.OpenRecordset("T_ANALYSE")

CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE $1110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)$1130));"
'...........etc
' Il y a plusieurs requêtes mise à jour de ce type agissant sur la même
table


Set Rs = Nothing
Set db = Nothing

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", True
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", True
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", True

End Sub

................................................................................



Avatar
hasardeux
Merci pour le conseil, je vais le tester par la suite.

Mais , tu n'as pas une piste pour résoudre mon problème: paramétrer le code
"en fonction" de telle façon que je pourrais l'utiliser avec n'importe quelle
table de même structure.

Merci


Bonjour.

au lieu de passer par tes getoption et setoption, essaie de passer par:
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE $1110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)$1130));"
'...........etc
DoCmd.SetWarnings True


ça devrait faire le même effet.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"hasardeux" a écrit dans le message de
news:
Bonsoir,

Le code ci-desous est affecté à l'événement sur_click d'un bouton de
commande.

Je voudrais le généraliser, c'est à dire le convertir en une fonction à
appeler en fonction de la table.
Car je vais l'utiliser pour d'autres tables sur d'autres boutons de
commandes. Et de ce fait, si j'ai à modifier le code, je modifier juste la
fonction une fois pour toute.

Merci bcp


.................................................................
Private Sub Commande13_Click()

Dim val2 As Variant
Dim val3 As Variant
Dim val4 As Variant

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", False
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", False
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", False

Set db = CurrentDb()
Set Rs = db.OpenRecordset("T_ANALYSE")

CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE $1110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)$1130));"
'...........etc
' Il y a plusieurs requêtes mise à jour de ce type agissant sur la même
table


Set Rs = Nothing
Set db = Nothing

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", True
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", True
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", True

End Sub

................................................................................








Avatar
Raymond [mvp]
Le code que tu as indiqué en 1er poste est le code complet ou tu as encore
500 lignes au milieu ? le Recordset sert à quoi ? il faudrait avoir toute la
fonction pour la vérifier et la réécrire.
en 1ere idée, il faut passer des variables à la fonctiuon, telles que nom de
table.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"hasardeux" a écrit dans le message de
news:
Merci pour le conseil, je vais le tester par la suite.

Mais , tu n'as pas une piste pour résoudre mon problème: paramétrer le
code
"en fonction" de telle façon que je pourrais l'utiliser avec n'importe
quelle
table de même structure.

Merci


Bonjour.

au lieu de passer par tes getoption et setoption, essaie de passer par:
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE $1110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)$1130));"
'...........etc
DoCmd.SetWarnings True


ça devrait faire le même effet.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"hasardeux" a écrit dans le message
de
news:
Bonsoir,

Le code ci-desous est affecté à l'événement sur_click d'un bouton de
commande.

Je voudrais le généraliser, c'est à dire le convertir en une fonction à
appeler en fonction de la table.
Car je vais l'utiliser pour d'autres tables sur d'autres boutons de
commandes. Et de ce fait, si j'ai à modifier le code, je modifier juste
la
fonction une fois pour toute.

Merci bcp


.................................................................
Private Sub Commande13_Click()

Dim val2 As Variant
Dim val3 As Variant
Dim val4 As Variant

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", False
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", False
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", False

Set db = CurrentDb()
Set Rs = db.OpenRecordset("T_ANALYSE")

CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE $1110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)$1130));"
'...........etc
' Il y a plusieurs requêtes mise à jour de ce type agissant sur la même
table


Set Rs = Nothing
Set db = Nothing

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", True
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", True
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", True

End Sub

................................................................................










Avatar
hasardeux
Supposons que le code précédent est complet.

Comment alors avoir la fonction en passant la table comme variable?


Le code que tu as indiqué en 1er poste est le code complet ou tu as encore
500 lignes au milieu ? le Recordset sert à quoi ? il faudrait avoir toute la
fonction pour la vérifier et la réécrire.
en 1ere idée, il faut passer des variables à la fonctiuon, telles que nom de
table.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"hasardeux" a écrit dans le message de
news:
Merci pour le conseil, je vais le tester par la suite.

Mais , tu n'as pas une piste pour résoudre mon problème: paramétrer le
code
"en fonction" de telle façon que je pourrais l'utiliser avec n'importe
quelle
table de même structure.

Merci


Bonjour.

au lieu de passer par tes getoption et setoption, essaie de passer par:
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE $1110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)$1130));"
'...........etc
DoCmd.SetWarnings True


ça devrait faire le même effet.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"hasardeux" a écrit dans le message
de
news:
Bonsoir,

Le code ci-desous est affecté à l'événement sur_click d'un bouton de
commande.

Je voudrais le généraliser, c'est à dire le convertir en une fonction à
appeler en fonction de la table.
Car je vais l'utiliser pour d'autres tables sur d'autres boutons de
commandes. Et de ce fait, si j'ai à modifier le code, je modifier juste
la
fonction une fois pour toute.

Merci bcp


.................................................................
Private Sub Commande13_Click()

Dim val2 As Variant
Dim val3 As Variant
Dim val4 As Variant

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", False
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", False
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", False

Set db = CurrentDb()
Set Rs = db.OpenRecordset("T_ANALYSE")

CurrentDb.Execute "UPDATE T_ANALYSE SET T_ANALYSE.COMPTE $1110 WHERE
(((T_ANALYSE_COMPTES.COMPTE)$1130));"
'...........etc
' Il y a plusieurs requêtes mise à jour de ce type agissant sur la même
table


Set Rs = Nothing
Set db = Nothing

val2 = GetOption("Confirm Record Changes")
Application.SetOption "Confirm Record Changes", True
val3 = GetOption("Confirm Document Deletions")
Application.SetOption "Confirm Document Deletions", True
val4 = GetOption("Confirm Action Queries")
Application.SetOption "Confirm Action Queries", True

End Sub

................................................................................















Avatar
Raymond [mvp]
tu peux faire une function comme ceci:

Public Function Generale(TableName As String) As Boolean
On Error GoTo Err_Func
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE " & TableName & " SET " & TableName & ".COMPTE
$1110 WHERE " & TableName & "_COMPTES.COMPTE $1130;"
DoCmd.SetWarnings True
Generale = True
Exit Function
Err_Func
Generale = False
End Function

et tu appelles cette fonction pour chaque table:
if not Generale("T_ANALYSE") then msgbox "pas bon"
if not Generale("U_ANALYSE") then msgbox "pas bon"
if not Generale("V_ANALYSE") then msgbox "pas bon"

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"hasardeux" a écrit dans le message de
news:
Supposons que le code précédent est complet.

Comment alors avoir la fonction en passant la table comme variable?


Le code que tu as indiqué en 1er poste est le code complet ou tu as
encore
500 lignes au milieu ? le Recordset sert à quoi ? il faudrait avoir toute
la
fonction pour la vérifier et la réécrire.
en 1ere idée, il faut passer des variables à la fonctiuon, telles que nom
de
table.





Avatar
Raymond [mvp]
.../...
lire > Err_Func: au lieu de > Err_Func

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Raymond [mvp]" a écrit dans le message de
news:
tu peux faire une function comme ceci:

Public Function Generale(TableName As String) As Boolean
On Error GoTo Err_Func
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE " & TableName & " SET " & TableName & ".COMPTE
$1110 WHERE " & TableName & "_COMPTES.COMPTE $1130;"
DoCmd.SetWarnings True
Generale = True
Exit Function
Err_Func
Generale = False
End Function

et tu appelles cette fonction pour chaque table:
if not Generale("T_ANALYSE") then msgbox "pas bon"
if not Generale("U_ANALYSE") then msgbox "pas bon"
if not Generale("V_ANALYSE") then msgbox "pas bon"