IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Inserer image dans fichier RTF ou correcteur d'orthographe dans formulaire


Sujet :

VBA Word

  1. #1
    Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Janvier 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Janvier 2015
    Messages : 72
    Points : 43
    Points
    43
    Par défaut Inserer image dans fichier RTF ou correcteur d'orthographe dans formulaire
    Bonjour,

    En résumé, j'aimerai soit inclure un correcteur orthographique (avec le soulignement rouge) soit incorporer une image dans un fichier RTF.

    Topo de mes pérégrinations:
    Lors de l'impression d’états, certains champs comportent encore des fautes grossières évitables si le document avait été écrit avec word ou autre, grâce au correcteur d'orthographe.
    Afin d'y remédier j'ai cherché plusieurs solution mais sans succès... pour l'instant.
    J'ai cru que le publipostage allait solutionner le problème mais il ne corrige pas les champs. (ou alors je me trompe).
    J'ai ensuite appliqué le code Docmd.RunCommand acCmdSpelling sur mes formulaires mais c'est laid et fastidieux. (je veux vraiment que les textes se soulignent en rouge comme dans word).
    J'ai ensuite découvert l'export en RTF. C'est PARFAIT... ou presque.
    Le logo (obligatoire) n'est pas retranscrit dans le RTF.
    C'est alors que ça se complique :
    J'ai pensé à exécuter une macro qui viendrait insérer le logo une fois le rtf créé. Mais pas moyen de faire comprendre à Access d’exécuter un code vba qui agirait sur ce dit rtf.
    Je me suis dit ensuite qu'il suffisait de lancer un word existant contenant la macro, mais là, même problème je ne parviens pas à coder que la macro doit cibler le rtf.
    ------------
    Procédure :
    1) Bouton access qui lance une macro : ExporterAvecMiseEnForme (pour le RTF), ça c'est ok.
    2) J'ai ajouté à cette macro le lancement d'un word contenant une macro sur ouverture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim wordApp As Object
        Set wordApp = GetObject(, "Word.Application")
        wordApp.Run "'241.rtf  !NewMacros.InsertLogoaccess'"
    3) ps : la ligne problématique est bien sur le wordApp.Run, le 241.rtf est le nom test (qui sera remplacé par une variable quand le code fonctionnera), et InsertLogoaccess est la macro qui incorpore le logo


    ps4: Désolé si je ne suis pas dans le bon onglet, j'ai longuement hésité avec macro et word
    ET UN ÉNORME MERCI A VOUS, cela fait des jours que je cherche une solution.

    ps5: Un de mes profs disait que si une phrase commençait par "il suffit de ...", c'était mal parti. Et il avait raison.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Une fois que tu as "créé" une appli word, il faut faire des commandes Word.
    Donc ouvrir le fichier avec la commande Word (utilise l'enregistreur de macro de Word pour avoir le détail).
    Puis lancer la macro que tu as enregistrée dans Word.
    Le Run ne prend en paramètre que le nom de la macro et ses éventuels paramètre. Pas le nom du fichier.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Aussi peux-tu préciser quelle version d'Access tu utilises ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 956
    Points : 1 139
    Points
    1 139
    Par défaut Inserer image dans fichier RTF ou correcteur d'orthographe dans formulaire
    Si je peux me permettre une remarque,

    RTF = Rich Text Format (format de texte enrichi) => Pas d'images !!!

    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...

  5. #5
    Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Janvier 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Janvier 2015
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Une fois que tu as "créé" une appli word, il faut faire des commandes Word.
    Donc ouvrir le fichier avec la commande Word (utilise l'enregistreur de macro de Word pour avoir le détail).
    Puis lancer la macro que tu as enregistrée dans Word.
    Le Run ne prend en paramètre que le nom de la macro et ses éventuels paramètre. Pas le nom du fichier.

    A+
    COOL, tu m'as donné une bonne piste. Ca fonctionne maintenant, par contre il se fait tard et je ne parviens plus à lancer le fichier word depuis access.
    Je reteste mardi nuit. MERCI MERCI MERCI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Windows("fichierrtf.rtf [Mode de compatibilité]").Activate
        Selection.InlineShapes.AddPicture FileName:= _
            "adresse de l'image" _
            , LinkToFile:=False, SaveWithDocument:=True
        Windows("fichieraveclamacro.docm").Activate
    Citation Envoyé par marot_r Voir le message
    Aussi peux-tu préciser quelle version d'Access tu utilises ?
    J'ai une version 2007/2013 mais certains pc ont déjà la 2016.


    Citation Envoyé par Ric500 Voir le message
    Si je peux me permettre une remarque,

    RTF = Rich Text Format (format de texte enrichi) => Pas d'images !!!
    Une fois le fichier créé il est possible d'ajouter des images. J'ai bien sûr commencer par tester ma macro dans ce même rtf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Le code en simplifié]
    Dim Repertoire As String
    Dim Extension As String
    Dim Fichier As String
     Repertoire = "\\adresse du repertoire"
    Extension = ".png"
    Fichier = Dir(Repertoire & "logo" & Extension, vbDirectory)
     Selection.InlineShapes.AddPicture FileName:= _
            "\\adresse de l'image" _
            , LinkToFile:=False, SaveWithDocument:=True
    Merci à vous, je sens que je progresse

  6. #6
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 956
    Points : 1 139
    Points
    1 139
    Par défaut Inserer image dans fichier RTF ou correcteur d'orthographe dans formulaire
    Je suis plongé dans un abîîîme de réflexions !!!

    J'étais sûr de mon coup!

    Après test, effectivement on peut insérer depuis word une image dans un RTF, ce qui m'interpelle: je tenais çà pour acquis.
    J'ai moi-même un module d'emailing dans mon appli dont je sauvegarde les modèles dans une table et un champ au format mémo enrichi. L'idée d'y insérer des images, (logo, illustrations...) me séduit et se pose la question de la localisation de l'image dans le document.
    Mais suppose qu'il s'agit là d'un autre topic et que je vais me faire éjecter de celui-ci.
    Merci d'avoir éclairé ma lanterne, je vais continuer de creuser la question.
    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En réalité c'est pas si compliqué que cela!

    Tu insert ton logo en lieu et place dans un word vierge que tu enregistre en rtf.

    Un fois enregistré et refermé, tu l'ouvre avec nonpad et tu recherche la balise ouvrante et fermante de ton image qu'il faudra utiliser dans une fonction!

    Quand dans Access tu exporteras en rtf tu placeras à la place de ton image <logo> et tu exportera!

    Il te restera que ouvrir ton fichier en vba comme un ficher texte et remplacer <logo> par le résultat de la fonction précédent cité!

    Il faut que je cherche mais j'avais fait un convertisseur image -> base64 pour fichier rtf!

    Vue comme ça,j'en ai aucune idée, mais il est peut-être possible d'exporter un état Access en rtf? Dans ce cas plus de problème!
    Dernière modification par Invité ; 27/02/2018 à 07h23.

  8. #8
    Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Janvier 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Janvier 2015
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par dysorthographie Voir le message

    Un fois enregistré et refermé, tu l'ouvre avec nonpad et tu recherche la balise ouvrante et fermante de ton image qu'il faudra utiliser dans une fonction!

    Quand dans Access tu exporteras en rtf tu placeras à la place de ton image <logo> et tu exportera!

    Il te restera que ouvrir ton fichier en vba comme un ficher texte et remplacer <logo> par le résultat de la fonction précédent cité!!
    Salut Dysorthographie,

    Mon niveau Access/vba est nettement inférieur au tiens.
    Peux tu m'expliquer comment trouver les balises ouvrantes et fermantes de l'image? Je ne comprends presque rien au langage qu'affiche le notepad.
    J'ai repéré quelques mots clés qui peuvent m'aiguiller mais je m'y perd.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {\sp{\sn wzName}{\sv Image 1}}{\sp{\sn dhgt}{\sv 251658240}}{\sp{\sn fHidden}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}} ou 
    {\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw5027\pich2037\picwgoal2850\pichgoal1155\wmetafile8\bliptag1634844975\blipupi96{\*\blipuid 6171c12f1fabe130cfdc8b94b532c986} ou encore autre chose?
    Et une fois avoir localiser ces balises, de quelle fonction parles tu?

    Merci pour ces précisions,
    --------------
    Edit : à ma manière, après 5h de chipotage cela a fonctionné. Mais quand j'ai enregistré puis relancé un message d'erreur ("le membre de la collection requis n'existe pas") est apparu à cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("pv241.rtf [Mode de compatibilité]").Activate
    récapitulatif des étapes :
    1) Macro Access d'ExportationAvecMiseenForme (créé et ouvre le rtf)
    2) Macro Access d'ouverture du fichier word contenant la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Normal_Open()
       Application.Run MacroName:="Pv36macro_Open"
    End Sub
    3) Celle-ci lance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Pv36macro_Open()
    Dim Repertoire As String
    Dim Extension As String
    Dim Fichier As String
    Windows("pv241.rtf [Mode de compatibilité]").Activate
     Repertoire = "\\serveurA\Régie\bdd"
    'Saisie du type d'extension
    Extension = ".png"
    'Récupération du fichier du répertoire
    Fichier = Dir(Repertoire & "logo" & Extension, vbDirectory)
        'insertion de l'image
        Selection.InlineShapes.AddPicture FileName:= _
            "\\serveurA\Régie\bdd\logo.png" _
            , LinkToFile:=False, SaveWithDocument:=True
    End Sub
    _____________________
    Etant donné que cela a fonctionné juste avant que j'enregistre puis que cela n'a de nouveau plus fonctionné, je me demande de quelle collection parlent-ils et comment faire pour ajouter ces collections.
    Merci d'avance, je commence à devenir fou.

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Je viens de faire un texte avec mon Word 2007 et cela ressemble beaucoup à ta solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ThisDocument.InlineShapes.AddPicture _
        FileName:= "C:\Users\Utilisateur\Documents\Elena\DSCN1511.JPG", _
        LinkToFile:=False, SaveWithDocument:=True
    La diiférence c'est que j'ai changé Selection en ThisDocument qui est moins sensible à l'environnement.

    Qu'est-ce qui ne marche plus ?
    • Tu n'as aucun résultat ?
    • Tu n'as pas le résultat attendu ? Qu'était-il attendu ? Qu'as-tu obtenu ?
    • Tu as une erreurs ? Laquelle ?
    • Autre chose ? Quoi ?


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Invité
    Invité(e)
    Par défaut
    bonjour,

    j'ai créé un fichier RTF avec Word.

    \picw5953\pich5953\picwgoal3375\pichgoal3375\jpegblip\bliptag1866236986{\*\blipuid 6f3c843ae5cfb7aa91097c8326f67cd8}<[Logo]>}}{\nonshppict
    {\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw5953\pich5953\picwgoal3375\pichgoal3375\wmetafile8\bliptag1866236986\blipupi-96{\*\blipuid 6f3c843ae5cfb7aa91097c8326f67cd8}

    j'ouvre le fichier Rtf une fois créé en VBA, et je remplace ma pseudo balise <[LOGO]> par mon image converti en BAse64!

    wtxt = Replace(wtxt, "<[Logo]>", GetBinaryData(intResult))


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    Sub ImproterImage()
    Dim FichierImage As String
    Dim RepertoireAsp As String
    With Application.FileDialog(Array(msoFileDialogFilePicker, msoFileDialogSaveAs)(Abs(svAs)))
        .InitialFileName = "*.*"
        If Not svAs Then
            .AllowMultiSelect = False
            .Title = "Le fichier de Image"
            .InitialView = msoFileDialogViewDetails
            .Filters.Clear
            .Filters.Add "All", "*.*"
        End If
         If .Show - 1 Then
            For lngCount = 1 To .SelectedItems.Count
                intResult = .SelectedItems(lngCount)
                Exit For
            Next
        End If
     End With
    If intResult <> 0 Then
        Dim WinXp As New clsWindowsExporer, wtxt As String
        wtxt = WinXp.OuvrirFichier("C:\Users\rdurupt\Desktop\Dysorthographie.rtf")
       wtxt = Replace(wtxt, "<[Logo]>", GetBinaryData(intResult))
        WinXp.Supprimer_Fichier "C:\Users\rdurupt\Desktop\Dysorthographie2.rtf"
        WinXp.FichierLog "C:\Users\rdurupt\Desktop\Dysorthographie2.rtf", wtxt
        MySmgBox.MsgBox "Le Fichier:" & vbCrLf & "Dysorthographie.rtf" & vbCrLf & " a été convertie enDysorthographie2.rtf " & vbCrLf & "Dans le répertoire:" & vbCrLf & "C:\Users\rdurupt\Desktop\"
    End If
     
     
    End Sub
    Function GetBinaryData(Fichier) As String
    Dim Buffer() As Byte
    Dim intFileNumber
    Dim intFileNumber2
    Dim WinXp As New clsWindowsExporer
    Dim L As Long
    Dim I As Long
    Dim txt As String
    Dim t As String
    L = WinXp.Taille_Fichier(Fichier)
    ReDim Buffer(L)
    intFileNumber = FreeFile
    Open Fichier For Binary As #intFileNumber
    txt = ""
    'GetBinaryData = vbCrLf & "Function Logo()" & vbCrLf
    While Not EOF(intFileNumber)
    Get #intFileNumber, , Buffer
     
     
    Wend
    Close #intFileNumber
    For I = 0 To UBound(Buffer)
    t = Hex$(Buffer(I))
    If (I Mod 500) = 0 And (I > 1) Then
    GetBinaryData = GetBinaryData & LCase(txt)
        txt = ""
    End If
    If Len(t) = 1 Then t = "0" & t
    txt = txt & t
    Next
     
    If Trim("" & txt) <> "" Then GetBinaryData = GetBinaryData & LCase(txt)
    'GetBinaryData = GetBinaryData & "end Function" & vbCrLf
    End Function
    Fichiers attachés Fichiers attachés

  11. #11
    Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Janvier 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Janvier 2015
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Merci à vous,

    Ton fichier fonctionne après avoir modifié les chemin d'acces.
    J'essayerai juste que l'image ne se copie pas dans l'en-tête, comme c'est le cas sur ton fichier.
    Je regarde à ça lors de ma prochaine nuit (mercredi prochain). En attendant je marque Résolu.

    Marot, j'essayerai d'abord en modifiant Selection en ThisDocument comme tu le préconises, mais le soucis vient de la ligne .activate un peu avant donc j'ai des doutes.
    Citation Envoyé par marot_r Voir le message
    Qu'est-ce qui ne marche plus ?
    • Tu n'as aucun résultat ?
    • Tu n'as pas le résultat attendu ? Qu'était-il attendu ? Qu'as-tu obtenu ?
    • Tu as une erreurs ? Laquelle ?
    • Autre chose ? Quoi ?

    A+
    L'erreur vient de la ligne windows***.activate.
    On dirait que le word ne reconnait pas le rtf créé à l'étape précédente.
    Erreur 5941 : Le membre de la collection requis n'existe pas.

    Merci, merci, merci
    _________________________
    EDIT:
    J'ai eu un cours moment pour encore y regarder.
    Après "chipotage", cela a refonctionné. J'ai de nouveau enregistré et relancé et cela ne fonctionne de nouveau plus (problème de collections).
    En regardant dans la partie vba/project, j'ai remarqué que le word affiché 2 dossiers : Normal et pv36macro et le rtf également 2 : Normal et pv421.
    Lorsque cela a fonctionné le vba/project affichait les 3 ensemble.
    Voilà d'où vient l'erreur. Avez-vous une idée de comment les rassembler en 1 seul projet.
    Nom : vba pv36macro.JPG
Affichages : 736
Taille : 18,9 KoNom : vba pv241.JPG
Affichages : 713
Taille : 15,9 Ko
    Tandis qu'en ouvrant les fichiers manuellement, les vba /project s'affichent ainsi : Nom : vba pv36macro et pv421.JPG
Affichages : 742
Taille : 20,4 Ko Et comme ça cela fonctionne

Discussions similaires

  1. Image bannière / footnote dans fichier RTF
    Par AnalytX dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 29/06/2012, 13h50
  2. [Librairies] Inserer lignes dans fichier RTF
    Par tit_oune dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 04/05/2012, 10h21
  3. [MySQL] Probleme de fusion varible php dans fichier RTF
    Par waltcap dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 16/12/2010, 23h44
  4. Réponses: 1
    Dernier message: 26/03/2008, 14h44
  5. [Tableaux] tableau dans fichier rtf
    Par crischprolch dans le forum Langage
    Réponses: 1
    Dernier message: 04/07/2007, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo