Quelqu'un a créé un document texte dans Excel comme s'il était sur une machine à écrire, alors ils ont écrit jusqu'au bout de leur écran, puis ont appuyé sur Entrée. J'ai maintenant besoin de ce document lisible sur d'autres écrans. Je voudrais mettre chaque paragraphe dans sa propre cellule, puis copier et coller dans le mot. S'il y a une meilleure façon de faire cela, je suis toute oreille.

J'ai essayé d'enregistrer une macro, mais elle reste coincée entre les paragraphes (l'auteur a sauté une ligne entre les paragraphes). Ma recherche montre la concaténation des cellules une à la fois, ce qui ne m'aidera pas avec environ 1000 lignes de texte.

Je suis ouvert à l'utilisation d'une macro, mais je pense que VBA serait mieux. Quelque chose comme:

' If cell below isn't empty

' then

' activecell=activecell&activecell(0,1)

' delete activecell(0,1)

' else activecell(0,2).select

'endif

'loop 1000 times

Si le document actuel dit:

A boy walked down
the street.

Next he tried
to run.

Finally this task
was over.

Cela ressemblerait à:

A boy walked down the street.

Next he tried to run.

Finally this task was over.

Ensuite, je vais le copier en mot. Je vous remercie!

0
uttuck 20 juin 2019 à 22:25

3 réponses

Meilleure réponse

En supposant que mes hypothèses sont correctes, essayez ce qui suit:

  1. Copiez tout dans Word.

  2. Faites une recherche / remplacement pour deux retours chariot (^p^p) et remplacez-les par une chaîne d'espace réservé (ex.: %%%%%, tout fonctionnera tant qu'il ne se trouve pas dans votre document)

  3. Effectuez une recherche / remplacement pour les retours chariot simples (^p) et remplacez-les par un seul espace ( )

  4. Faites une recherche / remplacement pour votre chaîne d'espace réservé (%%%%% dans mon exemple ci-dessus) et remplacez-la par deux retours chariot (^p^p)

  5. Vous devrez peut-être effectuer une recherche / remplacement sur les espaces doubles et les remplacer par des espaces simples.

Après vérification et peut-être quelques ajustements, vous devriez être fait.

3
cybernetic.nomad 20 juin 2019 à 19:41

Une autre option

Sub compileDoc()
    Dim textArr(), r As Long, n As Long, curPar As String

    textArr = Sheet1.Range("A2:A" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row).Value
    n = LBound(textArr)
    For r = LBound(textArr) To UBound(textArr)
        If Len(textArr(r, 1)) Then
            curPar = curPar & " " & textArr(r, 1)
            textArr(r, 1) = ""
        Else
            textArr(n, 1) = WorksheetFunction.Trim(curPar)
            n = n + 1
            curPar = ""
        End If
    Next r
    textArr(n, 1) = curPar
    Sheet1.Range("B2:B" & n + 1) = textArr
End Sub
0
Nathan Sutherland 20 juin 2019 à 20:15

Option supplémentaire, le texte peut être copié à partir de la fenêtre immédiate après l'exécution de la macro. Vous pouvez y accéder via Afficher ou Ctrl + G dans la fenêtre du développeur VBA.

Sub Concatenate_Text()
Dim i As Long
Dim lastrow As Long
Dim paragraph As String

Dim wb As Workbook
Dim ws As Worksheet

Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")

lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

For i = 1 To lastrow
    If IsEmpty(ws.Cells(i, "A")) = False Then
    paragraph = paragraph & " " & ws.Cells(i, "A").Value & " " & ws.Cells(i + 1, "A").Value
    i = i + 1
    Else: paragraph = paragraph & vbCrLf
    End If

Next i

Debug.Print paragraph

End Sub
0
dnacarlos 20 juin 2019 à 20:39