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 Automatiquement dans fichier txt


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Tunisie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 43
    Points
    43
    Par défaut Remplacer Automatiquement dans fichier txt
    Bonjour à tous,

    Je vous explique mon problème:

    J'ai un fichier texte et un fichier Excel, je voudrais remplacer des valeurs se trouvant dans le fichier texte par d'autres se trouvant dans le fichier Excel.
    dans le fichier Excel j'ai deux colonnes "texte à remplacer" et "valeur". Il faudrait que le programme puisse lire la valeur de la première colonne et faire un "remplacer tout" dans le fichier texte avec la valeur se trouvant dans la deuxième colonne et aprés il passe à la deuxième ligne du fichier Excel jusqu'à ce qu'il parcourt toutes les lignes

    j'ai pensé à exporter le fichier Excel dans une table et faire le traitement en utilisant du VBA , mais là je ne sais pas par commencer.


    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 645
    Points : 34 350
    Points
    34 350
    Par défaut
    salut, tu peux adapter ton code sur ceci :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    Sub test()
    ChangementMDP "C:\TravailJPcheck", "pioupi?", "Pioupiou\o/"
    End Sub
     
    Function ChangementMDP(ByVal Mondossier As String, ByVal AncienMotdePasse As String, ByVal NouveauMotdePasse As String) As Boolean
    'fonction de récupération des fichiers dans un répertoire, copie des infos dans la table T_Fichiers_mdb
        Dim ObjFSO, ListRepertoires, ListSousRep, ListFichiers, MonRep, MonFich
        Dim fso         As FileSystemObject
        Dim fFile       As File
        Dim gFile       As File
        Dim ts          As TextStream
        Dim ts2         As TextStream
        Dim result      As String
        Dim Path        As String
        Dim PathTempo   As String
     
        Set ObjFSO = CreateObject("Scripting.FileSystemObject")
        Set ListRepertoires = ObjFSO.GetFolder(Mondossier)
     
     
                Set ListFichiers = ListRepertoires.Files
                For Each MonFich In ListFichiers
                    ' tester l'extension du fichier : seuls les Cfg
                    If Right(MonFich.Name, 3) = "cfg" Then
                        'ouvrir le fichier d'entrée
                        Set fso = CreateObject("Scripting.FileSystemObject")
                        Path = MonFich.Path
                        PathTempo = Replace(Path, ".cfg", "_piou.cfg")
                        Set fFile = fso.GetFile(MonFich.Path)
                        fso.CreateTextFile (PathTempo)
                        Set gFile = fso.GetFile(PathTempo)
                        Set ts = fFile.OpenAsTextStream(ForReading)
                        Set ts2 = gFile.OpenAsTextStream(ForAppending)
                        While Not ts.AtEndOfStream
                            result = ts.ReadLine
                            If InStr(1, result, AncienMotdePasse)> 1 Then
                                ts2.WriteLine Replace(result, AncienMotdePasse, NouveauMotdePasse)
                            Else
                                ts2.WriteLine result
                            End If
                        Wend
                        ts.Close
                        ts2.Close
                        Path = MonFich.Path
                        Set fFile = Nothing
                        Set gFile = Nothing
                        Kill Path
                        Name PathTempo As Path
     
                    End If
                Next
            ' Appel pour lister l'ensemble des sous sous sous rep...
     
            ChangementMDP = True
     
    End Function

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Tunisie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 43
    Points
    43
    Par défaut
    Merci pour la réponse !
    mais je suis perdu !!!

    est il possible de copier le contenu de tout le fichier texte directement dans le module de code en l'affectant dans une variable de type string et ensuite utiliser une fonction du type REPLACE ?

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Oui !
    un exemple plus synthétique (pardon jpcheck)

    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
    dim str As string
    dim fso as FileSystemObject ' AJOUTER LA REFERENCE (VOIR FAQ SI BESOIN)
    dim ts as TextStream
     
    set fso = new FileSystemObject
    ' ouvre le fichier
    set ts = fso.OpenTextFile("C:\Temp\toto.txt")
    ' met tout le contenu dans une variable
    str = ts.ReadAll
    ts.Close
    ' remplace
    str = Replace(str, "Machin", "Chose")
    ' on écrase
    set ts = fso.createtextfile("C:\Temp\toto.txt", True)
    ts.write str
    ts.close
     
    'on libère la mémoire
    Set fso=nothing
    set ts=nothing

    Citation Envoyé par sami_b Voir le message
    Merci pour la réponse !
    mais je suis perdu !!!

    est il possible de copier le contenu de tout le fichier texte directement dans le module de code en l'affectant dans une variable de type string et ensuite utiliser une fonction du type REPLACE ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 645
    Points : 34 350
    Points
    34 350
    Par défaut
    tout à fait
    +1 caféine

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Tunisie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 43
    Points
    43
    Par défaut
    Merci les gars !!!!!

    Voici le code obtenu :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Function Remplacer() As Boolean
     
    Dim str As String
    Dim fso As FileSystemObject ' AJOUTER LA REFERENCE (VOIR FAQ SI BESOIN)
    Dim ts As TextStream
    Dim db As DAO.Database, rst As DAO.Recordset, fld As DAO.Field
    Dim sSQL As String
     
     
    ' Ouverture de la base de données
    Set db = DBEngine.OpenDatabase("C:\Documents and Settings\mom\Bureau\fichiers.mdb")
    sSQL = "Select * From remplacement "
    ' Ouverture du recordset
    Set rst = db.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
     
    If Not rst.EOF Then
      'rst.MoveFirst
      While Not rst.EOF
         Set fso = New FileSystemObject
    ' ouvre le fichier
    Set ts = fso.OpenTextFile("C:\fichier\test.txt")
    ' met tout le contenu dans une variable
    str = ts.ReadAll
    ts.Close
    ' remplace
    str = Replace(str, rst(0), rst(1))
    ' on écrase
    Set ts = fso.createtextfile("C:\fichier\fichier.txt", True)
    ts.write str
    ts.Close
     
    'on libère la mémoire
    Set fso = Nothing
    Set ts = Nothing
     
         rst.MoveNext
      Wend
    Else
      MsgBox "Le jeu d'enregistrements est vide"
    End If
     
     
     
        ' Fermeture du Recordset
        rst.Close
    End Function

    mais je viens de m'apercevoir d'une chose (j'aurai du prevoir ça) c'est que j'ai des valeurs dans le fichier comme celle ci par exemple ALGM10R01A011COL1 et il y a aussi ça ALGM10R01A011COL11

    donc si je lui demande de me remplacer ALGM10R01A011COL1 il va aussi me remplacer l'autre aussi ALGM10R01A011COL11 (du moins la première partie) .

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    si ton fichier texte est colonné cela ne devrait pas poser de problème

    tu le considères comme un fichier attaché sous access
    ou tu l'importes sous excel

    sous access tu fais une jointure exvaleur=valeurdufichiertexte
    avec une requête création de table tu vas obtenir une nouvelle version (à convertir en texte)

    sous excel un recherchev avec valeur_proche à faux et le tour est joué

    sinon un replace(machaine,exnom,nouveaunom) pourrait devenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    replace (machaine," " & exnom & " "," " & nouveanom & " ")

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Tunisie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par random Voir le message
    si ton fichier texte est colonné cela ne devrait pas poser de problème

    tu le considères comme un fichier attaché sous access
    ou tu l'importes sous excel

    sous access tu fais une jointure exvaleur=valeurdufichiertexte
    avec une requête création de table tu vas obtenir une nouvelle version (à convertir en texte)

    sous excel un recherchev avec valeur_proche à faux et le tour est joué

    sinon un replace(machaine,exnom,nouveaunom) pourrait devenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    replace (machaine," " & exnom & " "," " & nouveanom & " ")
    avec ce code on va remplacer exactement le texte recherché? donc il faut que la chaine recherchée soit entre deux espaces ?

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ben oui

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Tunisie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par cafeine Voir le message
    Oui !
    un exemple plus synthétique (pardon jpcheck)

    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
    dim str As string
    dim fso as FileSystemObject ' AJOUTER LA REFERENCE (VOIR FAQ SI BESOIN)
    dim ts as TextStream
     
    set fso = new FileSystemObject
    ' ouvre le fichier
    set ts = fso.OpenTextFile("C:\Temp\toto.txt")
    ' met tout le contenu dans une variable
    str = ts.ReadAll
    ts.Close
    ' remplace
    str = Replace(str, "Machin", "Chose")
    ' on écrase
    set ts = fso.createtextfile("C:\Temp\toto.txt", True)
    ts.write str
    ts.close
     
    'on libère la mémoire
    Set fso=nothing
    set ts=nothing
    PArdon Cafeine, mais avec cette methode est ce qu'il n'y a pas de limites pour la taille du fichier texte (puisqu'il va être inséré dans une variable STRING)?

  11. #11
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 645
    Points : 34 350
    Points
    34 350
    Par défaut
    salut,
    si tu as un doute, mets str en tant que variant non ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Tunisie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 43
    Points
    43
    Par défaut
    je viens de me rendre compte que le code que j'ai fait ne remplace que les mots entiers !!!!si le mot est précédé/suivi d'un cartactère , il ne le remplace pas

  13. #13
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 645
    Points : 34 350
    Points
    34 350
    Par défaut
    c'est ce que tu as demandé il me semble
    mais je viens de m'apercevoir d'une chose (j'aurai du prevoir ça) c'est que j'ai des valeurs dans le fichier comme celle ci par exemple ALGM10R01A011COL1 et il y a aussi ça ALGM10R01A011COL11

    donc si je lui demande de me remplacer ALGM10R01A011COL1 il va aussi me remplacer l'autre aussi ALGM10R01A011COL11 (du moins la première partie) .

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Tunisie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 43
    Points
    43
    Par défaut
    Au fait il y a un problème au niveau de la boucle , il ne lit qu'un seul enregistrement de la table pour faire le remplacement dans le fichier texte.

  15. #15
    Membre régulier Avatar de imparator_42
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 242
    Points : 122
    Points
    122
    Par défaut
    si on voulait remplacer 1 lettre par 1 autre lettre ou signe (ou nimporte) il est aussi efficasse??

  16. #16
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    Bonjour,
    ' ouvre le fichier
    set ts = fso.OpenTextFile("C:\Temp\toto.txt")
    Est-il possible d'ouvrir une boite de dialogue permettant de selectionner le fichier de notre choix plutot que celui par defaut C:\Temp\toto.txt ?

  17. #17
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 645
    Points : 34 350
    Points
    34 350
    Par défaut
    bonjour,
    regarde getopenfilename() par exemple

  18. #18
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    Merci jpcheck,

    j'avais fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' Ouvrir une boite de dialogue pour rechercher le fichier source
    Private Function funcOpenFile() As Variant
        'Affiche la boîte de dialogue "Ouvrir"
        funcOpenFile = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")
    '    funcOpenFile = Fichier
        'On sort si aucun fichier n'a été sélectionné ou si l'utilisateur
        'a cliqué sur le bouton "Annuler", ou sur la croix de fermeture.
        If funcOpenFile = False Then Exit Function
    End Function
    mais je n'arrive pas a l'appliquer a la proposition de cafeine:
    dim str As string
    dim fso as FileSystemObject ' AJOUTER LA REFERENCE (VOIR FAQ SI BESOIN)
    dim ts as TextStream

    set fso = new FileSystemObject
    ' ouvre le fichier
    set ts = fso.OpenTextFile("C:\Temp\toto.txt")
    ' met tout le contenu dans une variable
    str = ts.ReadAll
    ts.Close
    ' remplace
    str = Replace(str, "Machin", "Chose")
    ' on écrase
    set ts = fso.createtextfile("C:\Temp\toto.txt", True)
    ts.write str
    ts.close

  19. #19
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 645
    Points : 34 350
    Points
    34 350
    Par défaut
    la variable funcopenfile te retourne le path du fichier, il retourne null si l'utilisateur a appuyé sur "annuler".

    ca donne ca :
    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
    dim str As string
    dim fso as FileSystemObject ' AJOUTER LA REFERENCE (VOIR FAQ SI BESOIN)
    dim ts as TextStream
    dim pathaouvrir as Variant
    set fso = new FileSystemObject
    ' ouvre le fichier
    pathaouvrir = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")
    if pathaouvrir<>False Then
    'vérifions toujours que le fichier existe
    if Dir(pathaouvrir)<>"" Then
    set ts = fso.OpenTextFile(pathaouvrir)
    ' met tout le contenu dans une variable
    str = ts.ReadAll
    ts.Close
    ' remplace
    str = Replace(str, "Machin", "Chose")
    ' on écrase
    set ts = fso.createtextfile(pathaouvrir, True)
    ts.write str
    ts.close 
    end if
    end if

  20. #20
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    Arrfffffff terrible.......Merci JPcheck

Discussions similaires

  1. Remplacer une ligne dans fichier txt !
    Par cincap dans le forum Débuter
    Réponses: 13
    Dernier message: 24/09/2013, 12h52
  2. Remplacer chaine de caractère dans fichier .txt
    Par lepiaf69 dans le forum VB.NET
    Réponses: 6
    Dernier message: 07/09/2010, 15h57
  3. Réponses: 1
    Dernier message: 14/08/2008, 13h30
  4. rechercher/remplacer chaine dans fichier txt
    Par C_Mila dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 25/02/2007, 12h06
  5. Réponses: 3
    Dernier message: 29/09/2006, 16h27

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