Code VBA Acces pour se deplacer dans plusieurs tables et champs d'une seule base

Doncorleone1287 Messages postés 2 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 23 mai 2012 - 22 mai 2012 à 23:26
Doncorleone1287 Messages postés 2 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 23 mai 2012 - 23 mai 2012 à 01:19
Salut à tous,je débute en access et j'ai des petits soucis.

J'ai une grosse base de données de plus de 150 tables et naturellement ces tables ont plusieurs champs. Il se fait que je veux faire des modifications sur 5 champs précis se retrouvant dans la plupart de toutes les tables
Donc j voudrais savoir comment on peut:
1-parcourir toutes les tables
2-ensuite parcourir chaque champ et retrouver les champs qui m'interessent
3-enfin appliquer les modifications(calculs) sur ces champs precis là .
avec du code VBA avec des requetes ou autres

J'ai écrit un code de base pour tester au moins si ca marche. L'idée de depart reste la même ,à savoir que je veux modifier des valeurs numeriques dans plusieurs champs spécifiques dans une base de donnees avec une multitude de tables.

Dans ce code test je recherche juste dans toutes les tables le champ SEG_type et je veux multiplier ces valeurs par 2 (ou faire d'autres calculs selon le cas) pour voir si ça marche au moins. Mais ca compile sans erreur sauf que je n vois aucun changement dans mes tables


Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim rst As DAO.Recordset
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_type" & "*" And IsNumeric(fld) Then  'si un champ s'appelle SEG_type et est de type numerique
        Set rst = dbs.OpenRecordset(fld.Name, dbOpenDynaset) 'on ouvre le recordset
          If Not rst.EOF Then
                Do While Not rst.EOF 'tant qu'on n'a pas fini ttes les lignes du champ

        s_type = rst.Fields("SEG_type").Value ' on recupere la valeur de la ligne dans la colonne SIG_type
        
        'requete = " Update fld(fld.Name) As  s_type * 2 " ' on cree la requete ki va modifier l'enregistrement de la ligne sur lakel on se trouve
        'db.Execute requete ' On execute la requete
             sRecInsert = "INSERT INTO"
    
         'rst.Fields(fld.Name).Value = NewValue (un commentaire perso dans mon code)

                Loop
            End If
            rst.Close
            ' Set rst = Nothing
            
          End If

   Next fld
     End If
    
    Next tdf
    
    
    db.Close
' on reinitialise tout
Set rst = Nothing
Set fld = Nothing
Set tdf = Nothing
Set db = Nothing

End Sub



Yannick

1 réponse

Doncorleone1287 Messages postés 2 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 23 mai 2012
23 mai 2012 à 01:19
NB: ne pas tenir compte du srecInsert, c'est une erreur lors du copier coller.
Mon code tient compte de requête et de db.execute requête


Yannick
0
Rejoignez-nous