Générer une page html avec l'adresse de toutes mes cellules [Résolu]

josep-t - 11 avril 2017 à 10:35 - Dernière réponse :  josep-t
- 12 avril 2017 à 13:02
Bonjour,

Comme l'indique le titre, avec une macro, j'aimerai générer une page html avec l'adresse de toutes mes cellules, et ceci pour chaque feuilles de mon classeur. Je sais le faire pour une adresse, mais quand il s'agit d'afficher plusieurs adresse dans mon fichier html, c'est là que ça devient compliqué.

Voici mon code :


Sub Html1()

Dim fs As Object
Dim i As Byte
Dim j As Byte


For i = 1 To Sheets.Count
For j = 7 To 10

Set fs = CreateObject("Scripting.FileSystemObject")

Dim f As Object

Set f = fs.opentextfile("myFile" & i & ".html", 2, True)
Sheets(i).Activate

f.writeline "<html>"

f.writeline "<head>"

f.writeline "<title>Macro</title>"

f.writeline "</head>"

f.writeline "<body>"

f.writeline " <a href=""" rel="nofollow noopener noreferrer" target="_blank" & Cells(j, 10) & """>" & Cells(j, 7) & "</a>"

f.writeline "</body>"

f.writeline "</html>"

f.Close
Next j
Next i
End Sub



Dans mon fichier excel, j'ai dans une colonne, un nom, et en face, dans une autre colonne, une adresse. Ce nom pointe en fait vers cette adresse. Dans mon code, J'ai alors essayé de rajouter une boucle j pour qu'il y ait 4 adresses dans mon fichier html. Malheureusement, on ne voit toujours qu'une seule adresse, et c'est la dernière qu'il prend en compte, donc la cellule (10,7) associé à son adresse de la cellule (10,10).

Quelqu'un aurait-il une idée?

Merci d'avance :)
Afficher la suite 

14 réponses

Répondre au sujet
patty5046 31 Messages postés lundi 8 février 2016Date d'inscription 22 décembre 2017 Dernière intervention - 11 avril 2017 à 11:29
0
Utile
Bonjour

Peut-être tout simplement mettre la boucle j comme ceci,

For j = 7 To 10
f.writeline "  <a href=""" rel="nofollow noopener noreferrer" target="_blank" & Cells(j, 10) & """>" & Cells(j, 7) & "</a>
Nextj"


si j'ai bien compris ce que vous souhaitez
Bon courage
Commenter la réponse de patty5046
0
Utile
1
Bonjour patty5046,

Déjà merci de ta réponse. Désolé premièrement, la copie de mon code ne s'est pas bien effectuée, la ligne de mon code était seulement :

f.writeline " <a href=""" rel="nofollow noopener noreferrer" target="_blank" & Cells(j, 10) & """>" & Cells(j, 7) & "</a>"


J'ai essayé ce que tu m'a dis mais j'ai une erreur à cette ligne là qui s'affiche : "Incompatibilité de type"

Merci encore de ton aide :)
J'ai réussi à boucler sur les 4 lignes contenant mes adresses. Cependant je ne sais pas comment appliquer cela à toutes mes cellules qui ne sont pas vide. J'ai essayé avec "Cells.Value" sans succès.
Voici mon code :

Sub Html1()

Dim fs As Object
Dim i As Byte
Dim j As Long


For i = 1 To Sheets.Count

Set fs = CreateObject("Scripting.FileSystemObject")

Dim f As Object

Set f = fs.opentextfile("myFile" & i & ".html", 2, True)
Sheets(i).Activate



f.writeline "<html>"

f.writeline "<head>"

f.writeline "<title>Macro</title>"

f.writeline "</head>"

f.writeline "<body>"

For j = 7 To Cells.Value

f.writeline "<br>"
f.writeline " <a href=""" rel="nofollow noopener noreferrer" target="_blank" & Cells(j, 10) & """>" & Cells(j, 7) & "</a>"
Next j
f.writeline "</br>"

f.writeline "</body>"

f.writeline "</html>"

f.Close
Next i
End Sub

Commenter la réponse de josep-t
patty5046 31 Messages postés lundi 8 février 2016Date d'inscription 22 décembre 2017 Dernière intervention - 11 avril 2017 à 16:00
0
Utile
Rebonjour

Apparemment tu pars de la ligne 7, tu dois donc compter le nombre de lignes chargées à partir de la ligne 7 dans la colonne qui t'intéresse ,soit la colonne 7 (G), soit la colonne 10 (J) et tu remplaces Cells.Value par ce résultat.

Bon courage
Commenter la réponse de patty5046
0
Utile
Merci pour votre réponse, mais pouvez vous expliciter? Cela veut dire que je dois rajouter encore une autre boucle?
Désolé je viens de débuter il y a 1 semaine dans les macros...
Commenter la réponse de josep-t
0
Utile
J'avais trouvé cela, mais il doit y avoir une meilleur façon car si il y a une ligne qui dépasse 300 je vais la manqué

Sub Html1()

Dim fs As Object
Dim i As Byte
Dim j As Long


For i = 1 To Sheets.Count

Set fs = CreateObject("Scripting.FileSystemObject")

Dim f As Object

Set f = fs.opentextfile("myFile" & i & ".html", 2, True)
Sheets(i).Activate



f.writeline "<html>"

f.writeline "<head>"

f.writeline "<title>Macro</title>"

f.writeline "</head>"

f.writeline "<body>"

For j = 7 To 300
If Not IsEmpty(Cells(j, 7)) Then
f.writeline "<br>"
f.writeline " <a href=""" rel="nofollow noopener noreferrer" target="_blank" & Cells(j, 10) & """>" & Cells(j, 7) & "</a>"
End If
Next j
f.writeline "</br>"

f.writeline "</body>"

f.writeline "</html>"

f.Close
Next i
End Sub

Commenter la réponse de josep-t
patty5046 31 Messages postés lundi 8 février 2016Date d'inscription 22 décembre 2017 Dernière intervention - 12 avril 2017 à 10:33
0
Utile
Bonjour

Si c'est la colonne G qui prime

pour obtenir le nombre de lignes de cette colonne, tu écris en début de procédure :

NbLig = Range("G65536" ).End(xlUp).Row 


Si c'est la J :

NbLig = Range("J65536" ).End(xlUp).Row 


ensuite tu remplaces le nombre 300 par NbLig

Bon courage
Commenter la réponse de patty5046
0
Utile
Cela compte toutes les lignes ou seulement celles qui sont chargés? J'ai essayé de rajouter votre formule dans mon code en l'adaptant à ma colonne qui contient les noms, mais maintenant j'obtiens une page vierge :/


Sub Html1()

Dim fs As Object
Dim i As Byte
Dim j As Long


For i = 1 To Sheets.Count

Set fs = CreateObject("Scripting.FileSystemObject")

Dim f As Object

Set f = fs.opentextfile("myFile" & i & ".html", 2, True)
Sheets(i).Activate



f.writeline "<html>"

f.writeline "<head>"

f.writeline "<title>Macro</title>"

f.writeline "</head>"

f.writeline "<body>"

NbLig = Range("C7").End(xlUp).Row
For j = 7 To NbLig
f.writeline "<br>"
f.writeline " <a href=""" rel="nofollow noopener noreferrer" target="_blank" & Cells(j, 10) & """>" & Cells(j, 7) & "</a>"
Next j
f.writeline "</br>"

f.writeline "</body>"

f.writeline "</html>"

f.Close
Next i
End Sub

Commenter la réponse de josep-t
patty5046 31 Messages postés lundi 8 février 2016Date d'inscription 22 décembre 2017 Dernière intervention - 12 avril 2017 à 11:06
0
Utile
Vous avez mis :

Range("C7").End(xlUp).Row

au lieu de
Range("C65536").End(xlUp).Row


donc votre nombre de lignes n'est que le nombre de lignes chargées au dessus le la ligne 7

Bonne continuation
Commenter la réponse de patty5046
0
Utile
Merci beaucoup pour votre aide, mais j'obtiens le même résultat précédent :


Sub Html1()

Dim fs As Object
Dim i As Byte
Dim j As Long


For i = 1 To Sheets.Count

Set fs = CreateObject("Scripting.FileSystemObject")

Dim f As Object

Set f = fs.opentextfile("myFile" & i & ".html", 2, True)
Sheets(i).Activate



f.writeline "<html>"

f.writeline "<head>"

f.writeline "<title>Macro</title>"

f.writeline "</head>"

f.writeline "<body>"

NbLig = Range("C65536").End(xlUp).Row
For j = 7 To NbLig
f.writeline "<br>"
f.writeline " <a href=""" rel="nofollow noopener noreferrer" target="_blank" & Cells(j, 10) & """>" & Cells(j, 7) & "</a>"
Next j
f.writeline "</br>"

f.writeline "</body>"

f.writeline "</html>"

f.Close
Next i
End Sub
Commenter la réponse de josep-t
patty5046 31 Messages postés lundi 8 février 2016Date d'inscription 22 décembre 2017 Dernière intervention - 12 avril 2017 à 11:31
0
Utile
Votre colonne C est-elle chargée?

Pour contrôler votre travail, mettez un msgbox et essayez peut-être avec colonne G :
NbLig = Range("G65536").End(xlUp).Row
MsgBox NbLig


N'ayant pas le fichier, je travaille un peu à l'aveugle
A +
Commenter la réponse de patty5046
0
Utile
Merci beaucoup pour votre aide ça marche ! je m'étais trompé car je ne sais pas pourquoi mais dans excel, mes colonnes sont indiqués par des numéros et non par des lettres, j'ai en fait : "C1, C2, C3 (...)" et ainsi de suite pour les colonnes donc ça ne pouvait pas marcher avec "C65536".

Pour information savez-vous comment modifier ça qui est selon moi source d'erreurs?

Merci encore pour votre précieuse aide! Si vous ne pouvez pas répondre à ma dernière question je met en résolu c'est pas grave, car ce n'était pas le sujet :)
Commenter la réponse de josep-t
patty5046 31 Messages postés lundi 8 février 2016Date d'inscription 22 décembre 2017 Dernière intervention - 12 avril 2017 à 12:32
Merci j'ai réussi pour les chiffres des colonnes qui étaient à la place des lettres.

Merci beaucoup pour y avoir passé du temps et m'apporter votre aide, je vous en suis très reconnaissant, bonne fin de journée à vous aussi :)
Commenter la réponse de patty5046