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 :

Excel VBA TextToColumns


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Par défaut Excel VBA TextToColumns
    Bonsoir à tous

    Je cherche à transformer une chaîne de caractères en 5 colonnes avec TextToColumns.
    Les espaces avant ou après chaque découpe sont tronqués. Or je voudrai les conserver.
    Y-a-t-il moyen ?

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, FieldInfo:= _
                    Array(Array(0, 1), Array(158, 4), Array(168, 1), Array(1215, 1), Array(1225, 1)), _
                    TrailingMinusNumbers:=True
    D'avance merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Proposition à adapter, en supposant que les textes à isoler sont en colonne A à partir de la ligne 2

    le fichier en exemple
    Pièce jointe 555372

    le code
    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
    Sub Isoler_Les_Elements()
        Dim L As Long, a As Long, c As Long, DerLig As Long
        Dim e As Object
        Application.ScreenUpdating = False
        DerLig = Range("A" & Rows.Count).End(xlUp).Row
        For L = 2 To DerLig
            a = 1
            c = 2
            NbCarTexte = Len(Cells(L, a))
            ReDim Nb(NbCarTexte) As Long
            For i = 1 To 4
                Set e = Cells(L, a).Find(" ")
                If Not e Is Nothing Then
                     NbCar = InStr(1, Cells(L, a), " ", 1)
                    Do
                       NbCar = NbCar + 1
                    Loop While Mid(Cells(L, a), NbCar, 1) = " "
                End If
                Cells(L, c) = Right(Cells(L, a), Len(Cells(L, a)) - NbCar + 1)
                Nb(i) = NbCar
                c = c + 1
                a = a + 1
            Next i
            For i = 1 To 4
                Cells(L, i) = Application.WorksheetFunction.Replace(Cells(L, i), Nb(i), Len(Cells(L, i + 1)), "")
            Next i
        Next L
    End Sub
    Cdlt

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Petite variante à la proposition précédente, comme ça vous aurez le choix

    Dans la proposition précédente, les espaces sont conservés après chaque éléments isolés, ici les espaces sont conservés devant les éléments isolés.

    le fichier
    Pièce jointe 555402

    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
    Sub Isoler_Les_Elements()
        Dim L As Long, a As Long, c As Long, DerLig As Long
        Dim e As Object
        Application.ScreenUpdating = False
        DerLig = Range("A" & Rows.Count).End(xlUp).Row
        For L = 2 To DerLig
            a = 1
            c = 2
            NbCarTexte = Len(Cells(L, a))
            ReDim Nb(NbCarTexte) As Long
            For i = 1 To 4
                Set e = Cells(L, a).Find(" ")
                If Not e Is Nothing Then
                     NbCar = InStr(1, Cells(L, a), " ", 1)
                    Do
                       NbCar = NbCar + 1
                    Loop While Mid(Cells(L, a), NbCar, 1) = " "
                End If
                Cells(L, c) = Right(Cells(L, a), Len(Cells(L, a)) - NbCar + 1)
                Nb(i) = NbCar
                c = c + 1
                a = a + 1
            Next i
     
            'les espaces sont ajoutés à la suite de chaque élément
            For i = 1 To 4
                Cells(L, i) = Application.WorksheetFunction.Replace(Cells(L, i), Nb(i), Len(Cells(L, i + 1)), "")
            Next i
     
            'les espaces sont ajoutés avant chaque élément, ceux derrière les éléments sont supprimés
            For i = 4 To 1 Step -1
                Esp = Split(Cells(L, i), " ", , 1)
                Cells(L, i).Replace What:=" ", Replacement:="", LookAt:=xlPart
                Cells(L, i + 1) = Application.Rept(" ", UBound(Esp)) & Cells(L, i + 1)
            Next i
        Next L
    End Sub
    Cdlt

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Citation Envoyé par AgentF13 Voir le message
    Les espaces avant ou après chaque découpe sont tronqués. Or je voudrai les conserver.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, FieldInfo:= _
                    Array(Array(0, 1), Array(158, 4), Array(168, 1), Array(1215, 1), Array(1225, 1)), _
                    TrailingMinusNumbers:=True
    Il y a une incohérence entre ta demande et la définition de FieldInfo : tu demande à Excel d'interpréter toutes les colonnes sauf la seconde au format Standard (1) et la seconde au Format Date JMA (4).
    Dans ce cas il va traduire les champs. Si tu veux conserver le texte, il faut mettre tous les champs au format texte (2).

    Ceci ne résoudra pas le problème de la suppression des espaces, pour ça il suffit de les remplacer un autre caractère non utilisé (ex : ¶) puis de faire l'inverse après :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim r As Range
      Set r = ActiveSheet.Range("a1").CurrentRegion
      r.Replace " ", Chr(182)
      r.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, FieldInfo:= _
                    Array(Array(0, 2), Array(158, 2), Array(168, 2), Array(1215, 2), Array(1225, 2))
      Set r = ActiveSheet.Range("a1").CurrentRegion
      r.Replace Chr(182), " "
    End Sub

Discussions similaires

  1. [Excel VBA] Boucler sur un userform
    Par tpv72 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/09/2005, 01h57
  2. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  3. [excel vba]case à cocher dans excel pour plusieurs lignes
    Par fcoisb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2005, 11h23
  4. EXcel VBA analyse de sharpe
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/02/2005, 13h07
  5. [Excel - VBA] Problème de suppression de lignes...
    Par beholder2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2005, 17h27

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