Microsoft 365 Convertir fichiers html en csv

debenexcel

XLDnaute Nouveau
Bonjour Forum,

Je sollicite votre aide pour m'aider avec du VBA à convertir des fichiers HTML en format CSV.
Je joins un exemple de ces fichiers à ce message comportant quelques lignes pour vous donner une idée sur la structure html. Une structure qui est un peu complexe. Certains fichiers comportent juste 2 tables, soit la table de requête (les éléments de recherche), et la table des produits. D’autres comportent 4, 6, etc.
Ce qui m’intéresse ce sont la ou les tables des produits. Je cherche donc à supprimer d'abord les tables contenant les limites/requêtes d'extraction de données (fournisseur, produit, tri....); et convertir que les autres tables contenant les produits en forme de tableau structuré ou en csv exportable directement après la fin de l’exécution de la macro.
Quelques précisions :
À part le numéro de produit qui est quasiment présent dans toutes les lignes, les autres colonnes pourraient ne pas contenir des données.
J’aimerais ajouter une nouvelle colonne "Modèle" et copier le numéro de modèle de la colonne (produit / modèle) et l'insérer dans cette nouvelle colonne, si existe. Il est affiché toujours sous le nom de produit.
Important: Pour certaines lignes, le nom de produit comporte plusieurs modèles, j'aimerais que le nom de produit soit dupliqué pour chaque modèle.
Aussi, créer des cellules vides dans le CSV pour les informations manquantes dans certaines cases des tables html.

Si c'est possible aussi avoir les données dans cet ordre : No produit, En Stock, produit, modèle, date d'achat, date de fabrication, et que le séparateur soit pipe |
Je joins aussi un exemple du résultat souhaité en CSV.

Merci beaucoup à l'avance de votre aide.
 

Pièces jointes

  • HTMLtoCSV.zip
    2.6 KB · Affichages: 18
Solution
RE

Pour le caractère je l'ai mis en paramètre

Il peut être nécessaire de modifier les paramètres de PowerQuery
Fichier, Options et paramètres, Options de requête, Classeur Actif, Confidentialité : doit être ignorer les niveaux de confidentialité

Par contre pour le html il n'est pas prévu de spécifier le codage du fichier importé.
Alors que c'est possible pour d'autres formats, je n'ai rien trouvé concernant le format HTML.

chris

XLDnaute Barbatruc
Bonjour

Via PowerQuery j'arrive à récupérer les infos, qu'on peut exporter ensuite en csv mais on ne peut pas déclarer l'encodage du fichier, contrairement à d'autres formats sources et du coup les lettres accentuées posent problème...
 

debenexcel

XLDnaute Nouveau
Bonjour,
Bonne nouvelle!
Pour l'encodage, il semble que cette solution pourrait résoudre le problème.
Ouvrir le fichier html avec Bloc-Notes, changer l'encodage à UTF-8 dans meta charset=utf-8;
Puis enregistrer-sous le fichier en UTf-8
Voir pièce jointe,
Merci:)
 

Pièces jointes

  • Encodage.PNG
    Encodage.PNG
    37.7 KB · Affichages: 39

chris

XLDnaute Barbatruc
RE

J'ai converti

Voici le fichier xls avec
  • un onglet Tech pour indiquer le chemin du ficher html
  • un onglet résultat a exporter en csv
A noter que dans ton exemple Prototype, certaines dates étaient inversées

Dans PowerQuery :
  • 2 requêtes
    • un exemple qui a permis de voir comment récupérer un tableau exploitable et de créer une fonction adaptée
    • la requête qui traite
  • la fonction qui aide au traitement (notamment parce que les en-têtes varient d'un tableau à l'autre dans le HTML)
 

Pièces jointes

  • HTML.xlsx
    23.1 KB · Affichages: 4

debenexcel

XLDnaute Nouveau
Bonjour,
J'ai fait un test et ça a l'air bien fonctionner!
Ca bogue dans 2 ou 3 lignes. j'ai constaté en faisant des tests que ces noms de produits commençant tous par des chiffres, ex. 100, 1000. J'ai reproduit le problème dans le fichier prototype. Ci-joint un exemple.
Enfin une petite demande . Comme j'ai plusieurs fichiers à convertir et n'ont pas tous le même nom , serait-il possible de déterminer la source du fichier dans le premier onglet au lieu de le modifier à chaque fois dans le code de PowerQuery.

Merci beaucoup pour ton aide!
 

Pièces jointes

  • Capture.PNG
    Capture.PNG
    82.9 KB · Affichages: 36

chris

XLDnaute Barbatruc
Bonjour

Le fichier prototype que tu as fourni ne contient pas ces lignes

Il faudrait un fichier plus représentatif...

Si pour 100, c'est logique par rapport au traitement, 1000 m'étonne

Comme il y a alternance aléatoire de lignes, il faut reconnaitre les lignes qui correspondent à un code de celles qui correspondent au nom du produit
J'ai testé les 4 premiers caractères (donc 1000 doit passer)
On peut descendre à 3, ou bien peut-il y a voir moins ?

Oui on peut prévoir soit une seule cellule avec chemin et nom, soit 2 cellules : à préciser
On peut aussi mettre bout à bout tous les html d'un dossier
 
Dernière édition:

debenexcel

XLDnaute Nouveau
Bonjour,
Le problème se produit pour les noms de produits contenant au début du nom un numéro de plus de 2 chiffres, ex. 100, 1000, 40000, etc.
Ci-joint un nouveau fichier plus représentatif.
Désolé pour les inconvénients.
Il serait mieux d'avoir 2 cellules, une pour le nom de dossier, et une pour le nom de fichier, car mes fichiers sont éparpillés dans plusieurs endroits.

Merci pour ton aide!
 

Pièces jointes

  • PrototypeV2.zip
    1.8 KB · Affichages: 4

chris

XLDnaute Barbatruc
RE

J'avais compris l'inverse
Je peux admettre jusquà 8 caractères numériques en début de produit

Mais du coup avec ton multipost je ne sais plus quoi penser
Tu dis là bas que les fichiers sont différents (alors que le zip posté hier quasi à la même heure sur les 2 forums est le même) et que la solution PowerQuery ne marche pas...
 

debenexcel

XLDnaute Nouveau
Re
Bonjour,
J'ai fait quelques tests et le code fonctionne bien dans l'ensemble. J'ai rencontré un tout petit problème dans quelques lignes contenant @ dans le nom de modèle. Voir ligne 6 dans le fichier ci-joint. Je pourrais les effacer dans les fichiers si ca bogue, mais si le changement dans le code est possible ce serait génial.
Et le gros problème reste l'encodage, c'est compliqué de modifier chaque fichier avec bloc notes. En plus il exporte le csv en ANSI, même pas en UTF-8 :(. Existe-t-il une solution avec PowerQuery d'importer les fichiers avec leur encodage par défaut ISO-8859-1 et les exporter en UTF-8, ou au moins juste les exporter en UTF-8 après modification de leur encodage dans la source?
Un grand merci pour ta précieuse aide!
 

Pièces jointes

  • PrototypeV3.zip
    1.8 KB · Affichages: 4

chris

XLDnaute Barbatruc
RE

Pour le caractère je l'ai mis en paramètre

Il peut être nécessaire de modifier les paramètres de PowerQuery
Fichier, Options et paramètres, Options de requête, Classeur Actif, Confidentialité : doit être ignorer les niveaux de confidentialité

Par contre pour le html il n'est pas prévu de spécifier le codage du fichier importé.
Alors que c'est possible pour d'autres formats, je n'ai rien trouvé concernant le format HTML.
 

Pièces jointes

  • HTML.xlsx
    24.1 KB · Affichages: 8

Discussions similaires

Réponses
2
Affichages
245
Réponses
9
Affichages
148

Statistiques des forums

Discussions
312 069
Messages
2 085 042
Membres
102 765
dernier inscrit
richdi