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

Excel Discussion :

Remplacer un caractère dans un fichier texte


Sujet :

Excel

  1. #21
    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 pour vos divers messages mais effectivement, il n'y a pas systematiquement un % devant chaque mail et il peut y avoir plusieur mail par ligne. Il peut meme y avoir un mail qui commence a la fin d'une ligne et continue a la ligne suivante (je n'ai pas géré le cas).

    Désolé, pour des raison de confidentialité professionnelle, je ne peux pas placer un extrait du fichier texte mais vous pouvez tester avec ce que j'ai mis sur le forum.

    Voici ce que j'ai écrit et cela fonctionne sur un fichier clean.

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    Option Explicit
     
    Const cStartMail As String = "SMTP:"    ' Début de l'email
    Const cEndMail As String = " "          ' Fin de l'email
    Const cPrenomNom As String = "."        ' Séparateur du Prénom et du Nom
    Const cNomSociety As String = "@"        ' Séparateur du Nom et de la société
    Const cSocietyTld As String = "."        ' Séparateur de la socété et le Top Level Domaine
     
    Dim strLigne As String          ' Contenu de la ligne
    Dim lgPosCurseur As Long    ' Positon du curseur dans le texte
    Dim lgRows As Long
     
    Sub FindMail()
    Dim intFic As Integer
    Dim temp As Long '*
    ' Initialisation des variables
    strLigne = Empty
    lgRows = 2
     
    subMiseEnpage
     
    intFic = FreeFile
     
     
    Open funcOpenFile For Input As intFic
     
     While Not EOF(intFic)
        ' Lecture de la ligne
        Line Input #intFic, strLigne
        lgPosCurseur = 1
     
     
        While lgPosCurseur < Len(strLigne)
            'MsgBox strLigne
            ' Recherche du debut de l'email
            If Mid(strLigne, lgPosCurseur, Len(cStartMail)) = cStartMail Then ' Mid( zone de rech, position du curseur , longeur) = valeur désiré. Len (chaine de caractere) extrait la longeur de la chaine de carac
                'Recherche information
                subFindData
            Else:
                lgPosCurseur = lgPosCurseur + 1 ' Déplacement du curseur
            End If
        Wend
     Wend
     
    Close intFic
     
    End Sub
     
    ' ###########################################################
    ' ###########################################################
     
    ' Recherche des données
    Private Sub subFindData()
     
    Dim lgPosStart As Long 'Position de début des données
    Dim lgPosStartTemp As Long 'Position de début de données suplémentaires
    Dim lgPosEnd As Long    'Position de fin des données
    Dim stMail As String ' Mémorisation de l'adresse Mail
    Dim stPrenom As String ' Mémorisation du prénom
    Dim stNom As String ' Mémorisation du nom
    Dim stSociety As String ' Mémorisation de la société
     
    ' Initialisation des variables
    lgPosCurseur = lgPosCurseur + Len(cStartMail) 'Positionnement du curseur en début de données
    lgPosStart = lgPosCurseur
    lgPosStartTemp = 0
    stMail = Empty
    stPrenom = Empty
    stNom = Empty
    stSociety = Empty
     
    While stMail = Empty
        If Mid(strLigne, lgPosCurseur, Len(cEndMail)) = cEndMail Or lgPosCurseur = Len(strLigne) Then
                stMail = Mid(strLigne, lgPosStart, lgPosCurseur - lgPosStart) ' Enreg de l'adresse Mail
            ' Prénom
            ElseIf Mid(strLigne, lgPosCurseur, 1) = cPrenomNom And stNom = Empty Then
                If stPrenom = Empty Then
                    stPrenom = Mid(strLigne, lgPosStart, lgPosCurseur - lgPosStart) ' Enreg du prénom
                    lgPosStartTemp = lgPosCurseur + Len(cPrenomNom)
                Else: stPrenom = stPrenom & "(" & Mid(strLigne, lgPosStartTemp, lgPosCurseur - lgPosStartTemp) & ")"
                End If
     
            ' Nom
            ElseIf Mid(strLigne, lgPosCurseur, 1) = cNomSociety Then
                    lgPosStartTemp = lgPosStart + Len(stPrenom) + Len(cPrenomNom)
                    stNom = Mid(strLigne, lgPosStartTemp, lgPosCurseur - lgPosStartTemp) ' Enreg du nom
     
            ElseIf Mid(strLigne, lgPosCurseur, 1) = cSocietyTld And stSociety = Empty And stNom <> Empty Then ' Pour trouver une société, le nom doit être renseigné
                lgPosStartTemp = lgPosStartTemp + Len(stNom) + Len(cNomSociety)
                stSociety = Mid(strLigne, lgPosStartTemp, lgPosCurseur - lgPosStartTemp) ' Enreg de la société
     
        End If
        lgPosCurseur = lgPosCurseur + 1 ' Déplacement du curseur
    Wend
    ' Affichage des données trouvées
    Call subDisplayData(stMail, stPrenom, stNom, stSociety)
    End Sub
     
    ' ###########################################################
    ' ###########################################################
     
    ' 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
     
     
    ' ###########################################################
    ' ###########################################################
     
     
    Private Sub subDisplayData(strMail As String, strPrenom As String, strNom As String, strSociety As String)
     
        Cells(lgRows, 1).FormulaR1C1 = strPrenom    ' Affichage du Prénom
        Cells(lgRows, 2).FormulaR1C1 = strNom       ' Affichage du Nom
        Cells(lgRows, 3).FormulaR1C1 = strSociety   ' Affichage du Society
        Cells(lgRows, 4).FormulaR1C1 = strMail      ' Affichage du Mail
     
     
    lgRows = lgRows + 1
     
    End Sub
     
    ' ###########################################################
    ' ###########################################################
     
     
    Private Sub subMiseEnpage()
    ' Effacer classeur
        Cells.Select
        Selection.ClearContents
     
    ' Titre des colonnes
        ActiveCell.FormulaR1C1 = "Prénom"
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "Nom"
        Range("C1").Select
        ActiveCell.FormulaR1C1 = "Société"
        Range("D1").Select
        ActiveCell.FormulaR1C1 = "Email"
    ' Mise en forme de la 1° ligne : centré, gras, filtres
        Rows("1:1").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Font.Bold = True
        Selection.AutoFilter
    End Sub
    Merci encore pour votre aide pour faire avancer mon projet.

  2. #22
    Membre habitué
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Points : 135
    Points
    135
    Par défaut
    Si ton programme fonctionne, penses au tag
    A+
    Benz
    Benz
    ______________________________________________________________
    Software is like sex, it's better when it's free - Linus Torvalds

  3. #23
    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
    Seulement 1 partie fonctionne....donc pas encore résolu
    Cette procedure devrait t'aider a faire le menage.
    A toi de completer le select case pour completer le nettoyage
    Pourrais tu etre + clair STP

  4. #24
    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 a tous,

    Je viens de trouver un petit freeware "Simple pad" qui permet de traiter des fichier texte.
    Ce soft presente deux fonctionalités:

    Word Wrap : permet le retour à la ligne en bout de fenêtre ou non

    Plain Text : si sélectionné permet de traiter du texte pur (sans justification, attributs des caractères ou fonts). Le format Plain Text est utile pour modifier des fichiers ini ou des fichiers systèmes.

    J'ai coché Plain Text : et décoché Word Wrap :, celui-ci a effectué le traitement du fichier. et la macro n'a pas planté.

    Est il possible de faire un tel traitement avec VBA car ceci doit etre au final transparent pour les futurs utilisateurs...

    Merci pour votre aide

  5. #25
    Membre habitué
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Points : 135
    Points
    135
    Par défaut
    J'ai pas bien saisi ce que tu avais fait avec SimplePad... Tu t'en es servi pour transformer ton fichier binaire en fichier purement texte? Mais qu'est-ce qu'il a fait des caractères non texte? Tu as un exemple du fichier en sortie de SimplePad?
    Benz
    ______________________________________________________________
    Software is like sex, it's better when it's free - Linus Torvalds

  6. #26
    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
    Ben en fait en fichier source, je lui ai donné mon fichier texte brut avec plein de caractère bizarre.

    ‚ ˆõÍaØOÔq¤×Î*(=§Sz_ûmøU¥Ê£Z“{I‘´éÅNFBƕÇ…»P’v³G*Ž\¶1–¡”nÞ){úñ¥/×h¾ê³* •»"úô¨2¹¹}Íæób:†{ÝZŽ:xM(ߢëZ²$ý«¹ žßÿyäˆKB{ÖùæMÅHqÈè…å‘H…û8ÖDNò3Q,1º’9|7æ´Ïµ®·xPÄ»œÂ%|ÌaÃ4Œ å
    ¡“—KaÀ¬i73üSä•çáôeë뛚´/fäƒþ^.ö¢Ø_'Ž·Aù ^S¢õɪ…J W§|…Bkßb'
    @Câ÷‹Âjï £×0Ô0U#0€Ã
     *†H†÷
     ‚ Y©áÅ/Šý7ßM)æ1±³ð.,{ÛÒ»Zºkfè:*W~y?1èJﯲZÓWù^èkC~0ËhOªõÞù>\㜡7xChºr)Ž¸¡ô)Ir™_UHbSVܼ’³JÇŸðäWüðíy'ây^Öb\@/âFÃnT–‰Á%'6;¿Êa?l„i*meă‘ }¨¿¦ýËg:…ü ¾š–Ñ¡Ä#_1£çÛÛ%‚ávM6ô<,ôqvèá
    MZøÀŠðbõî
    <*ì㪶³ÞûÓoŠ!\
    ‹*¶ØÈ1:¾ÃYâ0 Ê5>š/|ÛtøþªµŠü}Ö4Wò‡?ð$='äoøD¤íYb «¨9Ù\B¹Êu;÷[îû²»á˜Þ+è{7·ˆÞS…ú[µÃHýhI–®1©ùØþá„ÖÔþ–%^ý<ÀnÑ3´„0µi,#šTú£´3Î
    v3?÷³Õ³3–A2™{¹ÔU˜tág+¦£dvxe²°ž`ånë©/7ää _ÈOàúNì…bœÝW.“Ÿ!¤ßbÊé–IÍ<[F例“çÍFmï*ÇÈ*™7ø†ë¾ Ñ„ë?[:¨á
    Ém„¥Êβæ$AîŽk¦VÃÊÈÏì·¥cU‹ì#?¶
    En sortie, j'ai eu le meme fichier mais sans ces caractères bizarre. Comme si il avait "architecturé" le fichier.... Bizarre....

  7. #27
    Membre habitué
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Points : 135
    Points
    135
    Par défaut
    Ca, c'est ton fichier avant, ou après SimplePad?
    Je ne comprends toujours pas en quoi il a transformé tes caractère spéciaux...
    Benz
    ______________________________________________________________
    Software is like sex, it's better when it's free - Linus Torvalds

  8. #28
    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
    ca c'est un extrait du fichier avant...

  9. #29
    Membre habitué
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Points : 135
    Points
    135
    Par défaut
    OK. Et ça donne quoi APRES?
    Benz
    ______________________________________________________________
    Software is like sex, it's better when it's free - Linus Torvalds

  10. #30
    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
    un fichier texte bien structuré sans tous ces caractères bizarres.
    Désolé, je ne peux pas mettre d'extrait (confidentiel).

  11. #31
    Membre habitué
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Points : 135
    Points
    135
    Par défaut
    Tu comprends bien que si on n'a pas la structure du fichier, même étant "bien structuré", on ne pourra pas t'aider plus!
    Remplace les noms par "toto" et les adresses par "toto@truc.com", et ça nous ira très bien! Mets nous un petit extrait représentatif du fichier, juste pour voir cette fameuse structure.
    Benz
    ______________________________________________________________
    Software is like sex, it's better when it's free - Linus Torvalds

  12. #32
    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
    Pour le fichier texte, désolé c'est vraiment pas possible car entre les numeros de tel, les adresses, les nom d'entreprises; les adresses mail.... il y aurait trop de données a filtrer. Pour info, le fichier texte fait 34 Mo.

    Sinon, vu que mon programme fonctionne avec ce fameux fichier texte "propre", il suffirait de créer une macro permettant de traiter le fichier texte source.

    C'est a dire, faire tourner une macro qui teste les caratères un par un.
    Si le caratere testé est different de "a" jusqu'a "z" de "0" jusqu'a "9", de "@", de ":", de "." alors le caractere est effacé.

    Une fois ce fichier traité, alors je fais tourner ma macro et le tour est joué.

    Merci

  13. #33
    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
    Est-ce que quelqu'un peut au moins me répondre sur la faisabilité de la chose:

    Lire caractere par caractere le fichier texte
    Si le caractere lu est different de celui attendu alors
    le caractere est effacé
    sinon
    on passe au caractere suivant.

    Merci beaucoup....

  14. #34
    Membre habitué
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Points : 135
    Points
    135
    Par défaut
    Désolé, je ne suis pas assez compétent en VBA pour te donner la réponse à ta question (tu as besoin d'ouvrir un fichier en mode binaire, et je ne sais pas le faire).
    Bon courage.

    Benz
    Benz
    ______________________________________________________________
    Software is like sex, it's better when it's free - Linus Torvalds

  15. #35
    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
    pourquoi en binaire?

  16. #36
    Membre habitué
    Avatar de dj_benz
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 178
    Points : 135
    Points
    135
    Par défaut
    Parce que ce genre de fichier n'est pas un fichier texte.
    ‚ ˆõÍaØOÔq¤×Î*(=§Sz_ûmøU¥Ê£Z“{I‘´éÅNFBƕÇ…»P’v³G*Ž\¶1–¡”nÞ){úñ¥/×h¾ê³* •»"úô¨2¹¹}Íæób:†{ÝZŽ:xM(ߢëZ²$ý«¹ žßÿyäˆKB{ÖùæMÅHqÈè…å‘H…û8ÖDNò3Q,1º’9|7æ´Ïµ®·xPÄ»œÂ%|ÌaÃ4Œ å
    ¡“—KaÀ¬i73üSä•çáôeë뛚´/fäƒþ^.ö¢Ø_'Ž·Aù ^S¢õɪ…J W§|…Bkßb'
    @Câ÷‹Âjï £×0Ô0U#0€Ã
     *†H†÷
    Si tu l'ouvres en mode texte, tu auras des problèmes (ton problème vient très certainement de là)
    Benz
    ______________________________________________________________
    Software is like sex, it's better when it's free - Linus Torvalds

  17. #37
    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
    je suis d'accord mais si on remplace les caracteres different des chiffres et des lettres alors je peux trouver une solution

    Lire caractere par caractere le fichier texte
    Si le caractere lu est different de celui attendu alors
    le caractere est effacé
    sinon
    on passe au caractere suivant.

Discussions similaires

  1. Remplacer un caractère dans un fichier texte
    Par jujel dans le forum VBScript
    Réponses: 0
    Dernier message: 19/06/2013, 14h28
  2. [Batch] Code pour remplacer un caractère dans un fichier texte
    Par amerex dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 27/09/2012, 16h20
  3. [Batch] Remplacer des caractères dans un fichier texte
    Par Benoit Labbey dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 09/06/2009, 16h43
  4. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  5. Réponses: 5
    Dernier message: 25/01/2005, 14h26

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