[Excel]Séparer des données

Résolu/Fermé
Signaler
Messages postés
231
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2014
-
Messages postés
231
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2014
-
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

Messages postés
1706
Date d'inscription
lundi 19 février 2007
Statut
Contributeur
Dernière intervention
12 février 2016
147
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
Messages postés
231
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2014
26
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
Messages postés
16546
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
12 janvier 2022
3 259
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
Messages postés
231
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2014
26
Merci à vous pour vos réponses
0