XL 2016 Convertir fichier HTML en format CSV

debenexcel

XLDnaute Nouveau
Bonjour,

Je sollicite votre aide pour une macro Excel. J'ai plusieurs fichiers de données en format HTML que j'aimerais les convertir en format CSV sous Excel avec une macro.
La structure du fichier HTML est la suivante:
Les titres de colonnes commencent à partir de la ligne 19.
Après la table comporte 5 colonnes. Le contenu dans la 1ère colonne est affiché sur deux lignes, j'aimerais copier le texte de la 2e ligne (si existe) dans une nouvelle colonne. Dans certaines lignes de cette première colonne la même description comporte plusieurs codes et numéros. La description est affichée une seule fois, mais le code est le même pour chaque numéro. Pour ces cas, je souhaiterais que la macro dupliquera la description pour chacune des lignes.
Un exemple de ces données est ci-joint vous donnant un aperçu sur l'input et le résultat souhaitable.

Je vous remercie d'avance de votre aide.

Cordialement,
 

Pièces jointes

  • classeurV2.xlsx
    10.7 KB · Affichages: 16

Staple1600

XLDnaute Barbatruc
Re

Le même résultat que?
Lors de mon test, les données du fichier HTML sont séparées dans des colonnes.
Ma question était: Est-ce que cet import est correct?
Si oui, alors il suffit de faire un Enregister sous -> Fichier CSV
(manuellement ou par macro)
 

debenexcel

XLDnaute Nouveau
re
Moi j'aimerais que le code (MAR, BEL, CAN) soit affiché dans une nouvelle colonne, et que la description soit dupliquée lorsqu'elle comporte plusieurs ID.
Voir dans la capture d'écran ci-jointe le résultat obtenu en appliquant ton code et le résultat souhaitable
 

Pièces jointes

  • Capture7.PNG
    Capture7.PNG
    37.7 KB · Affichages: 17

Staple1600

XLDnaute Barbatruc
Re

Alors un petit bricolage (pour un premier test)
On se rapproche, non ?
VB:
Sub Reagencement_test1()
Dim i&
For i = 2 To Cells(Rows.Count, 1).End(3).Row
Select Case VBA.Trim(Cells(i, "A"))
Case Is = "MAR", "BEL", "CAN"
Cells(i, "A").Resize(, 5).Cut Cells(i - 1, "B")
End Select
Next
Range("B1:B" & Cells(Rows.Count, "B").End(3).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Range("A1:A" & Cells(Rows.Count, "B").End(3).Row).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
[A1:F1] = Array("Description", "Code", "ID", "Date Acquisition", "Nombre", "Dernière utilisation")
[A1].CurrentRegion.Columns.AutoFit
[D:D,F:F].NumberFormat = "dd/mm/yyyy"
End Sub
NB: Macro à lancer après avoir fait l'import du fichier HTML.
 

Staple1600

XLDnaute Barbatruc
Re

Une petite modif
(mais cela reste encore du bricoli-bricola ;))
VB:
Sub Reagencement_test2()
Dim i&, plg As Range
For i = 2 To Cells(Rows.Count, 1).End(3).Row
Select Case VBA.Trim(Cells(i, "A"))
Case Is = "MAR", "BEL", "CAN"
Cells(i, "A").Resize(, 5).Cut Cells(i - 1, "B")
End Select
Next
Set plg = Range("B1:B" & Cells(Rows.Count, "B").End(3).Row)
plg.SpecialCells(4).EntireRow.Delete: plg.Offset(, -1).SpecialCells(4).FormulaR1C1 = "=R[-1]C"
plg.Offset(, -1) = plg.Offset(, -1).Value
[A1:F1] = Array("Description", "Code", "ID", "Date Acquisition", "Nombre", "Dernière utilisation")
[A1].CurrentRegion.Columns.AutoFit
[D:D,F:F].NumberFormat = "dd/mm/yyyy"
End Sub
 

debenexcel

XLDnaute Nouveau
RE
J'ai trouvé le problème, moi j'ai mis le format de toutes les cellules en texte pour éviter qu'il convertisse les ID et les dates en format bizarre, ce qui a généré ce problème
Je les ai remis toutes en format standard, et du coup le problème est disparu :)
Le problème maintenant que certains ID s'affichent en caractères non textuel, ainsi que certaines dates ne s'affichent pas en format date. voir p.j.;)
 

Pièces jointes

  • Capture9.PNG
    Capture9.PNG
    15.1 KB · Affichages: 10

Staple1600

XLDnaute Barbatruc
Re

Encore du bricolage
Utilises cette macro pour l'import HTML
Code:
Sub HTML_2_XL_II()
Dim oCell As Object, oRow As Object, html$, x&, y&, vDate
Const filePath As String = "C:\Users\STAPLE\Documents\htmltocsv.html" ' à modifier
Open filePath For Input As #1
    html = Input(LOF(1), 1)
Close
x = 1: y = 1
With CreateObject("htmlFile")
    .body.innerhtml = html
    For Each oRow In .getelementsbytagname("table")(1).Rows
        For Each oCell In oRow.Cells
        Select Case y
        Case 3, 5
        Sheets(1).Cells(x, y).Value = VBA.Trim(oCell.innertext)
        Sheets(1).Cells(x, y).NumberFormat = "dd/mm/yyyy"
        Sheets(1).Cells(x, y).HorizontalAlignment = xlCenter
        Case Else
        Sheets(1).Cells(x, y).Value2 = oCell.innertext
        End Select
        y = y + 1
        Next oCell
        y = 1
        x = x + 1
    Next oRow
End With
[A1].CurrentRegion = [A1].CurrentRegion.Value
'source:122914:(xf)//[M]150924
End Sub
Puis la dernière version de Réagencement.
 

debenexcel

XLDnaute Nouveau
Ce n'est pas grave, ça fonctionne plus ou moins mais à condition de mettre certaines colonnes en format texte :) Voir capture 11.
Mais, j'ai découvert 2 autres problèmes
1) si une case est vide, les données seront complètement débordées. Voir capture 12
2) Je ne suis pas expert en VBA, mais je vois dans le code que tu as mis une condition sur les codes (
Case Is = "MAR", "BEL", "CAN")
Dans mes fichiers originaux, il y a des centaines de codes différents. il est impossible de les mettre tous dans le code. Est-ce possible que la condition soit effectuée sur le contenu de la case, indépendamment de la nature des mots qu'elle contienne (texte, chiffres, texte et chiffre ou vide bien évidemment)? Merci
 

Pièces jointes

  • Capture12.PNG
    Capture12.PNG
    15.5 KB · Affichages: 10
  • Capture11.PNG
    Capture11.PNG
    16.2 KB · Affichages: 11

Staple1600

XLDnaute Barbatruc
Bonjour le fil, debenexcel

Après une nuit de sommeil, et pour commencer cette nouvelle journée à me confire tout doucement, j'ai changé mon fusil d'épaule.
Inutile de sortir l'artillerie lourde, pour ce qui est de l'import HTML ;)
Excel sait faire cela tout seul comme un grand ;)
VB:
Sub HTML_To_XLSX()
Dim strPath$
strPath = "C:\Users\STAPLE\htmltocsv\" ' à adapter
Workbooks.Open Filename:=strPath & "htmltocsv.html"
ActiveWorkbook.Sheets(1).Range("1:16,27:28").Delete
  With ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
  .Borders.LineStyle = xlNone: .Interior.Pattern = xlNone: .Columns(2).NumberFormat = "@"
  End With
ActiveWorkbook.SaveAs Filename:=strPath & "test.xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub
Reste le réagencement des données selon le format souhaité.
 

Discussions similaires

Réponses
2
Affichages
251

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16