Signaler

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

Posez votre question josep-t - Dernière réponse le 12 avril 2017 à 13:02 par josep-t
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 :)
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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 :)
josep-t- 11 avril 2017 à 13:55
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

Répondre
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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...
Donnez votre avis
Utile
+0
plus moins
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

Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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

Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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 +
Donnez votre avis
Utile
+0
plus moins
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 :)
Donnez votre avis
Utile
+0
plus moins
Contente que vous vous en soyez sorti.
Pour la dernière question, voir cette page

http://www.lecfomasque.com/excel-vos-entetes-de-colonnes-presentent-des-chiffres-au-lieu-des-lettres/

ou celle-là :

https://support.microsoft.com/fr-ca/help/269866/columns-and-rows-are-labeled-numerically-in-excel

Bonne fin de journée
josep-t- 12 avril 2017 à 13:02
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 :)
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !