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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
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 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
30
Affichages
449
Réponses
3
Affichages
338
  • Question Question
Power Query Power Query
Réponses
26
Affichages
573
Réponses
7
Affichages
185
Réponses
1
Affichages
636
Retour