Apparement tu n'as pas du tout compris mon probleme.
1-La base de donnes dont je parle (certes n'a pas ete conçue par moi mais a bel et bien respecté toutes les spécifications et r`gles en rapport avec une bd access.
2-Le probleme pour en revenir à un niveau basique concerne des champs de distance initialement rentrés en ''pieds''. Ce qui se passe aujourdh'hui est qu'on veut convertir ces enregistrements de ''pieds" en "mètres". Naturellement il faudrait etre attardé sinon vraiment lunatique pour imaginer rentrer à la main pres de 200 lignes d'enregistrements par tables sur un total d'environ 150 tables.
3-L'idee serait alors d'écrire un code qui parcourt toutes les tables,passe en revue tous les champs de chaque table et s'arrete sur les champs (préalablement identifiés) où les valeurs sont en pieds ,et ensuites les convertit en mètres par uen simple règle de trois.
4-Les donnees à modifier sont donc connues,bien repertorìées et le ba-ba de la base de donnée est parfaitement connue,mais par contre en vba c'Est autre chose vu que j'ai dit que je suis débutant.
5-Ci-dessous tu trouveras mon code qui fait le travail de juste reconnaitre les champs (exemple) SEG_trip et SEG-fonction dans toutes mes tables et multiplie leurs valeurs par 2 et 4 respectivement.Ce code marche sans problème
6-Mon problème si tu m'as finalement compris jusqu'au point 5 est le suivant: si pour modifier les valeurs contenues dans SEG_trip il me faut faire appel dans ma formule à la valeur située sur la même ligne dans SEG_fonction,comment dois je m'y prendre pour parcourir les champs en parallèle et updater juste la valeur du champ sur lequel le code se trouve à l'instant t? par exple:
Nouvelle valeur de SIG_type= (ancienne valeur de SIG_type)*2 + (ancienne valeur de SIG_valeur *10).
Code :Dim db As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Sub ReplaceFieldValeur() 'On Error GoTo Err_ReplaceFieldValeur Set db = CurrentDb For Each tdf In db.TableDefs ' on parcourt toutes les tables If tdf.Attributes <> dbSystemObject And tdf.Attributes <> dbHiddenObject Then For Each fld In tdf.Fields 'On parcourt tous les champs If fld.Name Like "*" & "SEG_trip" & "*" And _ (fld.Type = dbLong Or fld.Type = dbDouble Or _ fld.Type = dbInteger Or fld.Type = dbSingle Or _ fld.Type = dbCurrency Or fld.Type = dbFloat Or _ fld.Type = dbDecimal Or fld.Type = dbNumeric Or _ fld.Type = dbBigInt) Then 'si un champ s'appelle SIG_type et est de type numerique requete = "Update [" & tdf.Name & "] SET [" & fld.Name & "] = [" & fld.Name & "]*2 Where [" & fld.Name & "] is not null;" 'Debug.Print rst ' afficher le SQL de la requete dans la console d'exécution au cas où ' On execute la requete DoCmd.RunSQL (requete) ElseIf fld.Name Like "*" & "SEG_fonction" & "*" And _ (fld.Type = dbLong Or fld.Type = dbDouble Or _ fld.Type = dbInteger Or fld.Type = dbSingle Or _ fld.Type = dbCurrency Or fld.Type = dbFloat Or _ fld.Type = dbDecimal Or fld.Type = dbNumeric Or _ fld.Type = dbBigInt) Then 'si un champ s'appelle SIG_type et est de type numerique requete = "Update [" & tdf.Name & "] SET [" & fld.Name & "] = [" & fld.Name & "]*4 Where [" & fld.Name & "] is not null;" 'Debug.Print requete ' afficher le SQL de la requete dans la console d'exécution au cas où ' on exécute la requete DoCmd.RunSQL (requete) End If Next fld End If Next tdf db.Close ' on reinitialise tout Set fld = Nothing Set tdf = Nothing Set db = Nothing End Sub
|