[Excel]Séparer des données

Résolu
Bonjour,

je souhaite faire une petite macro, je pense avoir besoin d'utiliser les expressions régulières mais je ne sais pas comment ça marche avec Excel. Voici mon problème :

Soit wi un mot d'au moins 3 lettres. En A1, j'ai une suite comme celle-ci :
w1(1|2|3)(1|2|3)(0|1)w2(1|2|3)(1|2|3)(0|1) etc. jusqu'à w10.

Je souhaiterai obtenir le résultat suivant
Colonne A           Colonne B          Colonne C              Colonne D
   w1                  (1|2|3)          (1|2|3)                (0|1)
   w2                  (1|2|3)          (1|2|3)                (0|1)

pour tous mes w.

Dans un 1er temps, mon idée serait de parcourir le texte de la cellule A1, et dès que l'on trouve un chiffre (1|2|3), on avance de 2 caractères, on copie le texte depuis ce caractère jusqu'à la fin du texte que l'on coupe/colle en A2 et ainsi de suite.

2 détails :
-je ne connais pas bien le code VBA
-je ne sais pas utiliser les Regex dans Excel

Toute autre idée sera bien entendu la bienvenue.
Merci d'avance !

4 réponses

  1. Contributeur
    Bonjour,
    J'ai une solution qui peut paraître un peu tordue :
    Dans rechercher et remplacer tu remplace tout les ( par ,( ensuite tu sélectionnes toutes tes données, tu vas dans données > convertir , délimité et tu selectionne virgule et tu fais terminer.
    ça devrai fonctionner si j'ai pas fait d'erreur.
    Wake me, when you need me ...
    0
    1. Je vois ce que tu veux dire mais mes parenthèses sont fictives, c'est une écriture Regex, elles n'existent pas vraiment, elles sont là pour illustrer un "groupe".

      Dans A1, je peux avoir une chaîne du style toto111titi210tutu330 et le but est donc d'obtenir, dans un premier temps

      toto111
      titi210
      tutu330

      puis dans un second temps

      toto 1 1 1
      titi 2 1 0
      tutu 3 3 0
      ce qui devrait poser moins de problèmes.

      Merci de ta réponse, dans l'idée, je suis d'accord avec toi. Eventuellement, je pourrai appliquer cela, remplacer 0 par 0; 1 par 1; etc. mais ça fait faire pas mal de remplacements sans compter qu'il est possible d'avoir quelques cas particuliers dans lesquels ça ne marchera pas.

      Je garde cette solution sous le coude, mais si d'autres ont des idées, n'hésitez pas.
      0
      1. Contributeur
        Bonjour

        avec un chouia de VBA

        restitution à partir de A10 à adapter éventuellement

        Sub separer_par_wx()
        Dim lig As Byte, cptr As Byte
        Dim tampon() As String
        tampon = Split(Range("A1"), "w")
        lig = 10
        For cptr = 1 To UBound(tampon)
            texto = "w" & tampon(cptr)
            Cells(lig, 1) = texto
            Cells(lig, 1).Parse "[**][**************][*****]", Cells(lig, 1)
            lig = lig + 1
        Next
        
        End Sub

        0
        1. Merci à vous pour vos réponses
          0