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 espaces simples avec une règle [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut Supprimer les espaces simples avec une règle
    Bonsoir le forum,

    J'ai un grand nombre de lignes où des noms de société sont écrits sur le modèle suivant: "S A R L DUPONT", et je cherche un moyen de supprimer les espaces entre les lettres uniques pour obtenir "SARL DUPONT", et j'avoue que je ne sais pas quelle fonction utiliser...

  2. #2
    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
    Sheets("Feuil3").UsedRange.Replace "S A R L", "SARL"

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut
    Argh, j'aurais dû mieux m'expliquer et ne pas dire modèle, pardon. Malheureusement, il n'y a pas que le cas SARL. J'ai beaucoup de noms de société où les personnes qui ont saisi les noms au départ ont glissé des espaces (par exemple "A F P" ou "A B C D").

    En fait, je cherche à supprimer les espaces simples entre les caractères uniques de ma chaîne. Je ne peux pas simplement supprimer tous les espaces car dans le cas de ma "S A R L DUPONT", si je supprime tous les espaces, je me retrouve avec "SARLDUPONT"...

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Tu peux essayer cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function fPurge(ByVal sBrut As String) As String
    Dim i As Integer, b As Boolean
     
    fPurge = Trim$(sBrut)
     
    For i = Len(fPurge) To 2 Step -1
        If b Then
            If (Mid$(fPurge, i, 1) <> " ") And (Mid$(fPurge, i - 1, 1) = " ") Then fPurge = Mid$(fPurge, 1, i - 2) & Mid$(fPurge, i)
        Else
            b = (Mid$(fPurge, i, 1) = " ")
        End If
    Next i
     
    End Function
    Testé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    MsgBox fPurge("S A R L DUPONT")
    End Sub
    Et cela renvoie "SARL DUPONT".

    Cordialement,

    PGZ

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut
    Merci. Je tâche de comprendre la fonction, mais malheureusement, elle ne fonctionne pas avec des chaînes comme "A B C D". Le résultat donne "ABC D"...

    Et je suis peut-être pas doué, mais quand je cherche "Trim$" dans l'aide, je ne trouve de résultat que pour Trim. Tu pourrais m'expliquer la différence?

  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    De nombreuses fonctions de chaînes ont deux variantes, par exemple Left et Left$. La version sans "$" renvoie un variant, la versions avec "$" renvoie une chaîne de caratères et s'exécute plus rapidement.

    Pour le code, tu soulèves le pb génériques de la difficulté de spécifier et d'établir un jeu de test.

    Cette version corrige le point que tu précises, mais tu vas peut-être exprimer de nouveaux besoins...

    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
    Function fPurge(ByVal sBrut As String) As String
    Dim i As Integer, b As Boolean
     
    fPurge = " " & Trim$(sBrut) & " "
     
    For i = Len(fPurge) To 2 Step -1
        If b Then
            If (Mid$(fPurge, i, 1) <> " ") And (Mid$(fPurge, i - 1, 1) = " ") Then
                fPurge = Mid$(fPurge, 1, i - 2) & Mid$(fPurge, i)
                i = i - 1
                b = True
            Else
                b = (Mid$(fPurge, i, 1) = " ")
            End If
        Else
            b = (Mid$(fPurge, i, 1) = " ")
        End If
    Next i
     
    fPurge = Trim$(fPurge)
     
    End Function
    Cordialement,

    PGZ

  7. #7
    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
    [EDIT 3]

    Une autre proposition même s'il y a possibilité de plusieurs espaces successifs à l’intérieur (Code encore simplifié)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function Purge(ByVal Mot As String) As String
    Dim NewMot As String
    Dim i As Integer
    Dim Tb
     
    Tb = Split(Mot & " X")
    For i = LBound(Tb) To UBound(Tb) - 1
        NewMot = NewMot & Tb(i) & IIf(Len(Tb(i)) <= 1 And Len(Tb(i + 1)) <= 1, "", " ")
    Next i
    Purge = Trim(Replace(NewMot, "  ", " "))
    End Function
    Purge(" A B CDE FG H I JKL M N O P ") donne AB CDE FG HI JKL MNOP

  8. #8
    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
    Une autre proposition en utilisant les RegExp. (Nécessite l'activation de la référence VBScript Regular Expressions X.Y)
    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
    'Nécessite l'activation de la référence VBScript Regular Expressions X.Y
    Function Reform(ByVal Mot As String) As String
    Dim Reg As New VBScript_RegExp_55.RegExp
     
    With Reg
        .Pattern = "(\s{1,})(\w{2,})"
        .Global = True
        Mot = .Replace(Mot, " |$2| ")
    End With
    Set Reg = Nothing
    Mot = Replace(Mot, " ", "")
    Mot = Trim(Replace(Mot, "|", " "))
    Mot = Trim(Replace(Mot, "  ", " "))
    Reform = Mot
    End Function
     
    Public Sub Test()
     
    Debug.Print Reform(" M R BEAN 1 9 7 1")
    End Sub
    Point fort: Pas de boucle.

  9. #9
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut
    Bonjour,

    Super, j'ai testé, et c'est exactement ce que je cherchais. Je vais maintenant chercher bien comprendre ces fonctions, parce que je ne suis pas très fort en VBA, mais encore moins en manipulation de chaînes.

    Merci pour l'aide.

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

Discussions similaires

  1. [OL-2007] Copier les pièces jointes avec une règle
    Par Franck.H dans le forum Outlook
    Réponses: 1
    Dernier message: 23/09/2013, 18h31
  2. [Free Pascal] Programme qui supprime les espaces inutiles dans une chaîne
    Par joreveur dans le forum Free Pascal
    Réponses: 18
    Dernier message: 24/08/2012, 16h51
  3. Supprimer les espaces consécutifs dans une chaîne
    Par aymenet1 dans le forum Pascal
    Réponses: 12
    Dernier message: 27/11/2007, 22h21
  4. Supprimer les éléments sélectionnés avec une case à cocher
    Par keishah dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 16/08/2007, 15h38
  5. Réponses: 3
    Dernier message: 26/03/2007, 09h46

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