OVH Cloud OVH Cloud

macros access

3 réponses
Avatar
jcp
Bonsoir
J'ai un fichier excel avec une macro qui crée des fichiers html.
Je voudrais transposer ce fichier sous access , mais ce que je ne sais pas
faire c'est transposer la macro.
Voici un exemple de ma macro excel

fichtml = repsite + "\" + fichenom + ".htm"
fichtml = repsite + soldatcodesoldat + ".htm"
fichtml = LCase(fichtml)
Open fichtml For Output As 1
Print #1, "<html>" & Chr$(13)
Print #1, "" & Chr$(13)
Print #1, " <head>" & Chr$(13)
Print #1, "" & Chr$(13)
Print #1, " <title>"; titresite; "</title>" & Chr$(13)
.....................

Est il possible d'écrire l'équivalent sous access et si oui connaissez vous
un site qui puisse m'aider.

Merci
Cordialement

jcp

3 réponses

Avatar
3stone
Salut,

"jcp"
| J'ai un fichier excel avec une macro qui crée des fichiers html.
| Je voudrais transposer ce fichier sous access , mais ce que je ne sais pas
| faire c'est transposer la macro.
| Voici un exemple de ma macro excel
|
| fichtml = repsite + "" + fichenom + ".htm"
| fichtml = repsite + soldatcodesoldat + ".htm"
| fichtml = LCase(fichtml)
| Open fichtml For Output As 1
| Print #1, "<html>" & Chr$(13)
| Print #1, "" & Chr$(13)
| Print #1, " <head>" & Chr$(13)
| Print #1, "" & Chr$(13)
| Print #1, " <title>"; titresite; "</title>" & Chr$(13)
| .....................
|
| Est il possible d'écrire l'équivalent sous access et si oui connaissez vous
| un site qui puisse m'aider.


Pour commencer, le signe de concaténation de chaîne n'est pas "+" pour
Access, mais bien le "&" (le + c'est pour les addition ;-)

Le code Print #1, "" & chr(13) est très crado !

Print #1, "<br />" serait plus dans la norme.




Voici (un extrait) de ce que j'utilise depuis un moment...
(Je n'ai pas besoin de l'en-tête du fichier html ;-)
et que tu devra ajouter au besoin.


'================ début code ===========
'--- Ouvrir la requête
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset(sRequete)

'--- Création du fichier
f = FreeFile
Open sChemin & "Equipe.htm" For Output As f
Print #f, "<table alignÎnter border=" & iBordure & " cellpadding=" & iDegagement & ">";
Print #f, "<th colspan=9><h3>Equipes - Mannschaften</h3></th>";

iSerie = 0: iPlace = 1

Do '--- boucle sur les enregistrements

Print #f, "<tr>"; 'début ligne

If iSerie < rs!Ser Then 'crée la ligne "frontale"
iSerie = rs!Ser
iPlace = 1
If iSerie > 1 Then 'crée une séparation entre les équipes
Print #f, "<tr><th colSpan=9>~</th></tr>";
End If
Print #f, "<th rowspan=" & EquipeParSerie(iSerie) & ">Série : " & iSerie & "</th>";
End If

Print #f, "<td alignÎnter>" & iPlace & "</td>"; 'la place
Print #f, "<td align=left>" & rs![Nom_equipe] & "</td>"; 'le nom de l'équipe
For j = 1 To 5
Print #f, "<td align=right>" & rs("M" & j) & "</td>"; 'les manches
Next j
Print #f, "<td align=right>" & rs!Tot & "</td>"; 'le total
Print #f, "</tr>"; 'fin de ligne

'enregistement suivant
rs.MoveNext
iPlace = iPlace + 1
Loop Until rs.EOF

Print #f, "</table>"
Close #f
rs.Close: db.Close
Set rs = Nothing

'============= fin code ==============
Tu peux aussi t'aider du code suivant qui crée un simple
fichier texte au départ d'une source:
http://users.skynet.be/accesshome/ah_fichiers_generertxt.htm

Il suffit d'y ajouter les balises ad-hoc selon les indications
données plus haut ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
jcp
Bonsoir
Merci de ta réponse
Je ne connais pas grand chose à access et rien aux macros access.
Comment dois je faire pour entrer le code par exemple celui qui crée un
fichier texte.
Quand je suis sous access apres avoir ouvert la base j'ai les onglets :
tables, requetes, formulaires, etats, macros, modules
Quand je vais sous macos je ne vois pas comment entrer directement du code.
Quand je vais sous module, j'y arrive bien mais j'ai toujours executer en
grisé.

Merci de tes infos

cordialement
jclaude




"3stone" a écrit dans le message de news:

Salut,

"jcp"
| J'ai un fichier excel avec une macro qui crée des fichiers html.
| Je voudrais transposer ce fichier sous access , mais ce que je ne sais
pas
| faire c'est transposer la macro.
| Voici un exemple de ma macro excel
|
| fichtml = repsite + "" + fichenom + ".htm"
| fichtml = repsite + soldatcodesoldat + ".htm"
| fichtml = LCase(fichtml)
| Open fichtml For Output As 1
| Print #1, "<html>" & Chr$(13)
| Print #1, "" & Chr$(13)
| Print #1, " <head>" & Chr$(13)
| Print #1, "" & Chr$(13)
| Print #1, " <title>"; titresite; "</title>" & Chr$(13)
| .....................
|
| Est il possible d'écrire l'équivalent sous access et si oui connaissez
vous
| un site qui puisse m'aider.


Pour commencer, le signe de concaténation de chaîne n'est pas "+" pour
Access, mais bien le "&" (le + c'est pour les addition ;-)

Le code Print #1, "" & chr(13) est très crado !

Print #1, "<br />" serait plus dans la norme.




Voici (un extrait) de ce que j'utilise depuis un moment...
(Je n'ai pas besoin de l'en-tête du fichier html ;-)
et que tu devra ajouter au besoin.


'================ début code =========== >
'--- Ouvrir la requête
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset(sRequete)

'--- Création du fichier
f = FreeFile
Open sChemin & "Equipe.htm" For Output As f
Print #f, "<table alignÎnter border=" & iBordure & " cellpadding=" &
iDegagement & ">";
Print #f, "<th colspan=9><h3>Equipes - Mannschaften</h3></th>";

iSerie = 0: iPlace = 1

Do '--- boucle sur les enregistrements

Print #f, "<tr>"; 'début ligne

If iSerie < rs!Ser Then 'crée la ligne "frontale"
iSerie = rs!Ser
iPlace = 1
If iSerie > 1 Then 'crée une séparation entre les équipes
Print #f, "<tr><th colSpan=9>~</th></tr>";
End If
Print #f, "<th rowspan=" & EquipeParSerie(iSerie) & ">Série : "
& iSerie & "</th>";
End If

Print #f, "<td alignÎnter>" & iPlace & "</td>"; 'la
place
Print #f, "<td align=left>" & rs![Nom_equipe] & "</td>"; 'le nom
de l'équipe
For j = 1 To 5
Print #f, "<td align=right>" & rs("M" & j) & "</td>"; 'les
manches
Next j
Print #f, "<td align=right>" & rs!Tot & "</td>"; 'le total
Print #f, "</tr>"; 'fin de ligne

'enregistement suivant
rs.MoveNext
iPlace = iPlace + 1
Loop Until rs.EOF

Print #f, "</table>"
Close #f
rs.Close: db.Close
Set rs = Nothing

'============= fin code ============== >
Tu peux aussi t'aider du code suivant qui crée un simple
fichier texte au départ d'une source:
http://users.skynet.be/accesshome/ah_fichiers_generertxt.htm

Il suffit d'y ajouter les balises ad-hoc selon les indications
données plus haut ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/



Avatar
3stone
Salut,

"jcp"
| Je ne connais pas grand chose à access et rien aux macros access.
| Comment dois je faire pour entrer le code par exemple celui qui crée un
| fichier texte.
| Quand je suis sous access apres avoir ouvert la base j'ai les onglets :
| tables, requetes, formulaires, etats, macros, modules
| Quand je vais sous macos je ne vois pas comment entrer directement du code.
| Quand je vais sous module, j'y arrive bien mais j'ai toujours executer en
| grisé.


Effectivement... si tu en es là... ;-)


Pour commencer, ouble les "macro" sous access !

L'équivalent de ce qui existe sous Excel se nomme "module" !
(mais sans la fonction enregistreur :o)


Donc, les "modules VBA" de Access se placent soit dans un module
général, onglet module (il ne *s'exécute* pas en les appelant de là)
soit ils sont placer dans un formulaire (module de classe) et sont
appeler par un événement (clic de bouton, entrée ou sortie de textbox,
réception ou perte de focus et des dixaines d'autres ;-)
ou également par un autre module.

Il faut aussi distinguer les "Sub" et les "Function" !


Un module "généraliste" (qui est destiné à être appelé de n'importe
quel endroit de l'application sont de préférence placer dans
les modules généraux (onglet modules) et, s'il doivent retourner
une valeur - sont alors définis comme fonction !

Exemple de fonction inutile:

Function fnDateEnString( LaDate As Variant) As String
fnDateEnString = Nz(LaDate,"")
End Function

a partir de là, tu peux appeler cette fonction de n'importe quel
endroit de l'application, et même dans une requête...


Pour revenir à ta question (qui vaut un livre comme réponse ;-))
tu place la fonction donnée par le lien dans un module général
et comme il ne doit pas "retourner" une valeur, il peut être
une simple Sub (mais une fonction fait également l'affaire)


C'est un peu plus clair ?


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/