Séparer le contenu d'une cellule en plusieurs lignes [Fermé]

Signaler
-
 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

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
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56904 internautes nous ont dit merci ce mois-ci

Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
Copie-colle le tout dans un fichier texte.
Ensuite copie le fichier texte et revient dans Excel et colle.
Les sauts de ligne font changer de cellule normalement.
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
Bonjour,

Je ferais plutôt des couper-coller s'il ne s'agit que de six lignes.

A+
Messages postés
2715
Date d'inscription
dimanche 3 mai 2009
Statut
Membre
Dernière intervention
6 août 2020
697
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
Messages postés
12461
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
5 août 2020
1 955
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
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
La philanthropie de certains m'étonnera toujours.
Messages postés
24
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
14 octobre 2019

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
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
Tu peux transmettre ton fichier via https://www.cjoint.com/ ?
Messages postés
12461
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
5 août 2020
1 955
Tu as essayé ma macro ?
Je l'ai testé avec ton exemple, c'est bon

Cdlmnt
Messages postés
24
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
14 octobre 2019

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...
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
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
Messages postés
12461
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
5 août 2020
1 955
OK je te laisse continuer avec Zoul
Cdlmnt
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.
Pas besoin de formule. Après exécution de la macro, sélectionne la colonne et fais "Remplacer" (Ctrl-h) en haut tu mets "[...]" et en bas rien.Enfin,tu cliques sur "Remplacer tout".

A+
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,
La première cellule se décompose parfaitement mais la macro stop dès quelle aborde la 2ème. erreur d'argument ou d'appel me dit on.
Cordialement
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
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+
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.
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
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 :
            For c = 1 To 10
If c <> 8 Then Cells(ActiveCell.Row + 1, c).Value = Cells(ActiveCell.Row, c).Value
Next c
)

A+
http://cjoint.com/?CLtmD54DSGF

Bonjour Zoul,

Mettons de côté ce problème de colonne G. Si joint, une nouvelle liste. Ta macro bug à un moment donné. Pourtant, le format reste le même que mon précédant fichier, seule le contenu change. Peux tu stp essayer de voir ce qui ne va pas dans ce fichier et pourquoi ta macro bug la dessus et pas sur l'autre ?

Cordialement
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
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
Bonjour Erakmur et bonne année !

Désolé pour cette réponse tardive, mais j'étais sans internet un bout de temps (déménagement, fêtes de fin d'année,...).
Tout est résolu ou bien reste-t-il des choses à améliorer ?

A+
Bonjour Zoul, bonne année à toi.

Le problème est résolu. Ta macro ne dégirée pas bien certaines gammes avec une mise en forme spécifique. Un bug apparait mais en l'éxécutant plusieurs fois, elle finit pas décomposer les lignes.

Merci pour ton aide précieuse.

A+
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
Bonjour Maurice,

Peux tu préciser ce que tu entends par nettoyage des colonnes ?

Cordialement
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
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
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+
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
Messages postés
1939
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
29 juillet 2020
134
Le carré après les doubles points qui font office de tiret ? Ce sont des points.
J'ai pas compris E42.

A+
Messages postés
1925
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
7 juillet 2020
793
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
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