Créer un fichier html

cs_coocoon Messages postés 2 Date d'inscription samedi 10 décembre 2005 Statut Membre Dernière intervention 11 décembre 2005 - 10 déc. 2005 à 22:29
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 - 13 déc. 2005 à 04:57
Bonsoir à toutes et à tous !
Après avoir utilisé la fonction rechercher je n'ai rien trouvé alors j'espere qu'en vous posant mon probleme qqun pourra peut-être éclairer ma lanterne...
Je suis en 2e année de sciences du langage et j'ai ce devoir en informatique qui doit être fait en vba (http://img497.imageshack.us/my.php?image=consigne8ln.jpg).
Je vous avouerai que je ne suis pas très forte en vba. Après avoir réussie la question a) je suis bloquée . j'ai beau relire mes cours et chercher sur le net je n'y arrive pas.
est-ce que quelqu'un aurait la gentillesse de me donner un petit coup de pouce ou une piste sur laquelle m'engager pour faire les questions b) c) et d)?
je vous remercie d'avance.
Elodie

4 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
11 déc. 2005 à 08:29
C'est plutôt vague comme énoncé ça !!!
Que sais-tu faire ? Que veux-t-il que vous sachiez faire (que vous lui prouviez donc) ?
Par exemple : Sais-tu créer un fichier quelconque (avec Open ... For Input As #canal) ?
Et si oui, connais-tu le FSO (File System Object) ?

Bref, par quelles astuces veut-il que vous arriviez à ces fins ? Parce qu'en VBA, les astuces, ce n'est pas ce qui manque (contrairement aux livres les recensant) !!!

Le dernier point me semble être le plus facile... via les fonctions du type Split, Replace et cie.
Pour le deuxième point, rien de plus simple : Il faut créer une fenêtre utilisateur!
Ou alors gruger via une simple MsgBox "OUI/NON" ou "OK/ANNULER" et un message du style "... cliquez sur 'Oui' pour HTML et 'Non' pour RTF... Mais une fenêtre utilisateur seraît bien plus propre!
Evidemment, il faudra mémoriser le choix de l'utilisateur (fait via des Options et non des Checks!) dans une variable Globale (déclarée en début de code de feuille voir dans un module commun au classeur...).

Le point 3 et 4 sont, je pense, à faire dans le même temps. Il faut, à mon sens, ouvrir les deux fichiers en même temps (d'entrée [source] et de sortie [destination]) :

varCanalSource = FreeFile
Open fichierEntrée For Input As #varCanalSource

varCanalSortie = FreeFile
Open fichierSortie For Ouput As #varCanalSortie

...
Do While Not EOF(varCanalSource)
Input #varCanalSource,
varTemp
If Recherche(Mot)=Oui dans varTemp Alors
Call MettreEnGras(varTemp)

Select Case
varChoix



Case "RTF"

Print #varCanalSortie, varResultatRTF

Case "HTML"


Print #varCanalSortie, varResultatHTML


End Select


End If

Loop
...

Close #varCanalSortie
Close #varCanalSource

Private Sub
MettreEnGras(ByVal txtSource As String)
'Rechercher chaque occurence et l'emplacement du caractère
'Avec MID, prendre le texte avant puis ajouter BOLD en fonction du choix (RTF/HTML)
'puis ajouter occurence puis recommencer
'Ajouter la fin...
End Sub

Allez, a toi de jouer ... On va quand même pas tout te faire non plus

(Nota Bene : Les majuscules en début de ligne ne sont pas facultatives!!!)

Enjoy


<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
cs_coocoon Messages postés 2 Date d'inscription samedi 10 décembre 2005 Statut Membre Dernière intervention 11 décembre 2005
11 déc. 2005 à 21:26
chouette une réponse ! sincérement merci ScSami
le sujet original est la http://img203.imageshack.us/my.php?image=numriser8bl.jpg
bin je confirme je suis nul en vba je ne comprends presque rien à ce qu'il y a de marqué...
pour l'instant j'en suis là


Sub Filtragea()


Open ""fichier0"" For Input As 1


Open ""fichier1" For Output As 2


rech$ = InputBox("entrez une forme", "filtrage", "république")





Print #2, "{\rtfl\ansi "


Print #2, "{\b essai}"


Print #2, "{\par}"


While (EOF(1) = 0)


Line Input #1, a$


k = InStr(a$, rech$)


If k > 0 Then


Print #2, a$


Print #2, "{\par}"


End If


Wend


Print #2, "}"


Close (1)


Close (2)














End Sub








Sub Filtrageb()


Open ""fichier0"" For Input As 1


Open ""fichier1" For Output As 2


rech$ = InputBox("entrez une forme", "filtrage", "république")


demand$ = InputBox("Voulez-vous vos résultats en rtf ou html?")


If demand$ = "rtf" Then


Entete1 = "{\rtfl\ansi "


debgras = "{\b"


Else if demand$="html"

et je suis bloqué là... et je te remercie encore une fois de m'avoir consacrée un peu de ton temps

Elodie
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
13 déc. 2005 à 04:28
Open "chemin et nom du fichier d'entrée" For Input As #1
Open "
chemin et nom du fichier de sortie" For Output As #2

varRecherche$ = InputBox("Entrez une forme :", "Filtrage", "République")

'Choix du format, soit par une User_Form, soit par une MsgBox comme ceci :
'vbNewLine est une constante intrinsèque de VisualBASIC représentant une retour chariot (CR)
'Le symbole "&" concatène des chaines de caractères tout comme "+" mais c'est plus propre!
varMsg$ = "Le format de sortie par défaut du fichier est RTF." & vbNewLine
varMsg$ = varMsg$ & "Préférez-vous utiliser plutôt le format HTML à la place ?"
'Affiche une fenêtre avec l'icône "?" (vbQuestion) et les 2 boutons "Yes/No".
varReponse = MsgBox$(varMsg, vbYesNo + vbQuestion, "Choix du format de sortie")

'Initialisation de l'en-tête du document selon le format :
If varReponse = vbNo Then
'Format RTF
Print #2, "{\rtfl\ansi ...
"
Else
'Format HTML
Print #2, "<html>"
Print #2, " <head>"

Print #2, "
<title>Résultat de filtrage</title>"

Print #2, "
</head>"

Print #2, "
"
End If

While (EOF(1) = 0)
Line Input #1, varLigneTexte$
If InStr(
varLigneTexte$, varRecherche$) > 0 Then

'Découpage de la phrase pour mettre la graisse

varNewLigne$ = ""
While Len(varLigneTexte$) > 0
varPosCaraRecherche = InStr(varLigneTexet$, varRecherche$)
If varPosCaraRecherche > 1 Then
varNewLigne$ = Mid$(varLigneTexte$, 1, varPosCaraRecherche - 1)

'Ajoute la graisse et la forme recherchée
'Le caractère "_" permet d'écrire une ligne de code sur plusieurs lignes physiques.

varNewLigne$ = varNewLigne$ & _
Iif(varReponse = False, "{\b ", "") & _
Mid$(varLigneTexte$, varPosCaraRecherche, Len(varRecherche$))
If Len(varLigneTexte$) > 0 Then

'On enlève à la source ce qu'on vient d'ajouter à la sortie.
varLigneTexte$ = Mid(varLigneTexte$, _
varPosCaraRecherche + Len(varRecherche$), _
Len(varLigneTexte$) - (varPosCaraRecherche + Len(varRecherche$) )
End If
Else
If Len(varLigneTexte$) > 0 Then

'On termine le découpage...

varNewLigne$ = varNewLigne$ & varLigneTexte$
varLigneTexte$ = ""
End If
End If
Wend

Print #2, varNewLigne$

End If

Wend

If varReponse = False Then
'RTF
Print #2, "}"
Else

'HTML
Print #2, ""
End If

Close #1
Close #2

End Sub

Voilli voilou, et je l'ai même colorisé manuellement alors, s'il te plaît, donne toi la peinne de l'étudier et de le tester car je ne l'ai pas fait (puisqu'on est hors contexte). Il se peut donc qu'il ai un ou deux petits bugs mais dans l'ensemble je pense qu'il doit être au poil (même si je n'en jurerais pas sur ma vie!). De plus, c'est à toi de l'adapter à tes besoins concrêts (nom de fichiers, de fenêtres, de variables, ...).

Bon, si tu as la moindre question sur quoi que ce soit, je reste à ton service, alors, n'hésite pas... Et apprends toute seule... fait marcher tes méninges...

Enjoy
<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
13 déc. 2005 à 04:57
Oui, juste quelques explications :

Déjà, sur la manière de lire le code... Tout code comporte des redondances apparentes mais attention aux petites différences qui font toute la différence. En effet, écrire du code c'est bien souvent faire du copier/coller puis de légères modifications.
Pour lire le code essaie de le traduire en français.
Par exemple, cette ligne de code :

varLigneTexte$ = Mid(varLigneTexte$, _
varPosCaraRecherche + Len(varRecherche$), _
Len(varLigneTexte$) - (varPosCaraRecherche + Len(varRecherche$) )
Donnera, en bon français, tout simplement :
La phrase est égale à la portion (Mid) d'elle même (
varLigneTexte$) qui débute après la première occurence (InStr oblige) du mot recherché (varPosCaraRecherche + Len(varRecherche$) ) et se termine à la fin de la phrase (taille du texte totale moins taille jusqu'a la fin du mot recherché).
Autrement dit :
La phrase est maintenant égale à ce qui n'a pas encore été analysé :

varLigneText$ = bla bla bla motRecherché bla bla bla
A B C
A + B varPosCaraRecherche + Len(varRecherche$)
Len(varLigneTexte$) - (varPosCaraRecherche + Len(varRecherche$) )
II
v
[varLigneTexte$(A+B+C)] - [A+B] = C
tout simplement !

Bref, tout ça pour te dire que ça peut paraître compliqué (vu la taille des lignes) mais qu'en réalité c'est on ne peu plus simple si on sait lire ça correctement (en faisant abstraction des informations inutiles et en synthétisant les autres tout en gardant une vision globale des actions en cours). Apprend à garder toujours une distance appréciable face aux programmes. Un programme c'est quelque chose qui va en profondeur. Il faut donc comprendre le role des grand blocs pour comprendre l'ensemble. Ensuite, et ensuite seulement, tu peux décortiquer chaque bloque afin de le comprendre (comprendre son rôle puis après seulement sa structure concrête).
Ne fait pas l'erreur de lire les programme en partant des petites lignes.

Par exemple, pour comprendre le pourquoi du teste des While il faut souvent lire jusqu'a la fin puis revenir à ce même While. Mais si tu ne garde pas une certaine distance face à l'opération à exécuter, tu ne pourras jamais comprendre le pourquoi du teste du While (plutôt qu'autre chose) !

Note encore qu'en prog on peut souvent faire la même chose de 10'000 façons différentes. Bien que certaines façons soient préférables à d'autres, 1+1=2 est pareil que 2=1+1 ou que 2-1=1 ou 1=2-1 !!!

Bon, dans le programme, s'il y a des fonctions que tu ne connais pas, que tu n'as pas étudiées et que tu ne piges pas, demande moi ou regarde dans l'aide du VBA.

Note que "Iif" est une forme spéciale de "If". Elle permet d'écrire en ligne et de manière plus simple pour celui qui la connait. Mais en fait c'est une fonction. Autrement dit, elle retourne un résultat contrairement à If qui est une instruction (qui se contente d'agir, d'orienter le déroulement du programme). A toi de remettre l'ancienne forme si ça te plaît pas mais je tien à te prévenir : elle demandera beaucoup plus lignes de codes et tu y perdras en clareté.

Un dernier conseil pour la route : n'utilise rien que tu ne comprennes pas si tu veux pas que ça te retombe sur le coin de la gueule ! Ta prof se rendra tout de suite compte si tu as utilisé un truc que tu ne comprends et/ou ne maitrise pas (ce qui est bien pareil à y réfléchir bien!).

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
Rejoignez-nous