1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| Sub test()
Dim Paragraphe As Object, WordApp As Object, WordDoc As Object
Dim Txt As String, Deb As Integer, Fin As Integer, Ligne As Integer
Dim Col As Integer, Bal As String
'le document Word est supposé fermé avant le lancement de la macro
With Sheets("Feuil1")
Fichier = "C:\Users\Daniel\Documents\Donnees\Daniel\mpfe\djamat\djamat fichier_soft2.doc"
'creation session Word
Set WordApp = CreateObject("Word.Application")
'pour que word reste masqué pendant l'opération
WordApp.Visible = False
'ouverture du fichier Word
Set WordDoc = WordApp.Documents.Open(Fichier)
For Each Paragraphe In WordDoc.Paragraphs
'pour chaque paragraphe on verifie si il y a un [ et un ]
Txt = Paragraphe.Range.Text
Deb = InStr(1, Txt, "[")
Fin = InStr(1, Txt, "]")
'deb & fin seront toujours superieur à 0 si txt n'a pas de [
If Deb > 0 And Fin > 0 Then
'bal recupere le nom de la balise, +1 pour le [ et -2 pour /], donc bal=objective par exemple
Bal = Mid(Txt, Deb + 1, Fin - 2)
'vérification de la présence d'une balise de fin
If InStr(1, Txt, "[/" & Bal & "]") > 0 Then
'deb: calcule le nombre de caractere selon la balise cad "[REMINDER] "=10+1espace
'fin: compte le nombre de caractere avant la balise avant [/
'txt: recupere le resultat final
Deb = InStr(1, Txt, "[" & Bal & "]") + Len("[" & Bal & "]")
Fin = InStr(1, Txt, "[/" & Bal & "]") - Len("[/" & Bal & "]")
Txt = Mid(Txt, Deb, Fin)
'entete de colonne cad bal
Set c = .Rows(1).Find(Bal, , , xlWhole)
If c Is Nothing Then
'si la cellule A1 est vide alors colonne prends 1 sinon elle s'incremente;
If .Cells(1, 1) = "" Then
'1seul passage
Col = 1
Else
Col = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
End If
'on copie l'entete dans une cellule
.Cells(1, Col) = Bal
Else
'Si la balise existe déjà sur la feuille, on récupère sa colonne
Col = c.Column
End If
'et on place la chaine de caractere dans la première cellule vide dans la colonne
.Cells(.Rows.Count, Col).End(xlUp).Offset(1) = Txt
End If
End If
Next Paragraphe
'ajout d'une ligne de couleur
Rows(Ligne + 1).Interior.ColorIndex = 3
WordDoc.Close
WordApp.Quit
Set WordDoc = Nothing
Set WordApp = Nothing
End With
End Sub |
Partager