Macro Excel pour générer des fichiers HTML rempli à partir de données Excel
Bonjour,
Je suis tout nouveau dans la réalisation de projet sous excel et j'essaie de trouver une solution à mon problème en utilisant une macro.
Mon objectif est de générer des fichiers HTML à partir des données contenues dans tableau excel (2016).
Je m'explique. J'ai un fichier HTML "modèle" dans lequel j'ai insérer des "balises" (nom, prénom, fonction, site, telephone etc) dans le texte.
Ensuite j'ai un tableau excel avec plusieurs colonnes représentant les fameuses balises, et chaque ligne de ce tableau correspond à une personne.
Le but est vous l'aurez compris de générer un fichier HTML par personne en remplaçant pour chaque fichier les balises par le contenu correspondant dans la ligne.
J'ai fais la manipulation avec un publipostage word qui m'a donné un fichier txt avec tous les codes html à la suite. Il me faut donc ensuite découper ce fichier toutes les x lignes pour avoir des fichiers séparés et ensuite renommer les fichiers avec un autre programme. Enfin bref c'est un peu long et fastidieux. Mais ça marche.
J'ai vu qu'on pouvait créer et écrire dans un fichier via la création d'un module avec Print (vu sur le site de microsoft) mais je n'arrive pas à trouver un code afin d'intégrer les données du tableau en disant "pour chaque ligne, créer un fichier html dont le nom est nom-prenom.html, et remplacer les balises par le contenu de la cellule correspondante"
Je sais que je ne suis pas très avancé mais encore une fois je suis au début de mon apprentissage on va dire
Sub CreateHTML()
'Define your variables.
Dim iRow As Long
Dim iStage As Integer
Dim iCounter As Integer
Dim iPage As Integer
'Create an .htm file in the same directory as your active workbook.
Dim sFile As String
sFile = ActiveWorkbook.Path & "\test.htm"
Close
'Open up the temp HTML file and format the header.
Open sFile For Output As #1
Print #1, "<html>"
Print #1, "<head>"
Print #1, "<style type=""text/css"">"
Print #1, " body { font-size:12px;font-family:tahoma } "
Print #1, "</style>"
Print #1, "</head>"
Print #1, "<body>"
Hello,
Je suis de passage donc je ne pourrai pas te proposer une solution de bout en bout...
Cependant je peux t'aider
On peut modifier le format d'un fichier xlsx vers un html en faisant enregistrer sous.
On peut récupérer une plage de cellule uniquement.
Le code fourni par l'enregistreur de macro (si tu ne sais pas ce que c'est fais un tour sur le site ça pourra t'aider pour beaucoup de choses ) donne ceci :
Sub Macro1()
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
"C:\Users\TON_REPERTOIRE\Classeur10000.html", "Feuil1", "$A$1:$C$2", _
xlHtmlStatic, "Classeur1_9261", "")
.Publish (True)
.AutoRepublish = False
End With
ChDir "C:\Users\TON_REPERTOIRE"
Application.WindowState = xlNormal
End Sub
Il faudrait adapter ton répertoire + adapter ta plage de cellule.
Mettre le tout dans une boucle pour chaque ligne, par exemple en utilisant cette syntaxe :
while
wend
La petite particularité c'est qu'il faut masquer la ligne précédente pour ne pas la prendre en compte ... Par exemple on traite la ligne 3 ( la ligne 1 étant les en-têtes), il faut masquer la ligne 2 pour que notre plage commence par la ligne 3
Exemple :
Rows("2").Hidden = True
Donc je dirai un algo comme ça :
i = 2
while cells(i,1) <> ""
if i = 2 then
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
"C:\Users\TON_REPERTOIRE\classeur", "Feuil1", "$A$1:$C$"& i, _
xlHtmlStatic, "Classeur" & cells(i,1), "")
.Publish (True)
.AutoRepublish = False
End With
ChDir "C:\Users\TON_REPERTOIRE"
Application.WindowState = xlNormal
else
Rows(i-1).Hidden = True
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
"C:\Users\TON_REPERTOIRE\classeur", "Feuil1", "$A$1:$C$"& i, _
xlHtmlStatic, "Classeur1_9261"& cells(i,1), "")
.Publish (True)
.AutoRepublish = False
End With
ChDir "C:\Users\TON_REPERTOIRE"
Application.WindowState = xlNormal
end if
i = i+1
wend
A tester ou s'inspirer.
R@g