IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Remplacer des caractères dans tous les champs de toutes les tables [AC-2013]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 41
    Points : 33
    Points
    33
    Par défaut Remplacer des caractères dans tous les champs de toutes les tables
    Bonjour à tous,
    J'ai eu l'infini bonheur de me faire refourguer une base de données de 130 tables à remplir ayant chacune de 2 à n champs à remplir.
    Approchant du but, on vient de m'informer qu'aucun accent, apostrophe ou caractère spécial n'est toléré.

    Touchant un peu en VBA, je cherche un script qui me permettrait de faire un chercher/remplacer pour chaque caractère spécial identifié dans chaque champ de chaque table. Le code suivant bugue mais je ne trouve pas où est l'erreur de syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Public Function Remplacer_Tout() As String
     
    'Gestion d'erreur
    'On Error Resume Next
    'Declaration des variables
    Dim T As DAO.TableDef
    Dim F As DAO.Field
    Dim DB As DAO.Database
     
    Set DB = CurrentDb
    Debug.Print Chr$(10)
    For Each T In DB.TableDefs
        Debug.Print "*****************" & T.Name
        If T.RecordCount <> 0 Then
            For Each F In T.Fields
                If F.Type = 10 Or F.Type = 12 Or F.Type = 18 Then  ' pour  les champs textuels et les tables avec plus d'un enregistrement
                    DoCommand.RunSQL "UPDATE " & T.Name & _
                        " SET " & T.Name & "." & F.Name & " =  REPLACE([" & F.Name & "], " & Chr$(34) & "â" &  Chr$(34) & ", " & Chr$(34) & "a" & Chr$(34) & ");"
                End If
            Next F
        End If
    Next T
    Debug.Print "Fait"
    End Function
    Ce code me donne des requêtes de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tableXXX SET tableXX.champYY = REPLACE(champYY, "â", "a");
    Lors de l'exécution de la fonction, dès la première boucle sur le champ F, l'exécution s'arrête et mentionne
    erreur d'exécution '424': Objet requis
    .

    Je ne vois pas où est l'erreur, d'autant plus que si je copie/colle ce code dans une requête, l'exécution se fait sans soucis.

    Une idée?

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonsoir,

    Peut-être essayer le code disponible dans cette contribution.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    J'ai jeté un oeil à la contribution. Elle permet de faire des remplacements dans les noms des tables, des champs, dans les formulaires, les états...
    Mais pas dans les données même.

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Désolé, j'avais lu un peu trop vite hier soir...

    J'ai regardé votre code et je vois que vous utilisez DoCommand au lieu de DoCmd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Public Function Remplacer_Tout() As String
     
    'Gestion d'erreur
    'On Error Resume Next
    'Declaration des variables
    Dim T As DAO.TableDef
    Dim F As DAO.Field
    Dim DB As DAO.Database
     
    Set DB = CurrentDb
    Debug.Print Chr$(10)
    For Each T In DB.TableDefs
        Debug.Print "*****************" & T.Name
        If T.RecordCount <> 0 Then
            For Each F In T.Fields
                If F.Type = 10 Or F.Type = 12 Or F.Type = 18 Then  ' pour  les champs textuels et les tables avec plus d'un enregistrement
                    DoCmd.RunSQL "UPDATE " & T.Name & _
                        " SET " & T.Name & "." & F.Name & " =  REPLACE([" & F.Name & "], " & Chr$(34) & "â" &  Chr$(34) & ", " & Chr$(34) & "a" & Chr$(34) & ");"
                End If
            Next F
        End If
    Next T
    Debug.Print "Fait"
    End Function
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 41
    Points : 33
    Points
    33
    Par défaut [Résolu]Remplacer des caractères dans tous les champs de toutes les tables
    J'ai regardé votre code et je vois que vous utilisez DoCommand au lieu de DoCmd
    Ah bah, oui, ça marche beaucoup mieux avec un DoCmd!!!

    In fine, cadeau pour tout le monde, une petite fonction pour chercher-remplacer un élément (mot, caractère...) dans tous les champs de toutes les tables (hors celles du système) de la base de données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Public Function Remplacer_Tout() As String
     
    'Gestion d'erreur
    On Error Resume Next
    'Declaration des variables
    Dim T As DAO.TableDef
    Dim F As DAO.Field
    Dim DB As DAO.Database
    'Vide le treeview
    Set DB = CurrentDb
    DoCmd.SetWarnings False
     
    Debug.Print Chr$(10)
     
     
    'Liste les tables
    For Each T In DB.TableDefs
        Debug.Print "*****************" & T.Name
        If T.RecordCount <> 0 And Left$(T.Name, 4) <> "MSys" Then
            For Each F In T.Fields
                If F.Type = 10 Or F.Type = 12 Or F.Type = 18 Then
                    Debug.Print "a, e, u, c, ', i, o"
                    DoCmd.RunSQL "UPDATE " & T.Name & _
                        " SET " & T.Name & "." & F.Name & " = REPLACE([" & F.Name & "], " & Chr$(34) & "â" & Chr$(34) & ", " & Chr$(34) & "a" & Chr$(34) & ");"
                    DoCmd.RunSQL "UPDATE " & T.Name & _
                        " SET " & T.Name & "." & F.Name & " = REPLACE([" & F.Name & "], " & Chr$(34) & "à" & Chr$(34) & ", " & Chr$(34) & "a" & Chr$(34) & ");"
                    DoCmd.RunSQL "UPDATE " & T.Name & _
                        " SET " & T.Name & "." & F.Name & " = REPLACE([" & F.Name & "], " & Chr$(34) & "ç" & Chr$(34) & ", " & Chr$(34) & "c" & Chr$(34) & ");"
                    '.....
                End If
            Next F
        End If
    Next T
    DoCmd.SetWarnings True
    Debug.Print "Fait"
    End Function
    Attention pour les novices: quand vous lancez ce script, vous ne pouvez revenir en arrière sur ces chercher/remplacer!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Update sur toutes les champs de toutes les tables
    Par cmasset dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/12/2013, 19h04
  2. [RegEx] Remplacer des caractères dans une string
    Par jexl dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 22h26
  3. Réponses: 4
    Dernier message: 29/08/2006, 17h44
  4. Réponses: 4
    Dernier message: 01/03/2006, 13h58
  5. Réponses: 3
    Dernier message: 27/06/2005, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo