Générer des fichiers .txt/.html à partir d'une tableau .xls

Eythau

Nouveau membre
SAlut tt le monde ! j'ai déjà cherché un moment sur ce forum mais j'ai pas trouvé de solution à mon problème...

Je dois me taper 300 signatures format HTML et non, je vais pas les faire une par une :sarcastic:

Mon problème :

J'ai un fichier excel avec dans le champ A le nom du fichier .html à générer et dans le champ B le code du fichier correspondant.

Je souhaiterais une macro qui, pour chaque valeur trouvée dans le champ A va copier/coller le champ B vers un nouveau fichier ayant comme titre la valeur du champ A.

Visuellement :

A / B
pierre / <HTML>Mr Pierre dubois Orc lvl 2</HTML>
david / <HTML>Mr David Couiccou Troll lvl 5</HTML>

Je souhaite obtenir
- un fichier pierre.html avec la valeurs correspondant à Champ B dedans
- un fichier david.html avec la valeurs correspondant à Champ B dedans
etc.... avec autant de fichiers excel qu'il y a de valeurs dans la colonne A.

Je sens que c'est carrement possible et pas compliqué à coder, mais moi le VBA j'y connais rien, donc voilà

merci d'avance
 

zeb

Modérateur
Et non, nous ne faisons pas ton travail à ta place, c'est comme ça : [:spamafote]

Si tu racontes partout que je t'ai filé une soluce comme ça, je nierais tout en bloc et je jetterais un sort sur ton Windows Vista pour qu'il plante, Ah Ah Ah !!!!!
Code:
Dim ligne As Long
Dim cellA As String

For ligne = 1 To 65535
    cellA = Cells(ligne, 1).Text
    If cellA = "" Then Exit For
    Open cellA & ".html" For Output As #1
    Print #1, Cells(ligne, 2).Text
    Close #1
Next
 

Freeman23

Expert
lol, moi cette soluce elle me plait pas (puis j'ai pas vista) AH la la :lol:

Enfin ca doit fonctionner mais perso j'utilise les méthodes de Scripting.FileSystemObject.

Ca te permet de gérer des fichiers, en créer, vérifier leur existence, parcourir des répertoires etc.
 

zeb

Modérateur
Freeman23> +1

Stune bonne idée. Mais conviens-en, il faut installer MS Scripting Runtime, ou plus exactement le référencer, ce qui n'est pas fait par défaut.

Cette manière de faire est moderne et élégante. Elle a le défaut de ne pas être utilisable par défaut. En plus, ce n'est même pas du VB !!!!
 

Freeman23

Expert
Il me semble que c'est bien du VB...
Il n'y aucun referencement supplémentaire à faire.

Il suffit de chercher dans l'aide FileSystemObject et tu trouveras ceci.

Code:
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\fichiertest.txt", True)
a.WriteLine("Ceci est un test.")
a.Close
 

zeb

Modérateur
:ouch: Oh, t'es un vicelard, toi !
Tu te sers d'objets OLE !!!!!

Bah, ça marche, mais j'insiste, ce n'est pas du VB. J'ai même déjà utilisé ça en Delphi à l'époque.
(Tu peux aussi référencer MS Scripting Runtime et utiliser la bibliothèque Scripting sans avoir à créer des objets OLE.)
 

Eythau

Nouveau membre
Super merci, j'ai bien avancé grace à ce code :hello:

Je l'ai adapté un poil et j'ai des petits problèmes.

- "open" cré le fichier mais pas la chemin d'acces si celui-ci n'existe pas, ça renvoit un message d'erreur comme quoi le chemin est introuvable. Ma petite modification avait pour but d'enregistrer le fichier *.html dans le dossier personnel de l'utilisateur. Celà dit ce n'est pas bien grave je peux m'en sortir sans.

- Plus embêtant, Le contenu du fichier créé est des fois tronqué, il semblerai que c'est dans le cas où le code HTML contenu dans la cellule B depasse le millier de caractère (1024?). C'est le type "String" qui est limité à ce nb de charactère ? Il y a t'il un moyen de contourner ce problème ?

Voilà le code avec la petit modif que j'ai fait:

[cpp]Sub GenererUsers()

Dim ligne As Long
Dim cellA, Chemin As String

Chemin = InputBox("Chemin pour le fichier de signature sign***.html", "Nom Chemin ?")
For ligne = 2 To 65535
cellA = Cells(ligne, 1).Text
If cellA = "" Then Exit For
Open Chemin & "\Prive\" & cellA & "\signature\sign" & cellA & ".html" For Output As #1
Print #1, Cells(ligne, 2).Text
Close #1
Next

End Sub[/cpp]

En tous cas j'ai déjà gagné une semaine de copier/collé qui rend fou Aligato Gozaïmaska !
 

zeb

Modérateur
Dixit l'aide d'Excel:

String, type de données


Il existe deux types de chaînes : les chaînes de longueur variable et les chaînes de longueur fixe.

■ Les chaînes de longueur variable peuvent contenir environ 2 milliards (2^31) de caractères.

■ Les chaînes de longueur fixe peuvent contenir de 1 à environ 64 Ko (2^16) de caractères.

Note Une chaîne de longueur fixe déclarée comme Public ne peut pas être utilisée dans les modules de classe.

Les codes de caractères de type String sont compris entre 0 et 255. Les 128 premiers caractères (0 à 127) du jeu de caractères correspondent aux lettres et symboles d'un clavier américain standard. Ces 128 caractères sont identiques à ceux du jeu de caractères ASCII. Les 128 caractères suivants (128 à 255) représentent des caractères spéciaux, comme les lettres de certains alphabets, les accents, les symboles monétaires et les fractions. Le caractère de déclaration de type String est le signe $.


:/ Le problème ne semble pas venir du format String.

Pis [fixed]Dim cellA, Chemin As String[/fixed] Et [fixed]Dim cellA As String
Dim Chemin As String[/fixed] C'est différent !!
 

Eythau

Nouveau membre
J'ai trouvé une solution à mon problème de longueurs (qui ne pouvait pas venir du format String vu qu'à aucun moment la chain de charactère très longue ne passait dans une variable avec un tel format). J'ai disivé le code HTML en 3 parties et je copie les 3 parties à la suite dans le fichier, ça marche comme ça. Ca donne :

[cpp]Sub GenererUsers()

Dim ligne As Long
Dim cellA, Chemin As String

Chemin = InputBox("Veuillez entrer le lecteur où générer les fichiers *.html", "Générer sign*.html dans les dossiers V:\Signature")
For ligne = 2 To 65535
cellA = Cells(ligne, 1).Text
If cellA = "" Then Exit For
If Chemin = "" Then Exit For
Open Chemin & "\Prive\" & cellA & "\signature\sign" & cellA & ".html" For Output As #1
Print #1, Cells(ligne, 2).Text & Cells(ligne, 3).Text & Cells(ligne, 4).Text
Close #1
Next

End Sub[/cpp]

C'est Print #1, Cells(ligne, x) qui ne semble pouvoir "printer" que 1024 charactère max.


Pis

Dim cellA, Chemin As String

Et

Dim cellA As String
Dim Chemin As String

C'est différent !!

Mais encore ?


Sinon merci encore
 

zeb

Modérateur
[fixed]Dim cellA, Chemin As String [/fixed]
Ceci définit une variable cellA de type non spécifié, donc Variant et une variable Chemin de type String [:spamafote]
 

Freeman23

Expert
>Zeb +1 :merci:
Exact Zeb d'ailleur je l'ai appris que recemment à mes dépends sur un dev.

Pour se qui est des 1024 caratères j'ai déjà eu ce problème et il me semble que cela vient des cellules qui ne renvoie pas tout le texte. En fait sauf erreur, il me semble qu'elle peuvent stocker plus de 1024 caratères mais quand on demande la valeur c'est tronqué, enfin un truc dans le genre.
 

zeb

Modérateur
Après test, il semblerait que VBA n'accepte de renvoyer que 2^10-1 caractères, soit seulement 1023. Je n'ai pas encore trouvé trace de cette limite dans l'aide d'Excel.

Si la chaîne de caractères dépasse cette limite :
■ .Text est tronqué,
■ .Formula plante lamentablement.


Grilled: Bah, tu le savais, moi je viens de le découvrir ;)

EDIT: Comme quoi, ne pas confondre tableur et base de données :o
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 059
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut