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 :

Macro - Parcourir une cellule et la séparer en plusieurs cellules [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut Macro - Parcourir une cellule et la séparer en plusieurs cellules
    Bonjour à tous !

    J'ai un petit problème lors de la génération de données via un ERP (WorkPlan).

    J'ai plusieurs cellules dans lesquelles une chaîne de caractère considérable est créée. Dans cette chaîne, des données que je désire récupérer.
    Ces données sont séparées par deux types de séparateurs:
    - <SEP> : Indique que je change de colonne pour insérer la donnée suivante,
    - <CR> : Indique que je change de ligne pour insérer la donnée suivante.

    Plusieurs séparateurs de types différents se succèdent.
    Le nombre de caractères entre deux séparateur est variable.
    Le nombre de séparations par saut de ligne (CR) est variable (dépendant du nombre de données).
    En revanche le nombre de séparations par saut de colonne est fixe (dépendant du nombre de types de données).
    Enfin plusieurs cellules de ce type sont à parcourir.

    Exemple:
    Voici Une partie de texte se trouvant dans une cellule:
    58581<SEP>gravure/ traitement surface<SEP>0<SEP>GRAV<SEP>gravure/ traitement surface<SEP>Achats<SEP>T2CD194<CR>58582<SEP>transport (interservice, ......)<SEP>0<SEP>PORT<SEP>transport (interservice, ......)<SEP>Achats<SEP>T2CD194<CR>58583<SEP>quincaillerie hors standards<SEP>0<SEP>QUIN<SEP>quincaillerie hors standards<SEP>Achats<SEP>T2CD194<CR>58584<SEP>sous traitance devis (gammé)<SEP>0<SEP>REA1.<SEP>sous traitance devis (gammé)<SEP>Achats<SEP>T2CD194<CR>

    Le but serait de transformer cet infâme texte en :
    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
    Cells(1,1).Value = 58581
    Cells(1,2).Value = gravure/ traitement surface
    Cells(1,3).Value = 0
    Cells(1,4).Value = GRAV
    CElls(1,5).Value = gravure/ traitement surface
    Cells(1,6).Value = Achats
    Cells(1,7).Value = T2CD194
     
    Cells(2,1).Value = 58582
    Cells(2,2).Value = transport (interservice, ......)
    Cells(2,3).Value = 0
    Cells(2,4).Value = PORT
    Cells(2,5).Value = transport (interservice, ......)
    Cells(2,6).Value = Achats
    Cells(2,7).Value = T2CD194
     
    Cells(3,1).Value = 58583
    ...
    Je vous met en pièce joint un fichier type.
    Pièce jointe 151437

    Merci d'avance pour votre aide.
    Snatch-snatch
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Déjà, regarde du côté de la fonction split, qui te permet de spliter dans une variable tableau par un délimiteur défini
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    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
    Ajoute une feuille nommée Destination

    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
    Option Explicit
     
    Sub Test()
    Dim LastLig As Long, i As Long
     
    Application.ScreenUpdating = False
    With Worksheets("data")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 1 To LastLig
            Separ .Range("A" & i)
        Next i
    End With
    End Sub
     
    Private Sub Separ(ByVal Tmp As String)
    Dim NewLig As Long
    Dim Tb
     
    Tmp = Replace(Tmp, "<SEP>", "|")
    Tb = Split(Tmp, "<CR>")
     
    With Worksheets("Destination")
        NewLig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        With .Cells(NewLig, 1).Resize(UBound(Tb) + 1)
            .Value = Application.Transpose(Tb)
            .TextToColumns OtherChar:="|"
        End With
    End With
    End Sub

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut
    Salut illight et merci pour ta réactivité.

    J'ai fait un test avec le split:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test_Split()
    Dim a As Variant
    Dim b As String
    b = Cells(1, 1).Value
    a = Split(b, "<CR>")
     
    Cells(2, 2).Value = a(0)
    Cells(3, 2).Value = a(1)
    Cells(4, 2).Value = a(2)
    Cells(5, 2).Value = a(3)
    Cells(6, 2).Value = a(4)
    Cells(7, 2).Value = a(5)
     
    End Sub
    J'obtiens un message d'erreur :
    "Erreur de compilation (ça commence mal):
    Nombre d'arguments incorrect ou affectation de propriété incorrecte."

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut
    Merci beaucoup Mercatog, ça marche nickel.

    Je n'ai plus qu'à faire un split sur le caractère "|" !
    Sujet résolu

  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
    Pour le split sur | j'ai utilisé l'outil d'excel Convertir
    qui fait le travail en une seul action

    en vba (TextToColumns) voir l'aide

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

Discussions similaires

  1. [XL-2010] PB remplir une ComboBox avec les valeurs de plusieurs cellules sur la même lignes
    Par eviuss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2014, 07h01
  2. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54
  3. [VBA Excel] Parcourir une zone de cellules
    Par Jipété dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/11/2006, 09h38
  4. appliquer une macro a une plage de cellule variable
    Par johndeuf dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2006, 16h18
  5. [VBA] Parcourir une plage de cellule
    Par Dinytro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/09/2005, 08h18

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