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 :

Découper une chaine de caractères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 343
    Par défaut Découper une chaine de caractères
    Bonjour,

    J'ai un code qui marche bien mais j'aimerai lui apporter une petite modif.
    Je découpe une chaine de caractères sur plusieurs colonne comme ceci
    Quemper-Guézennec(22260) sa donne Quemper-Guézennec sur une colonne et 22260 sur une autre la colonne
    Seul problème et que si une cellule est vide ou si une cellule contient une lettre comme "A, B, C ect.." sa beug?
    Si quelqu'un a une idée.

    je vous remercie d'avance.
    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 Découpe()
          Dim DLig As Long, Lig As Long
          ' Tableau des données séparées
         Dim sTab() As String
          With Sheets("Feuil1")
            ' Trouver la dernière ligne remplie de la colonne B
           DLig = .Range("B" & Rows.Count).End(xlUp).Row
     
            ' Pour chaque ligne en commençant par la 4ème
           For Lig = 4 To DLig
     
              ' Eclater la valeur en 2 à partir de la parenthèse
             sTab = Split(.Range("B" & Lig), "(")
              ' Inscrire les valeurs
             .Range("D" & Lig) = Trim(sTab(0))
              .Range("E" & Lig) = Left(sTab(1), Len(sTab(1)) - 1)
     
           ' Eclater la valeur en 2 à partir de la parenthèse
           sTab = Split(.Range("G" & Lig), "(")
          ' Inscrire les valeurs
           .Range("I" & Lig) = Trim(sTab(0))
             .Range("J" & Lig) = Left(sTab(1), Len(sTab(1)) - 1)
     
        Next Lig
          End With
     
     
        End Sub
    Cordialement

    Max

  2. #2
    Expert éminent 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
    Par défaut
    Une autre approche, utiliser l'outil convertir d'excel avec "(" comme séparateur.

    Dans l'exemple ici, les données de la colonne D sont converties en colonnes D et E
    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
    Dim Rng As Range
     
    Application.ScreenUpdating = False
    'on définit notre plage de données
    With Worksheets("Feuil1")
        Set Rng = .Range("B4:B" & .Cells(.Rows.Count, "B").End(xlUp).Row)
    End With
    'on désactive les alertes excel
    Application.DisplayAlerts = False
    'On convertit les données de la colonne B avec "(" comme séparateur, le résultat s'inscrira à partir de la colonne D
    Rng.TextToColumns Destination:=Rng.Offset(0, 2)(1, 1), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Other:=True, OtherChar:="(", FieldInfo:=Array(Array(1, 1), Array(2, 1))
    'on réactive les alertes excel
    Application.DisplayAlerts = True
    'on supprime la parenthèse fermante
    Rng.Offset(0, 3).Replace ")", "", xlPart
    Set Rng = Nothing

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 343
    Par défaut
    Bonjour Mercatog

    je te remercie super

    Comment je fait pour les données de la colonne G qui sont a converties en colonnes I et J

    Un grand merci d'avance

    Max

  4. #4
    Expert éminent 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
    Par défaut
    Pour ce cas on fait une procédure qui prend en paramètre la plage de données source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Convertir(ByVal Rng As Range)
     
    Application.DisplayAlerts = False
    Rng.TextToColumns Destination:=Rng.Offset(0, 2)(1, 1), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Other:=True, OtherChar:="(", FieldInfo:=Array(Array(1, 1), Array(2, 1))
    Application.DisplayAlerts = True
    Rng.Offset(0, 3).Replace ")", "", xlPart
    End Sub
    Et pour son application aux colonnes B et G
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        Convertir .Range("B4:B" & .Cells(.Rows.Count, "B").End(xlUp).Row)
        Convertir .Range("G4:G" & .Cells(.Rows.Count, "G").End(xlUp).Row)
    End With
    End Sub
    Attention quand même, si une colonne B et G sont vides, il y aura une erreur (Qu'on peut gérer facilement avec une ligne de code supplémentaire)

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 343
    Par défaut
    Re,

    Sa marche super bien

    mais tu me dit:
    Attention quand même, si une colonne B et G sont vides, il y aura une erreur (Qu'on peut gérer facilement avec une ligne de code supplémentaire)
    Comment?

    Merci pour tous et bonne journée

    Max

  6. #6
    Expert éminent 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
    Par défaut
    Il suffit de tester sir la dernière ligne remplie est supérieur ou égale à 4 (puisque tu commence à la ligne 4)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Convertir(ByVal Rng As Range)
     
    Application.DisplayAlerts = False
    If Rng.Row >= 4 Then
        Rng.TextToColumns Destination:=Rng.Offset(0, 2)(1, 1), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Other:=True, OtherChar:="(", FieldInfo:=Array(Array(1, 1), Array(2, 1))
        Application.DisplayAlerts = True
        Rng.Offset(0, 3).Replace ")", "", xlPart
    End If
    End Sub

Discussions similaires

  1. Bash - Découper une chaine de caractères
    Par nicolas.pissard dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/12/2014, 14h18
  2. Découper une chaine de caractères
    Par momomafioso dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/06/2007, 12h11
  3. [SQ2K] Découper une chaine de caractères
    Par maitrebn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2007, 20h22
  4. Réponses: 6
    Dernier message: 15/04/2007, 14h06
  5. [VBA] Découper une chaine de caractères
    Par rantanplan81 dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/04/2007, 16h26

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