Séparer le contenu d'une cellule en plusieurs lignes
Erakmur
-
Erakmur -
Erakmur -
Bonjour,
Voici une gamme de maintenance:
[...] Analyse des informations au fil de l'eau et déclenchement des interventions
[...] Vérification des points de consignes
[...] Edition des journaux d'alarmes, des analyses et des relevés sous tendance
[...] Optimisation du fonctionnement des installations par téléréglage
[...] Modification des programmes horaires
[...] Création de points ponctuels, de synthèses ou de groupes de commande
Pour info, c'est la liste des tâches que doit effectuer un technicien sur un équipement technique.
L'ensemble de ces tâches est régroupé dans une seule cellule et ce que je voudrait c'est la décomposé afin d'obtenir une tâche par cellule.
Vu comment je vois les choses, il me faudrait une maccro exel qui dit en gros, entre le premier ] et le premier [ excel extrait le texte et le met dans cellule A1. Entre le 2éme ] et le 2eme [, exel m'extrait le texte et me le met dans cellule A2 ect...
Codialement
Voici une gamme de maintenance:
[...] Analyse des informations au fil de l'eau et déclenchement des interventions
[...] Vérification des points de consignes
[...] Edition des journaux d'alarmes, des analyses et des relevés sous tendance
[...] Optimisation du fonctionnement des installations par téléréglage
[...] Modification des programmes horaires
[...] Création de points ponctuels, de synthèses ou de groupes de commande
Pour info, c'est la liste des tâches que doit effectuer un technicien sur un équipement technique.
L'ensemble de ces tâches est régroupé dans une seule cellule et ce que je voudrait c'est la décomposé afin d'obtenir une tâche par cellule.
Vu comment je vois les choses, il me faudrait une maccro exel qui dit en gros, entre le premier ] et le premier [ excel extrait le texte et le met dans cellule A1. Entre le 2éme ] et le 2eme [, exel m'extrait le texte et me le met dans cellule A2 ect...
Codialement
A voir également:
- Comment séparer des données dans une cellule excel
- Séparer le contenu d'une cellule excel - Meilleures réponses
- Fractionner du texte en plusieurs lignes excel - Meilleures réponses
- Trier des données excel - Guide
- Liste déroulante excel - Guide
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Proteger cellule excel - Guide
14 réponses
Bonjour,
Il est évident que ce travail ne concerne pas qu'une seule cellule. J'ai plus de 500 gammes et donc plusieurs milliers de tâches à décomposer... Je ne me serais pas permis de vous déranger pour si peu.
Cordialement
Il est évident que ce travail ne concerne pas qu'une seule cellule. J'ai plus de 500 gammes et donc plusieurs milliers de tâches à décomposer... Je ne me serais pas permis de vous déranger pour si peu.
Cordialement
Bonjour,
Pas besoin de macro. Tu fais un copier/coller sur excel de ce que tu viens de mettre dans ta question, tu rectifies la police et la taille, et voilà.
Cordialement
Pas besoin de macro. Tu fais un copier/coller sur excel de ce que tu viens de mettre dans ta question, tu rectifies la police et la taille, et voilà.
Cordialement
Bonjour
Mais si tu tiens absolument à une macro , un exemple à adapter à tes besoins :
Sub decompose()
Dim a(10) ' nombre maxi de tâches à décomposer - peut être augmenté si nécessaire
texte = Sheets(1).Range("B1").Value ' Le texte à décomposer se trouve en B1 de la 1ere feuille (à adapter à ton fichier)
'reperage de tous les [
For n = 6 To Len(texte)
If Mid(texte, n, 1) = "[" Then x = x + 1: a(x) = n
Next
' extraction de la 1ere tâche
partie = Mid(texte, 6, a(1) - 6)
Range("A1").Value = partie
'extraction de la 2nde à l'avant dernière tâche
For t = 2 To x - 1
partie = Mid(texte, a(t) + 5, a(t + 1) - a(t) - 5)
Range("A" & t).Value = partie
Next
'extraction de la dernière tâche
partie = Mid(texte, a(x) + 5, Len(texte) - a(x) - 5)
Range("A" & x).Value = partie
End Sub
Cdlmnt
Mais si tu tiens absolument à une macro , un exemple à adapter à tes besoins :
Sub decompose()
Dim a(10) ' nombre maxi de tâches à décomposer - peut être augmenté si nécessaire
texte = Sheets(1).Range("B1").Value ' Le texte à décomposer se trouve en B1 de la 1ere feuille (à adapter à ton fichier)
'reperage de tous les [
For n = 6 To Len(texte)
If Mid(texte, n, 1) = "[" Then x = x + 1: a(x) = n
Next
' extraction de la 1ere tâche
partie = Mid(texte, 6, a(1) - 6)
Range("A1").Value = partie
'extraction de la 2nde à l'avant dernière tâche
For t = 2 To x - 1
partie = Mid(texte, a(t) + 5, a(t + 1) - a(t) - 5)
Range("A" & t).Value = partie
Next
'extraction de la dernière tâche
partie = Mid(texte, a(x) + 5, Len(texte) - a(x) - 5)
Range("A" & x).Value = partie
End Sub
Cdlmnt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fait, dans la cellule tout est marqué comme cela:
[...] Analyse des informations au fil de l'eau et déclenchement des interventions [...] Vérification des points de consignes [...] Edition des journaux d'alarmes, des analyses et des relevés sous tendance [...] Optimisation du fonctionnement des installations par téléréglage [...] Modification des programmes horaires [...] Création de points ponctuels, de synthèses ou de groupes de commande
Pour plus de lisibilité, j'ai préféré vous la décomposé ligne par ligne mais tous est mis à la chaîne.
Cordialement
[...] Analyse des informations au fil de l'eau et déclenchement des interventions [...] Vérification des points de consignes [...] Edition des journaux d'alarmes, des analyses et des relevés sous tendance [...] Optimisation du fonctionnement des installations par téléréglage [...] Modification des programmes horaires [...] Création de points ponctuels, de synthèses ou de groupes de commande
Pour plus de lisibilité, j'ai préféré vous la décomposé ligne par ligne mais tous est mis à la chaîne.
Cordialement
https://www.cjoint.com/c/CLfrLtR4TDU
Voici le lien. J'ai pris un exemple ligne 18 en bleu et en rouge ligne 14, 15, 16, 17 ce que je veux obtenir.
Via 55, j'ai pas encore testé ta macro mais je pense quelle est insufisante vu la modification de ma demande.
Il me parait difficile de réalisé ce que je demande sur l'ensemble car certaines gamme contiennent des titres ou d'autres éléments. Mais au moins, si je peux diminuer la tache...
Voici le lien. J'ai pris un exemple ligne 18 en bleu et en rouge ligne 14, 15, 16, 17 ce que je veux obtenir.
Via 55, j'ai pas encore testé ta macro mais je pense quelle est insufisante vu la modification de ma demande.
Il me parait difficile de réalisé ce que je demande sur l'ensemble car certaines gamme contiennent des titres ou d'autres éléments. Mais au moins, si je peux diminuer la tache...
Si tu t'y connais un peu en macro, tu peux enrichir ça :
Sub essai()
While InStr(1, ActiveCell.Value, Chr(10)) > 0
saut = InStr(1, ActiveCell.Value, Chr(10))
gauche = Left(ActiveCell.Value, saut - 1)
droite = Mid(ActiveCell.Value, saut + 1)
r = MsgBox("Voulez-vous créer une nouvelle ligne :" & Chr(10) & gauche & "?", vbYesNo)
If r = vbYes Then
ActiveCell.Value = gauche
ActiveCell.Offset(1, 0).EntireRow.Insert
ActiveCell.Offset(1, 0).Value = droite
For c = 1 To 10
If c <> 8 Then Cells(ActiveCell.Row + 1, c).Value = Cells(ActiveCell.Row, c).Value
Next c
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Value = gauche & Chr(13) & droite
End If
Wend
End Sub
Bonjour,
Désolé pour la réponse tardive, je suis surbouqué...
Je viens de tester vos macro: VIA55, il me met "argument ou appel de procédure incorrect. Voila la macro:
Sub decompose()
Dim a(5)
texte = Sheets(1).Range("H377").Value
For n = 6 To Len(texte)
If Mid(texte, n, 1) = "[" Then x = x + 1: a(x) = n
Next
partie = Mid(texte, 6, a(1) - 6)
Range("A1").Value = partie
For t = 2 To x - 1
partie = Mid(texte, a(t) + 5, a(t + 1) - a(t) - 5)
Range("A" & t).Value = partie
Next
partie = Mid(texte, a(x) + 5, Len(texte) - a(x) - 5)
Range("A" & x).Value = partie
End Sub
Zoul67, ta macro marche du tonnerre de dieux. Néanmoins le [...] et répété alors que je voudrais qu'il disparraisse lors de la décomposition. Peux tu m'aider ?
Cordialement
Désolé pour la réponse tardive, je suis surbouqué...
Je viens de tester vos macro: VIA55, il me met "argument ou appel de procédure incorrect. Voila la macro:
Sub decompose()
Dim a(5)
texte = Sheets(1).Range("H377").Value
For n = 6 To Len(texte)
If Mid(texte, n, 1) = "[" Then x = x + 1: a(x) = n
Next
partie = Mid(texte, 6, a(1) - 6)
Range("A1").Value = partie
For t = 2 To x - 1
partie = Mid(texte, a(t) + 5, a(t + 1) - a(t) - 5)
Range("A" & t).Value = partie
Next
partie = Mid(texte, a(x) + 5, Len(texte) - a(x) - 5)
Range("A" & x).Value = partie
End Sub
Zoul67, ta macro marche du tonnerre de dieux. Néanmoins le [...] et répété alors que je voudrais qu'il disparraisse lors de la décomposition. Peux tu m'aider ?
Cordialement
En fait, je me rend contre qu'un simple STXT pourra faire l'affaire après l'application de ta macro. En revanche, ce qu'il me faudrait c'est appliqué cette décomposition à toutes les cellules de la colonnes et pas cellule par cellule.
Effectivement, c'est encore plus rapide. Est ce que tu peux me faire la même macro mais appliqué sur la colonne entière et pas seulement sur une cellule. Je souhaiterai que toutes les cellules de la colonne se décomposent en même temps. De plus, pas besoins de me demandé si je veux décomposé la ligne à chaque fois. J'espère que je n'abuse pas de ta gentillesse....
Bonjour,
Je n'ai pas testé, mais essaie ceci (en te plaçant dans la première cellule à scinder) :
A+
Je n'ai pas testé, mais essaie ceci (en te plaçant dans la première cellule à scinder) :
Sub essai()
While ActiveCell.Value <> """
saut = InStr(1, ActiveCell.Value, Chr(10))
gauche = Left(ActiveCell.Value, saut - 1)
droite = Mid(ActiveCell.Value, saut + 1)
If InStr(1, ActiveCell.Value, Chr(10)) > 0 Then
ActiveCell.Value = gauche
ActiveCell.Offset(1, 0).EntireRow.Insert
ActiveCell.Offset(1, 0).Value = droite
For c = 1 To 10
If c <> 8 Then Cells(ActiveCell.Row + 1, c).Value = Cells(ActiveCell.Row, c).Value
Next c
End If
ActiveCell.Offset(1, 0).Select
Wend
End Sub
A+
Re,
Cadeau : https://www.cjoint.com/c/CLqr5oNw4lA
(j'ai laissé le code de la macro, j'ai cru que Excel plantait, mais il faut juste lui laisser le temps)
A+
Cadeau : https://www.cjoint.com/c/CLqr5oNw4lA
(j'ai laissé le code de la macro, j'ai cru que Excel plantait, mais il faut juste lui laisser le temps)
A+
En plus, tu recopies les cellules d'avant, c'est inespéré !
Mais attention, il y a un problème. La colonne G est différente des colonnes A,B,C jusqu'à F. Ce sont les consignes particulières qui comme la gamme se décompose. Dans les macros que tu m'as écrite avant, j'appliquais ta macro sur H20 par exemple, puis je passé à G20 et je l'appliquais également. Les 2 cellules se décomposés parfaitement. Avec ta nouvelle macro, j'ai un soucis, je ne peux plus décomposé la colonne G qui se recopie sur toute les lignes. Si j'applique ta nouvelle macro à la colonne G une fois appliqué sur H, j'ai un gros problème sur les bras.
Je pense qu'il faudrait exclure de ta nouvelle macro la colonne G. Créer une nouvelle macro pour la colonne G qui serait égal à ta macro actuelle moins les fonctions de recopiage des colonnes d'avant. Ainsi, j'applique ta macro actuelle puis, la macro juste pour G.
Je précise que le fichier excel que je t'ai mis en pièce jointe n'est qu'un échantillon, le nombre de gamme de maintenance est beaucoup plus important. Chaque petite amélioration nous fais économiser de nombreuses de travail. Il s'agit d'un projet international.
Mais attention, il y a un problème. La colonne G est différente des colonnes A,B,C jusqu'à F. Ce sont les consignes particulières qui comme la gamme se décompose. Dans les macros que tu m'as écrite avant, j'appliquais ta macro sur H20 par exemple, puis je passé à G20 et je l'appliquais également. Les 2 cellules se décomposés parfaitement. Avec ta nouvelle macro, j'ai un soucis, je ne peux plus décomposé la colonne G qui se recopie sur toute les lignes. Si j'applique ta nouvelle macro à la colonne G une fois appliqué sur H, j'ai un gros problème sur les bras.
Je pense qu'il faudrait exclure de ta nouvelle macro la colonne G. Créer une nouvelle macro pour la colonne G qui serait égal à ta macro actuelle moins les fonctions de recopiage des colonnes d'avant. Ainsi, j'applique ta macro actuelle puis, la macro juste pour G.
Je précise que le fichier excel que je t'ai mis en pièce jointe n'est qu'un échantillon, le nombre de gamme de maintenance est beaucoup plus important. Chaque petite amélioration nous fais économiser de nombreuses de travail. Il s'agit d'un projet international.
1. Je comprends pas ce que tu veux dire. S'il faut décomposer en G et en H, comment savoir ce qui va ensemble au sein de chaque ligne du fichier d'originie ?
2. Je n'ai rien changé à la macro pour la recopie (copie de toutes les cellules hormis celle de la colonne H :
A+
2. Je n'ai rien changé à la macro pour la recopie (copie de toutes les cellules hormis celle de la colonne H :
For c = 1 To 10)
If c <> 8 Then Cells(ActiveCell.Row + 1, c).Value = Cells(ActiveCell.Row, c).Value
Next c
A+
Bonjour Zoul,
En faite, malgrè l'erreur 1004, la macro décompose toutes mes cellules et si elle s'arrêtre, je la réapplique une 2ème fois et tout fonctionne.
Je te remercie donc pour ton aide qui nous à fait gagné de nombreuses heures de travail.
Joyeux noel à toi.
Cordialement
En faite, malgrè l'erreur 1004, la macro décompose toutes mes cellules et si elle s'arrêtre, je la réapplique une 2ème fois et tout fonctionne.
Je te remercie donc pour ton aide qui nous à fait gagné de nombreuses heures de travail.
Joyeux noel à toi.
Cordialement
Bonjpur
Voila une macro pour le nettoyage des colonnes
Sub TestColG()
For L = 2 To Range("G" & Rows.Count).End(xlUp).Row
old_text = Range("G" & L).Value
new_text = Replace(old_text, Chr(10), " ")
new_text = Replace(new_text, Chr(13), " ")
new_text = Replace(new_text, " ", " ")
Range("G" & L).Value = new_text
Next
End Sub
Sub TestColH()
For L = 2 To Range("H" & Rows.Count).End(xlUp).Row
old_text = Range("H" & L).Value
new_text = Replace(old_text, "[...] ", "")
new_text = Replace(new_text, "[...] ", "")
new_text = Replace(new_text, Chr(10), " ")
new_text = Replace(new_text, Chr(13), " ")
new_text = Replace(new_text, " ", " ")
Range("H" & L).Value = new_text
Next
End Sub
A+
Maurice
Voila une macro pour le nettoyage des colonnes
Sub TestColG()
For L = 2 To Range("G" & Rows.Count).End(xlUp).Row
old_text = Range("G" & L).Value
new_text = Replace(old_text, Chr(10), " ")
new_text = Replace(new_text, Chr(13), " ")
new_text = Replace(new_text, " ", " ")
Range("G" & L).Value = new_text
Next
End Sub
Sub TestColH()
For L = 2 To Range("H" & Rows.Count).End(xlUp).Row
old_text = Range("H" & L).Value
new_text = Replace(old_text, "[...] ", "")
new_text = Replace(new_text, "[...] ", "")
new_text = Replace(new_text, Chr(10), " ")
new_text = Replace(new_text, Chr(13), " ")
new_text = Replace(new_text, " ", " ")
Range("H" & L).Value = new_text
Next
End Sub
A+
Maurice
Bonjour Zoul,
Je me permet encore une fois de te solicité. J'ai terminé grace à ton travail la décomposition des gammes. Il se trouve que récemment des gammes avec un autre type de format sont arrivées:
http://cjoint.com/?DAEptcxXm2R
Comment tu peux le constater dans le colonne E, il n'y a pas de saut de ligne d'une tache à une autre dans la même cellule donc ta macro ne décompose plus les taches.
En revanche, tu remarqueras que chaque tache commence et fini par un carré.
Serait il possible d'imaginer une macro qui copie colle les caractères situés entre 2 carrés et les décompose ligne par ligne ?
Cordialement
Je me permet encore une fois de te solicité. J'ai terminé grace à ton travail la décomposition des gammes. Il se trouve que récemment des gammes avec un autre type de format sont arrivées:
http://cjoint.com/?DAEptcxXm2R
Comment tu peux le constater dans le colonne E, il n'y a pas de saut de ligne d'une tache à une autre dans la même cellule donc ta macro ne décompose plus les taches.
En revanche, tu remarqueras que chaque tache commence et fini par un carré.
Serait il possible d'imaginer une macro qui copie colle les caractères situés entre 2 carrés et les décompose ligne par ligne ?
Cordialement
Bonjour Erakmur,
J'ai adapté la macro pour qu'elle sépare les cellules à l'aide de "[_]".
Je n'ai fait l'exercice que pour les 2000 premières lignes.
https://www.cjoint.com/?DAFj5ljVJNB
A+
J'ai adapté la macro pour qu'elle sépare les cellules à l'aide de "[_]".
Je n'ai fait l'exercice que pour les 2000 premières lignes.
https://www.cjoint.com/?DAFj5ljVJNB
A+
Bonjour Zoul,
Désolé pour le retard et merci pour ton temps.
Ta formule est basée sur [_] ce qui fait que certaines taches ne sont pas décomposées (Exemple cellule E42). C'est le carré qui garantie une décomposition optimale. Malheureusement, je n'arrive même pas à le copier collé, je ne sais pas ce qu'est ce caractère particulier. Peux tu m'éclairer ?
Cordialement
Désolé pour le retard et merci pour ton temps.
Ta formule est basée sur [_] ce qui fait que certaines taches ne sont pas décomposées (Exemple cellule E42). C'est le carré qui garantie une décomposition optimale. Malheureusement, je n'arrive même pas à le copier collé, je ne sais pas ce qu'est ce caractère particulier. Peux tu m'éclairer ?
Cordialement
Bonjour à tous,
voilà une macro qui éclate les données selon que :
1) [& # 133;] ou [...] ou encore [...] apparaissent en début ou en milieu de ligne
2) des titres et des sous-titres se mélangent aux données
J'ai fait répéter le contenu des lignes (colonnes 1 à 7 et 9 et 10) pour chaque éclatement.
J'ai repéré les données en ajoutant une "*" au début, pour les différencier des titres, sous-titres et autres "nota:" ou commentaires.
Les données sont écrites dans la feuille "Feuil1".
Le traitement est instantané du fait de l'utilisation de tableaux.
J'ai laissé la colonne M (feuille "sheet1") pour voir ce que la formule intégrée à la macro fait aux données (ajout d'un "|*" pour séparer les données).
Ce "|" servira pour le split de la colonne H.
https://www.cjoint.com/?DBev0VqbmXF
cordialement
voilà une macro qui éclate les données selon que :
1) [& # 133;] ou [...] ou encore [...] apparaissent en début ou en milieu de ligne
2) des titres et des sous-titres se mélangent aux données
J'ai fait répéter le contenu des lignes (colonnes 1 à 7 et 9 et 10) pour chaque éclatement.
J'ai repéré les données en ajoutant une "*" au début, pour les différencier des titres, sous-titres et autres "nota:" ou commentaires.
Les données sont écrites dans la feuille "Feuil1".
Le traitement est instantané du fait de l'utilisation de tableaux.
J'ai laissé la colonne M (feuille "sheet1") pour voir ce que la formule intégrée à la macro fait aux données (ajout d'un "|*" pour séparer les données).
Ce "|" servira pour le split de la colonne H.
https://www.cjoint.com/?DBev0VqbmXF
cordialement
Bonjour JvDo,
J'ai regardé ton fichier. Tu as pris le fichier que j'avais envoyé à Zoul il y a plusieurs semaine. Ce travail est maintenance terminé. Zoul m'a fait une maccro qui détecte les saut de ligne et créer une cellule par saut. De plus, les autres cellules des autres colonnes étaient recopiés ce qui m'arrangé. Concernant la première page, tu rassembles toutes les taches dans la colonne M, je ne vois pas pourquoi tu fais cela. Le résultat final étant la colonne H de ton 2ème onglet qui ressemble au travai de Zoul de l'époque.
Il y a quelques jours, un autre problème est survenue. Un nouveau fichier m'a était envoyé mais la présentation est différente. Il ne fonctionne pas par saut de ligne dans certaines cellules. J'ai néanmoins remarqué que les taches étaient séparé par des carrés. Zoul m'a fait une macro qui dispatche les tache par [_]. Malheureusement, [_] ne résout que partiellemment le problème (voir cellule E42 qui n'est pas éclaté). Seul le carré permet de séparé les taches par cellule.
Zoul me dit que les carrés sont des points. Je vais donc remplacé son [_] par des points. On verra si cela fonctionne.
Cordialement
J'ai regardé ton fichier. Tu as pris le fichier que j'avais envoyé à Zoul il y a plusieurs semaine. Ce travail est maintenance terminé. Zoul m'a fait une maccro qui détecte les saut de ligne et créer une cellule par saut. De plus, les autres cellules des autres colonnes étaient recopiés ce qui m'arrangé. Concernant la première page, tu rassembles toutes les taches dans la colonne M, je ne vois pas pourquoi tu fais cela. Le résultat final étant la colonne H de ton 2ème onglet qui ressemble au travai de Zoul de l'époque.
Il y a quelques jours, un autre problème est survenue. Un nouveau fichier m'a était envoyé mais la présentation est différente. Il ne fonctionne pas par saut de ligne dans certaines cellules. J'ai néanmoins remarqué que les taches étaient séparé par des carrés. Zoul m'a fait une macro qui dispatche les tache par [_]. Malheureusement, [_] ne résout que partiellemment le problème (voir cellule E42 qui n'est pas éclaté). Seul le carré permet de séparé les taches par cellule.
Zoul me dit que les carrés sont des points. Je vais donc remplacé son [_] par des points. On verra si cela fonctionne.
Cordialement
Ensuite copie le fichier texte et revient dans Excel et colle.
Les sauts de ligne font changer de cellule normalement.