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 :

Pour simplifier le code [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 545
    Par défaut Pour simplifier le code
    Bonjour,
    Je suis toujours sur mes statistiques lexicologiques et je veux débarrasser mes textes de tous les signes de ponctuation. Je peux évidemment les éliminer un par un (galère) mais je me rappelle avoir vu sur la toile une formule abrégée qui permet d'éliminer tous les signes d'un coup; mais pas possible de la retrouver. Est-ce que quelqu'un voit à quoi je fais allusion ? Il me semble avoir en mémoire une énumération du genre . , : ; - ( ) ! etc. etc. mais pas le code qui l'accompagne.
    Merci d'avance pour toute piste.
    Cordialement
    touche_a_tout

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    via une fonction personnalisée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function RemovePunctuation(Txt As String) As String
        With CreateObject("VBScript.RegExp")
            .Pattern = "[^A-Z0-9 ]"
            .IgnoreCase = True
            .Global = True
            RemovePunctuation = .Replace(Txt, "")
        End With
    End Function

  3. #3
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 261
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    une autre possibilité

    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
    Function sansAccent(Texte As String)
     
        Dim listeAccents  As String, listeLettres As String, mot as String
        Dim i As Long
        listeAccents = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ"
        listeLettres = "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy"
        mot = Texte
     
        For i = 1 To Len(listeAccents)
            mot = Replace(mot, Mid(listeAccents, i, 1), Mid(listeLettres, i, 1))
        Next
     
        sansAccent = mot
     
    End Function

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    c'est la ponctuation, et non les accents, qu'il souhaite supprimer

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 261
    Billets dans le blog
    2
    Par défaut
    Ok, je retourne me coucher

  6. #6
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 545
    Par défaut [XL-2016] Pour simplifier le code
    Bonjour et merci Joe Levrai,
    Question HS: Sur ce forum il m'arrive de faire Ctrl/a au lieu de Maj/a, ce qui efface tout ce qui précède; y a-t-il un moyen de récupérer le texte perdu comme on peut le faire dans un traitement de texte ?.
    Je viens au fait: je patauge pas mal dans les fonctions personnalisées. Déjà la tienne contient des termes inconnus de moi: RegExp, la valeur donnée à Pattern, ce qui fait que je ne comprends pas ce qu'elle fait. Et je ne vois pas où placer l'appel de la fonction.
    Pour clarifier, voici le contexte: le texte dont je veux faire disparaître les signes de ponctuation occupe la colonne A d'une feuille Excel, à raison d'un mot (ou signe) par cellule. Mon intention est de remplacer les ponctuations par "" puis de supprimer chaque ligne entière dont la première cellule est égale à "".
    Parcourir la colonne A en testant chaque cellule, y compris celles contenant un mot, prend un temps fou, d'où le recours à une procédure abrégée.
    Il me semble avoir vu une procédure intriquant en série le mot SUBSTITUTE, genre SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE... mais je ne me rappelle pas le contexte. Une idée à ce sujet ?
    D'autre part: mon texte-source provient de Word; serait-il préférable d'éliminer la ponctuation dans Word avant de copier le texte-source dans Excel (j'ai besoin qu'il soit dans Excel pour les opérations de statistique proprement dites) ?
    Ma question est assez confuse, j'en suis conscient et désolé; merci d'avance de ne pas m'en tenir rigueur.
    Cordialement
    touche_a_tout

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, en reprenant la fonction de joe.levrai, voici une macro qui automatise le processus d'effacement pour la colonne A:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function RemovePunctuation(Txt As String) As String
        ' Supprime tous les caractères non alphanumériques et non espaces
        With CreateObject("VBScript.RegExp")
            .Pattern = "[^A-Za-z0-9 ]" ' Garder seulement les lettres, chiffres et espaces
            .IgnoreCase = True
            .Global = True
            RemovePunctuation = .Replace(Txt, "")
        End With
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub NettoyerColonneA()
        Dim DerniereLigne As Long
        Dim i As Long
     
        DerniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
     
        For i = 1 To DerniereLigne
            If Not IsEmpty(Cells(i, 1).Value) Then
                Cells(i, 1).Value = RemovePunctuation(Cells(i, 1).Value)
            End If
        Next i
    End Sub

  8. #8
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    Hello,
    attention le motif choisi enlève aussi les accents héhé ! devient hh
    A essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Pattern = "[^\w\dÀ-ú ]"  '^ pas les  \w les lettres et le _  \d les chiffres À-ú toutes les lettres accentuées
    Ami calmant, J.P

  9. #9
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 545
    Par défaut [XL-2016] Pour simplifier le code
    Bonsoir,
    La fonction de Franc, merci à lui, à laquelle je ne comprends pas grand-chose, moyennant la retouche de J.P. , merci à lui aussi, fonctionne au poil et économise des douzaines de lignes de code, c'est top. Vous êtes excellents.
    Voilà une discussion rondement menée à son heureux terme. Bravo.
    Cordialement
    touche_a_tout
    P.S. Super, Franc, le bout de code pour l'incorporation de la fonction au corps de la bidouille. Merci

  10. #10
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 261
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Vraiment, des API pour enlever des ponctuations ?
    Déjà regExp, mouais mais bon, 70% des programmeurs de métier (pas mon cas) ont tendance à dire que si on peut se passer de regExp, c'est mieux
    On va pas un peu loin ?

    Function sansPonct(Texte As String)

    Dim listePonct As String, mot As String
    Dim i As Long
    listePonct = "();,.:!?"
    mot = Texte

    For i = 1 To Len(listePonct)
    mot = Replace(mot, Mid(listePonct, i, 1), "")
    Next

    sansPonct = mot

    End Function

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

Discussions similaires

  1. [Débutant] Quelle commande pour simplifier le code
    Par NeoRonin dans le forum VB.NET
    Réponses: 3
    Dernier message: 29/03/2016, 02h35
  2. Aide pour simplifier un code et comprendre le mécanisme
    Par nicdodo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/04/2015, 15h50
  3. [E-07] Boucle pour simplifier le code
    Par dahuhunter dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/03/2009, 14h21
  4. [E-00] Utilisation d'un auxilliaire pour simplifier le code
    Par anyah dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 21/11/2008, 17h31
  5. Aide pour simplifier un code VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/01/2008, 16h15

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