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 :

TextToColumns() avec séparateur de plusieurs caractères [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Points : 11
    Points
    11
    Par défaut TextToColumns() avec séparateur de plusieurs caractères
    Bonjour,

    Dans une table j'ai de nombreuses lignes du style : "Regenerationrequired\r\nVehicleparked\r\nForyoursafety,readthemanual"

    J'aimerais réaliser une macro qui sépare ce genre de ligne en autant de colonne que le sepérateur "\n\r" est trouvé (si possible j'aimerais aussi qu'il n'y ai pas de colonne vide entre les termes, mais ça c'est du bonus).

    J'ai cherché pas mal de temps..mais je ne trouve pas de solution!

    Une des seules pistes que j'ai est la suivante, mais malheureusement elle ne prend en compte qu'un séparateur (\) de un caractère et non 4.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub format()
     
        ActiveWorkbook.Worksheets("lexEN").Activate
     
        Columns("B:B").Select
     
        Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="\n\r", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
     
    End Sub

  2. #2
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,

    Pour contourner le problème, une solution consisterait à d'abord remplacer les \r\n par un simple \, avant de faire le split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
        Selection.Replace "\r\n", "\"        
        Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="\", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
    ...
    Une façon plus propre de faire : ne pas sélectionner un emplacement puis travailler sur l'objet Selection, mais travailler directement avec les Ranges cibles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub format()
    Dim objRange As Range
     
        Set objRange = ActiveWorkbook.Worksheets("lexEN").Columns("B:B")
     
        objRange.Replace "\r\n", "\"
     
        objRange.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="\n\r", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
     
    End Sub

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    pas besoin de remplacer car le séparateur de la fonction Split peut contenir plusieurs caractères …

    Sinon avec un fichier joint et un complément d'informations …

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir le Forum, Marc, tedo01, flouo,
    eh oui Marc, d'accord avec toi, un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub exemple_split()
    Dim nom, x As Integer
    nom = Split("Regenerationrequired\r\nVehicleparked\r\nForyoursafety,readthemanual", "\r\n")
    For x = 0 To UBound(nom)
      MsgBox nom(x)
    Next x
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Je vous remercie pour tous vos éléments de réponses, et je vous est trouvé très réactif, ça fait plaisir. Et vos solutions fonctionnent bien!

    Au final j'ai trouvé une piste avant de voir vos réponses, je l'ai suivie. Même si ça peut paraître un peu tiré par les cheveux, ça répond à mon problème

    Pour ceux que ça intéresserait :

    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
     
            Sheets("lexEN").Select
     
            Set rPlage = Worksheets("lexEN").UsedRange
     
            strChaine = "\r\n"
     
            For l = 1 To rPlage.Rows.Count
     
            Set rngTrouve = Worksheets("lexEN").Cells.Find(what:=strChaine)
     
                If rngTrouve Is Nothing Then
                    Sheets("INTERFACE").Select
                    Exit Sub
                Else
                    Worksheets("lexEN").Cells.Find(what:=strChaine).Select
                    lc = ActiveCell.Column
                    lr = ActiveCell.Row
     
                    Chaine = Cells(lr, lc).Value
     
                    res_l = Left(Chaine, InStr(Chaine, strChaine) - 1)
                    res_r = Right(Chaine, Len(Chaine) - InStr(Chaine, strChaine) - 3)
     
                    Cells(lr, lc).Value = res_l
                    Cells(lr, lc + 1).Value = res_r
     
                End If
                Set rngTrouve = Nothing
     
            Next l
    Merci encore

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 07/10/2011, 09h19
  2. Réponses: 3
    Dernier message: 22/03/2010, 09h08
  3. Réponses: 1
    Dernier message: 02/08/2008, 16h26
  4. Chaine avec plusieurs caractères null
    Par Runik dans le forum SL & STL
    Réponses: 7
    Dernier message: 06/10/2007, 12h09
  5. [C#2.0] méthode split avec séparateur de plusieurs caratères
    Par CUCARACHA dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/02/2007, 18h11

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