Microsoft 365 Récupérer tout le texte après le dernier délimiteur

Tidjyphenom

XLDnaute Nouveau
Bonjour communauté Excel, j'appelle une nouvelle fois votre aide pour un "problème" que je n'arrive pas à résoudre. Disons que je dispose d'une colonne ayant les données suivantes délimitées par des virgules :

---------------------------------------------------------
texte 1, texte 2, texte 3, texte 4, texte 5, texte 6, "texte 7, un peu plus long", texte 8
texte 1, texte 2, texte 3, texte 4, texte 5, texte 6, texte 7, "texte 8, avec beaucoup, de virgules"
texte 1, texte 2, texte 3, texte 4
---------------------------------------------------------

Je souhaite déplacer dans une nouvelle colonne :

---------------------------------------------------------
texte 8
texte 8, avec beaucoup, de virgules
texte 4
---------------------------------------------------------

La colonne initiale deviendrait :

---------------------------------------------------------
texte 1, texte 2, texte 3, texte 4, texte 5, texte 6, "texte 7, un peu plus long"
texte 1, texte 2, texte 3, texte 4, texte 5, texte 6, texte 7
texte 1, texte 2, texte 3
---------------------------------------------------------

Fractionné les celulles à l'aide du délimiteur ne m'aidera pas car les cellules contiennent du texte entre guillemets possèdant lui même des virgules que je ne souhaite pas couper puisque dans ce cas les virgules dans le texte ne sont pas des délimiteurs. D'autant plus que j'ai 3000 lignes à traiter et chaque ligne ne possèdant pas le même nombre de délimiteurs dans cette colonne, ça serait fastidieux dans tous les cas.

Quelle serait la solution la plus simple pour parvenir à la solution voulue ?

Merci.
 
Solution
Une solution plus élaborée dans ce fichier (2) :
VB:
Sub Fractionner()
Dim col%, c As Range, p%, pp%
col = ActiveSheet.UsedRange.Columns.Count + 1
For Each c In [A1].CurrentRegion.Columns(1).Cells
    If Right(c, 1) = """" Then
        p = InStrRev(Left(c, Len(c) - 1), """")
        pp = InStrRev(Left(c, p - 1), ",")
        If pp Then
            c(1, col) = Mid(c, p + 1, Len(c) - p - 1)
            c = Left(c, pp - 1)
        End If
    Else
        p = InStrRev(c, ",")
        If p Then
            c(1, col) = Trim(Mid(c, p + 1))
            c = Left(c, p - 1)
        End If
    End If
Next
End Sub
Re bonne nuit.

Tidjyphenom

XLDnaute Nouveau
Au post #1 vous ne les avez pas mis...

Mais il est facile de les y laisser :
Code:
=REPT(STXT(A1;MAX(_pos1;_pos2)+2;999);OU(_pos1;_pos2))
Je vous laisse voir pour la macro.
Oui au temps pour moi, je viens de voir que j'ai oublié de les mettre dans mon premier post. Du coup j'ai plutôt remplacé
VB:
c(1, col) = Mid(c, p + 1, Len(c) - p - 1)
par
Code:
c(1, col) = """" & Mid(c, p + 1, Len(c) - p - 1) & """"
Et ça a plutôt l'air de fonctionner pour rajouter les guillemets disparus

Pour ajouter le résultat de la macro juste après la colonne sélectionné plutôt qu'après la dernière colonne du tableau, il me suffira de créer une nouvelle colonne après la sélection courante :
Code:
Set c = Selection
col = c.Column
newcolnbr = col + 1
Columns(newcolnbr).Insert
et de remplacer
Code:
c(1, col) = """" & Mid(c, p + 1, Len(c) - p - 1) & """"
par
Code:
c(1, 2) = """" & Mid(c, p + 1, Len(c) - p - 1) & """"

Je ne sais pas si c'est la méthode la plus optimale mais en tout cas ça donne le résultat que j'attends.

Merci en tout cas pour l'aiguillage et la macro ;)
 

Discussions similaires

Réponses
0
Affichages
147

Statistiques des forums

Discussions
312 165
Messages
2 085 882
Membres
103 011
dernier inscrit
rine