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

Macros et VBA Excel Discussion :

creation d'une macro excel modifiant des caracteres


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut creation d'une macro excel modifiant des caracteres
    Bonjour,

    Je dois créer une macro-commande sur Excel permettant de modifier des caractères automatiquement mais je ne sais pas comment.

    Par exemple j'ai ce document:

    PMO|29||33937998401008|3|060930255001|déversoir en tète de stat|A2||||||||||||
    PMO|31||33937998401008|3|060930255001|Entrée Station |A3||||||||||||
    PMO|32||33937998401008|3|060930255001|sortie station |A4||||||||||||
    PMO|41||33937998401008|3|060930255001|boues produites avant tra|A6||||||||||||
    PMO| 5||33937998401008|3|060930255001|Graisses évacuées sans tr|A9||||||||||||
    PMO|6||33937998401008|3|060930255001|Sable produit évacué|A10||||||||||||
    PMO|7||33937998401008|3|060930255001|Refus dégrillage produit |A11||||||||||||

    Il faut que je change A2 en S2, A3 en S3 et ca pour plusieurs documents.
    Ces caractères sont toujours placer au même endroit.

    Par exemple :


    PMO|29||33937998401008|3|060930255001|déversoir en tète de stat|S2||||||||||||
    PMO|31||33937998401008|3|060930255001|Entrée Station |S3||||||||||||
    PMO|32||33937998401008|3|060930255001|sortie station |S4||||||||||||
    PMO|41||33937998401008|3|060930255001|boues produites avant tra|S6||||||||||||
    PMO|5||33937998401008|3|060930255001|Graisses évacuées sans tr|S9||||||||||||
    PMO|6||33937998401008|3|060930255001|Sable produit évacué|S10||||||||||||
    PMO|7||33937998401008|3|060930255001|Refus dégrillage produit |S11||||||||||||

    Ce sont des fichiers texte (.txt) au format Sandre, ils s'ouvrent avec un logiciel de traitement de texte.

    Merci de votre aide.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Columns("H:H").Replace What:="A", Replacement:="S", LookAt:=xlPart, _

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Mon ami fring me pose une question qui me fait poser une question : Tu les ouvres dans Excel, tes fichiers texte ?
    Parce que sinon, tu as la solution longue qui consiste à ouvrir tes fichiers avec Open, à lire chaque ligne, à faire un split sur la ligne avec "|", à remplacer S par A pour chaque 8 ième mot de ta ligne
    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
    Sub Test()
    Dim Ligne As String, NewLigne, tablo as variant
    Open "C:\NewFich.txt" For Output As #1
        Open "C:\OldFich.txt" For Input As #2
            While Not EOF(2)
                Input #2, Ligne
                Tablo = Split(Ligne,"|")
                Tablo(7) = Replace(Tablo(7),"S", "A")
                For i = 0 to Ubound(Tablo) - 1
                     NewLigne = NewLigne & Tablo(i) & "|"
                Next
                Print #1, NewLigne
                NewLigne = ""
            Wend
        Close #2
    Close #1
    'Et pour donner au nouveau fichierle nom de l'ancien
    Name "C:\OldFich.txt" As "C:\OldFich.txt_sav.txt"
    Name "C:\NewFich.txt" As "C:\OldFich.txt"
    'Kill "C:\OldFich.txt_sav.txt" ça je le ferai après vérif 
    End Sub

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    Non en faite ce sont des fichiers textes, qu'on ouvre avec le bloc note ou word, mais on ma di de creer une macro pour rentre le changement de caracteres automatiquement qui au préalable se fesait a la main.

    Le code que tu ma donner consiste a quoi, car je comprend pas?

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Le dernier code ouvre ton fichier texte -> Tu remplaces OldFich par le nom de ton fichier et tu adaptes le chemin.

    Successivement,
    - Il crée un nouveau fichier pour pouvoir coller le texte modifié (NewFich)
    - Il lit OldFich ligne par ligne,
    - Il crée un tableau des données de la ligne avec split, le séparateur de données étant "|"
    Dans le tableau
    - Il remplace S par A dans la donnée qui va bien (Tablo(7))
    - Il recrée la ligne
    - ligne qu'il enregistre dans le nouveau fichier.
    Quand toutes les lignes du fichier OldFich ont été traitée,
    - Il ferme Oldfich et NewFich.

    Enfin, les trois dernières lignes servent à redonner au fichier créé (NewFich) son ancien nom (OldFich)
    Kill détruit la copie de OldFich mais je te conseille, pour tester, de ne pas la valider.
    Ainsi, tu gardes une sauvegarde de ton ancien fichier tel qu'il était sous un nouveau nom.
    Si tu as un problème, tu supprimes le fichier créé (qui porte le nom d'origine) et tu rebaptises la copie de l'original, en lui rendant son ancien nom. (C:\OldFich.txt_sav.txt -> C:\OldFich.txt) dans mon exemple
    Bon après-midi

    Mais si je reprends la première solution proposée, tu peux ouvrir ton fichier texte sous Excel et travailler dans la feuille de calculs ainsi créée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
        Workbooks.OpenText Filename:="D:\Ton répertoire\TonFichier.txt", Origin:= _
            xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlNone, _
            ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False _
            , Space:=False, Other:=True, OtherChar:="|"
         Columns("H:H").Replace What:="A", Replacement:="S", LookAt:=xlPart
    End sub
    Par contre, pour l'enregistrer, comme les séparateurs sont des "|", tu devras enregistrer les données cellule par cellule. Je pense donc que le tps d'exécution sera plus grand (?)
    C'est toi qui vois
    A+

    (si le code pour écrire les données d'une feuille de calculs dans un txt, t'intéresse, mais je ne vois pas l'intérêt ici...)

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    Désolé je suis un peu blonde, mais je comprend pas!
    Le code que tu ma donné:

    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
    Sub Test()
    Dim Ligne As String, NewLigne, tablo as variant
    Open "C:\NewFich.txt" For Output As #1
        Open "C:\OldFich.txt" For Input As #2
            While Not EOF(2)
                Input #2, Ligne
                Tablo = Split(Ligne,"|")
                Tablo(7) = Replace(Tablo(7),"S", "A")
                For i = 0 to Ubound(Tablo) - 1
                     NewLigne = NewLigne & Tablo(i) & "|"
                Next
                Print #1, NewLigne
                NewLigne = ""
            Wend
        Close #2
    Close #1
    'Et pour donner au nouveau fichierle nom de l'ancien
    Name "C:\OldFich.txt" As "C:\OldFich.txt_sav.txt"
    Name "C:\NewFich.txt" As "C:\OldFich.txt"
    'Kill "C:\OldFich.txt_sav.txt" ça je le ferai après vérif 
    End Sub
    Je le met ou? j'ouvre une feuille excel et je le met dans une macro?

    Desolé

Discussions similaires

  1. [OL-2010] Comment modifier un Rendez vous dans Outlook avec une macro Excel
    Par Paritec dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 13/06/2014, 17h27
  2. Réponses: 6
    Dernier message: 17/07/2013, 14h43
  3. Réponses: 26
    Dernier message: 13/10/2011, 16h25
  4. [AC-2003] Exécuter une macro Excel en passant des arguments
    Par tarnx dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/12/2009, 09h40
  5. Réponses: 4
    Dernier message: 28/11/2007, 23h07

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