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

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

14 réponses

  1. Erakmur
     
    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
    2
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      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.
      0
  2. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

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

    A+
    0
  3. PapyLuc51 Messages postés 4569 Date d'inscription   Statut Membre Dernière intervention   1 511
     
    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
    0
  4. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      La philanthropie de certains m'étonnera toujours.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Erakmur Messages postés 24 Statut Membre
     
    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
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Tu peux transmettre ton fichier via https://www.cjoint.com/ ?
      0
    2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      Tu as essayé ma macro ?
      Je l'ai testé avec ton exemple, c'est bon

      Cdlmnt
      0
  7. Erakmur Messages postés 24 Statut Membre
     
    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...
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      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
      0
  8. Erakmur
     
    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
    0
    1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      OK je te laisse continuer avec Zoul
      Cdlmnt
      0
  9. Erakmur
     
    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.
    0
    1. Zoul67
       
      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+
      0
  10. Erakmur
     
    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....
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bonjour,

      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+
      0
    2. Erakmur
       
      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
      0
    3. Zoul67 Messages postés 2001 Statut Membre 149
       
      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+
      0
    4. Erakmur
       
      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.
      0
    5. Zoul67 Messages postés 2001 Statut Membre 149
       
      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+
      0
  11. Erakmur
     
    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
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      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+
      0
    2. Erakmur
       
      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+
      0
  12. foo
     
    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
    0
    1. Erakmur
       
      Bonjour Maurice,

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

      Cordialement
      0
  13. Erakmur
     
    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
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      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+
      0
    2. Erakmur
       
      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
      0
    3. Zoul67 Messages postés 2001 Statut Membre 149
       
      Le carré après les doubles points qui font office de tiret ? Ce sont des points.
      J'ai pas compris E42.

      A+
      0
  14. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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
    0
  15. Erakmur
     
    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
    0