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 :

Supprimer les caractères spéciaux [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut Supprimer les caractères spéciaux
    Bonjour à tous!

    Voilà, j'ai fait un code qui traite une multitude de fichiers à la suite et qui les enregistre en csv pour pouvoir ensuite tous les compiler et importer le fichier compilé dant une base MySQL.
    Mon problème c'est que dans certaines lignes, j'ai un champs texte avec des caractères spéciaux genre ® ¿ ou je ne sais quelle autre bêtise du genre...

    Ma question est simple: n'existe-t-il pas une fonction vba qui me permet de rechercher dans un fichier si il existe des caractères spéciaux ou non ???

    Je pense à un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range(Tartanpion).find(what:="® ¿ ", lookin:= xlvalue)
    mais dans le "what" ce serais tout les caractère "non-normaux"

    Merci pour votre aide !!

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    D'où viennent ces caractères indésirables ? importés de quoi ?

    je crains fort que tu ne puisses dans un tel cas éviter
    - de parcourir en boucle toutes les cellules de la plage concernée pour en extraite le contenu (appelons-le toto)
    - d'analyser toto caractère par caractère pour déterminer si un caractère n'est pas dans la liste de tes "caractères normaux".... (que tu es seul à pouvoir établir en fonction du contexte présent et que tu es seul à connaître !...... un caractère "indésirable" pour l'un ne l'est pas forcément pour tous ...)

  3. #3
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Et bien je peux fixer la règle suivante:
    Si le code ascii du caractère n'est pas dans la fourchette 1 à 126, il est indésirable...

    La méthode "Range.Find" est à mon avis adaptée pour trouver si il existe dans la feuille un caractère qui se trouve hors limite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i=127 to 255
    set cible=MonRange.Find(what:=Asc(i); lookat:=xlPart)
    if not cible is nothing then
    'suppression du caractère
    end if
    Next i
    C'est pas super comme code :/
    Quelqu'un a une idée???

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Mon idée t'a déjà été exposée.
    Et elle n'a rien à voir avec la méthode Find...
    Mais attendons ...
    Attendons également la réponse non faite à une question posée...

  5. #5
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Merci pour la réponse, mais l'idée de parcourir toutes les cellules, caractères par caractères n'est vraiment pas possible compte tenu de l'énormité de mes fichiers.

    A moins que je n'ai pas bien saisi le fond de tes pensées !
    Peux-tu développer?

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    1) mille fois moins lourd pour ton processeur que ton idée de faire un find pour chacun des caractères "indésirables"
    2) il n'y a pas de "fond de ma pensée", mais ce que je crois avoir exprimé clairement et que comprendrait tout développeur
    3) j'attends encore une réponse à une question posée en vain ...


    EDIT :
    4) j'ajoute que si tes caractères indésirables sont uniquement dans une fourchette définie et bornée, l'utilisation de la fonction Like permet de déterminer s'il convient ou non d'analyser caractère par caractère.

    Mais je n'irais pas plus loin tant que tu n'auras pas répondu à une question qui me parait essentielle...

  7. #7
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    Salut, peut-être à insérer dans le traitement de tes fichiers, en la complétant
    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
    Option Explicit
     
    Public Function Nettoyage(sTexte As Variant)
    Dim sTmp As Variant
        If IsMissing(sTexte) Then Exit Function
        '   à voir si utile
        'Application.Volatile True
        '   Suppression Espaces encadrants
        sTmp = Trim(sTexte)
        '   Suppression caractères non imprimables
        sTmp = Application.WorksheetFunction.Clean(sTmp)
        '   Suppresion espace insécable
        sTmp = Application.WorksheetFunction.Substitute(sTmp, Chr(160), "")
        Nettoyage = sTmp
    End Function

  8. #8
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bonjour,

    D'où viennent ces caractères indésirables ? importés de quoi ?

    je crains fort que tu ne puisses dans un tel cas éviter
    - de parcourir en boucle toutes les cellules de la plage concernée pour en extraite le contenu (appelons-le toto)
    - d'analyser toto caractère par caractère pour déterminer si un caractère n'est pas dans la liste de tes "caractères normaux".... (que tu es seul à pouvoir établir en fonction du contexte présent et que tu es seul à connaître !...... un caractère "indésirable" pour l'un ne l'est pas forcément pour tous ...)
    Je n'ai pas de réponse a ces questions...
    Les caractères sont là, dans mon fichier. Je n'ai absolument pas la main sur la provenance des données qui remplissent mon tableau.

    Citation Envoyé par ucfoutu Voir le message
    2) il n'y a pas de "fond de ma pensée", mais ce que je crois avoir exprimé clairement et que comprendrait tout développeur
    Et désolé de ne pas comprendre, si ça t'ennuie de m'aider, y'a plein d'autres personnes à aider. Nul n'a besoin de tes sarcasmes.

    Salut, peut-être à insérer dans le traitement de tes fichiers, en la complétant
    Je vais tester, merci

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Les caractères sont là, dans mon fichier. Je n'ai absolument pas la main sur la provenance des données qui remplissent mon tableau.
    Ne pas y voir un autre sarcasme, mais ... ce sont alors des données spontanées, qui alimentent ton tableau ?
    Ma question était claire et je regrette que tu l'éludes.
    Bonne chance.

  10. #10
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Qu'entends tu par "données spontanées" ???

    On me donne un classeur avec des données dedans, c'est tout.

    Je ne sais pas d'où ces données viennent. Elles correspondent à des noms, des adresses. Parfois, y'a des nom qui comportent des caractères spéciaux. Pas besoin d'en savoir plus pour un développeur.

    Merci encore!

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 127 To 255  'à adapter
        Cells.Replace Chr(i), "", xlPart
    Next i

  12. #12
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Ah ouais pas con !!
    Encore une fois, merci mercatog !!!! C'est au moins la 5ième fois que tu m'aides!!
    Merci aux autres aussi!

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut je trvaille avec ça
    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
    Function Remplacer_les_caracteres_specieux(ByVal ch As String) As String
     
    For i = 1 To 47
    ch = Replace(ch, Chr(i), "_")
    Next i
     
    For i = 58 To 64
    ch = Replace(ch, Chr(i), "_")
    Next i
     
    For i = 91 To 96
    ch = Replace(ch, Chr(i), "_")
    Next i
     
    For i = 123 To 126
    ch = Replace(ch, Chr(i), "_")
    Next i
     
    For i = 166 To 255
    ch = Replace(ch, Chr(i), "_")
    Next i
     
    ch = Replace(ch, "___", "_")
    ch = Replace(ch, "__", "_")
     
     
    Remplacer_les_caracteres_specieux = ch
    End Function

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/08/2010, 13h29
  2. [XSLT] Supprimer les caractères spéciaux HTML d'un noeud texte
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/12/2008, 22h59
  3. Supprimer les caractères spéciaux
    Par sami_c dans le forum Langage
    Réponses: 4
    Dernier message: 09/09/2008, 13h12
  4. Supprimer les caractères spéciaux
    Par snopims dans le forum C#
    Réponses: 8
    Dernier message: 08/08/2008, 15h33
  5. [Jsp] Supprimer les caractère spéciaux d'une chaine
    Par PeteMitchell dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/05/2004, 11h11

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