banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 30 November 2005 15:31

MacGeol
Participant occasionnel
Lieu: Plessala 22
Date d'inscription: 16 Sep 2005
Messages: 31
Site web

[ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie

Bonjour à tous,

Depuis maintenant fin juillet je travaille sur une "application métier" en VBA (oui je sais apllication métier et VBA ne font pas bon ménage, mais nous avons pas encore de licence VB et appeler mon développement "des macros", sans vouloir me surestimer, serait vraiment se tromper). Bref, les modules de saisie et d'édition sont opérationnels et en fonction auprès de 4 techniciens, j'en arrive aujourd'hui au module d'impression. Ce module devrait être capable de sortir un rapport en PDF intégrant un atlas ArcMap, des tableaux de statistiques issues des données de la géodatabase (tableaux sous Word, Excel ou Etat Access je ne sais même pas quelle serait la bonne solution), des documents Word type... etc... 

Et là autant je commence à avoir un certain niveau en VBA sur ArcMap pour de l'édition autant exporter des données sous autre logiciel puis réintégrer dans un même document à finalement metttre en PDF... je sèche complètement... je suis même incapable de le faire directement sous ArcMAP alors en VBA...

Quelqu'un a-t-il déjà tenter de telles manipulations, même sans passer par VBA, et si oui pourrait-il m'aiguiller au plus vite.

MERCI ENORMEMENT D'AVANCE

Dernière modification par MacGeol (Wed 30 November 2005 15:31)


____________________________________________
MacGeol

Hors ligne

 

#2 Wed 30 November 2005 18:46

crevette
Participant actif
Lieu: Noisy Le grand
Date d'inscription: 13 Sep 2005
Messages: 50

Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie

Tu fais un modele de document sous word avec une macro permettant d'inclure ton fichier image (extrait d'arcmap) dans ce document à une place défini.
   
Sous arcmap, tu crées une macro enregistrant la vue que tu veux en jpg (tu peux aussi ajouter la création d'un fichier texte avec les chemins des images).
   
La macro sous word te permet d'aller chercher l'image enregistrée et de l'insérer dans le document (tu peux aussi passer par la lecture d'un fichier texte si tu as plusieurs images à insérer ou plusieurs fiches a créer).
   
Et dans ta macro sous word tu rajoutes une ligne pour enregistrer le fichier en pdf.

Hors ligne

 

#3 Thu 01 December 2005 12:06

MacGeol
Participant occasionnel
Lieu: Plessala 22
Date d'inscription: 16 Sep 2005
Messages: 31
Site web

Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie

Merci beaucoup chère Crevette,

Ca ce sont des bonnes idées que je vais mettre en application. Par contre j'avoue ne jamais avoir fait de VBA Word alors que j'ai désormais un certains niveau sur VBA ArcMAP d'où ma peur en ce qui concerne les macros Word.

D'autre part j'aimerais une précision sur l'utilisation d'un fichier texte, je trouve l'idée interresante, mais pourrais-tu préciser ta pensée.

Autre chose, peut-on piloter Excel ou Acces par une macro Word (interopérabilité Office?) pour intégrer directement dans Word des tableaux de statistiques?

Une autre petite précision tant qu'on y est, je comme je te disais les macros Word c'est pas mon fort donc si par exemple tu pouvais juste me dire comment on fait pour enregister le fichier en pdf sous WOrd ça serait déjà un grand pas.

MERCI vraiment beaucoup sincérement pour ton aide.

Dernière modification par MacGeol (Thu 01 December 2005 12:18)


____________________________________________
MacGeol

Hors ligne

 

#4 Fri 02 December 2005 10:26

nicolas valls
Participant assidu
Date d'inscription: 28 Oct 2005
Messages: 154

Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie

Pour le VBA Word, y'a rien de plus simple. Si vous ne savez pas faire une macro, vous activez l'espion (outil==>macro==>nouvelle macro)
A partir de là word enregistre tous ce que vous faites dans un module vba. Un fois votre action terminée il faut cliquer sur le bouton d'arret.
Il ne reste plus qu'a aller dans l'éditeur VBA et le code correspondant à votre action est là.
Certes, cette solution n'est pas la meilleure (le code reste lourd) mais permet dans un premier temps de dégrossir le travail

Si seulement cet espion existait sous vba Arcmap ca faciliterai bien des choses

Nicolas Valls
nicolasvalls@texte-a-enlever.yahoo.fr


Nicolas VALLS
Géomaticen
Cabinet Pierre GRILLET

Hors ligne

 

#5 Fri 09 December 2005 13:41

crevette
Participant actif
Lieu: Noisy Le grand
Date d'inscription: 13 Sep 2005
Messages: 50

Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie

Ca des bonnes idées que je vais mettre en application. Parcontre j'avoue ne jamais avoir fait de VBA Word alors que j'ai désormais un certains niveau sur VBA ArcMAP d'où ma peur en ce qui concerne les macros Word.
   
  // l'aide de word en vba est bien fait, tu trouves pas mal de choses dedans.

D'autre part j'aimerais une précision sur l'utilisation d'un fichier texte, je trouve l'idée interresante, mais pourrais-tu préciser ta pensée.
   
  // en fait tu t'en sers pour inscrire le chemin de tes images dedans et dans word, ta macro lis ce fichier pour insérer les images.

Une autre petite précision tant qu'on y est, je comme je te disais les macros Word c'est pas mon fort donc si par exemple tu pouvais juste me dire comment on fait pour enregister le fichier en pdf sous WOrd ça serait déjà un grand pas.
   
   
  // la je suis pas sure mais je pense qu'il faut plus faire une fonction imprimant en pdf car en enregistrant sous tu n'as pas les extensions pdf alors qu'en imprimant normalement tu as une imprimante virtuel faisant des pdf... mais que si tu as un logiciels créant des pdf sur ton ordinateur...

Hors ligne

 

#6 Thu 22 December 2005 15:18

DrassCentreSSE
Participant occasionnel
Date d'inscription: 17 Nov 2005
Messages: 13

Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie

Voici un extrait de fonction de pilotage MS Word que jai créée pour ArcMap 8/9. Elle peut donner des pistes... Cela nécessite l'activation des références MS Word (97 et supérieur) et MS scripting runtime.

Code:

Public Function EditerDocumentWord(ByVal strCheminModeleWord As String, ByVal strCheminDocumentWord As String, ByRef dicMotsReserves As Dictionary) As Boolean

' Description : edite un document MS Word à partir d'un modèle MS Word et d'un dictionnaire de mots réservés et indique
'               si l 'édition a été effectuée
'
' Paramètres   :
'
'   - strCheminDocumentWord : chemin absolu du document MS Word à éditer
'   - strCheminModeleWord   : chemin absolu du modèle MS Word
'   - dicMotsReserves       : mots réservés à insérer dans le document Word.

    On Error GoTo Erreur

    Dim pApplicationWord As Word.Application    ' Application Word
    Dim pDocumentWord As Word.Document          ' Document Word à produire
    Dim objShape As InlineShape                 ' Objet image si l'utilisateur souhaite insérer des images
    
    Dim pFileSystemObject As FileSystemObject   ' Accès au système de fichier

    Dim pCodesMotsReserves()
    
    Dim strSignet As String                     ' Nom du signet
    Dim strCodeParametre As String              ' Code du paramètre
    Dim i, j As Integer                         ' Compteur
    Dim intNbSignets As Integer                 ' Nombre de signets
    Dim intNbConseils As Integer                ' Nombre de conseils non sélectionnés
    Dim numboucle As Long                       ' Nombre de boucles pour les chaînes de caractères de plus de 200 caractères


    Set pFileSystemObject = New FileSystemObject


    'si le modèle n'existe pas, on arrête
    If Not (pFileSystemObject.FileExists(strCheminModeleWord)) Then
        MsgBox "Le modèle '" & strCheminModeleWord & "' est introuvable. Edition abandonnée...", vbExclamation, "Fichier introuvable"
        Exit Function
    End If

    'si le document à éditer existe déjà, on demande si on veut le remplacer
    If pFileSystemObject.FileExists(strCheminDocumentWord) Then
        If MsgBox("Le fichier '" & strCheminDocumentWord & "' existe déjà." & vbCrLf & "Voulez-vous le remplacer?", _
           vbExclamation + vbYesNo, "Fichier existant") = vbNo Then
                Exit Function
        End If
    End If

    ' Récupération de l'application Word
    Set pApplicationWord = GetWord

    'on place le processus Word en tâche de fond pour ne pas ralentir l'édition
    pApplicationWord.Visible = False
    
    ' Copie du modèle. Cette copie devient le document à produire.
    pFileSystemObject.CopyFile strCheminModeleWord, strCheminDocumentWord, True
    
    
    'Ouverture du document MS Word
     pApplicationWord.Documents.Open FileName:=strCheminDocumentWord

    'Exemple de parcours de signets du document
    intNbSignets = pApplicationWord.ActiveDocument.Bookmarks.Count
    For i = 1 To intNbSignets

        'on récupère le signet en majuscules
        strSignet = UCase(pApplicationWord.ActiveDocument.Bookmarks.Item(i).Name)
        
        'si le signet existe dans le dictionnaire des mots réservés
        If dicMotsReserves.Exists(strSignet) Then

           'on effectue le traitement de son choix

        'sinon, on supprime ce que le signet contient
        Else
            pApplicationWord.ActiveDocument.Bookmarks(strSignet).Select

            'exemple pour un tableau
            'pApplicationWord.Selection.Tables(1).Delete
            
            'exemple pour une ligne de tableau
            'pApplicationWord.Selection.Rows.Delete
            
            'exemple avec du texte
            Selection.Delete Unit:=wdCharacter, Count:=1

            i = i - 1
        End If

        If i = pApplicationWord.ActiveDocument.Bookmarks.Count Then
            Exit For
        End If
    Next i

    
    'Injection du dictionnaire dans le document

    pCodesMotsReserves = dicMotsReserves.Keys
    For i = 0 To dicMotsReserves.Count - 1
    
      If Not IsNull(dicMotsReserves(pCodesMotsReserves(i))) Then
            
    ' possibilité d'insérer des images
     
       's'agit-il d'un fichier image ? (test sur l'extension censée terminer la chaine)
       If InStr(1, ".bmp.jpg.png.gif", Right(dicMotsReserves(pCodesMotsReserves(i)), 4)) <> 0 Then
         
        'le fichier est-il présent sur le disque ?
        If pFileSystemObject.FileExists(dicMotsReserves(pCodesMotsReserves(i))) Then
            'on se positionne en page 1
            pApplicationWord.Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst
      
            'on recherche le mot réservé
            pApplicationWord.Selection.Find.ClearFormatting
            With pApplicationWord.Selection.Find
                .Text = pCodesMotsReserves(i)
                .Replacement.Text = ""
                .Forward = True
                .Wrap = wdFindStop
                .Format = False
                .MatchCase = False
                .MatchWholeWord = False
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
            End With
        
           'on remplace le mot par une insertion d'image
           'on répète l'opération tant que le mot clé est trouvé
           
           Do While pApplicationWord.Selection.Find.Execute
             Set objShape = pApplicationWord.Selection.InlineShapes.AddPicture(FileName:=dicMotsReserves(pCodesMotsReserves(i)), LinkToFile:=False, SaveWithDocument:=True)
             With objShape
                .LockAspectRatio = True
                .ScaleHeight = 100
                .ScaleWidth = 100
             End With
             Set objShape = Nothing
           Loop
        End If
        
       'ce n'est pas une image mais du texte
       Else
        
        'la chaine dépasse t'elle 200 caractères ?
        'traitement nécessaire car on utilise la fonction rechercher/remplacer de MS Word qui n'accepte que 255 caractères au maximum

        If Len(dicMotsReserves(pCodesMotsReserves(i))) > 200 Then
          
          'on calcule le nombre de boucles

          If Len(dicMotsReserves(pCodesMotsReserves(i))) Mod 200 = 0 Then
            numboucle = Len(dicMotsReserves(pCodesMotsReserves(i))) / 200
          Else
            numboucle = (Len(dicMotsReserves(pCodesMotsReserves(i))) / 200) + 1
          End If

          'on remplace par paquet de 200 caractères auxquels on ajoute le mot réservé pour permettre le déroulement des boucles
          For j = 0 To (numboucle - 1)
             With pApplicationWord.Selection.Find
                 .Text = pCodesMotsReserves(i)
                 .ClearFormatting
                 .Replacement.Text = Mid(dicMotsReserves(pCodesMotsReserves(i)), (j * 200) + 1, 200) & pCodesMotsReserves(i)
                 .Replacement.ClearFormatting
                 .Forward = True
                 .Wrap = wdFindContinue
                 .Format = False
                 .MatchCase = False
                 .MatchWholeWord = False
                 .MatchAllWordForms = False
                 .MatchWildcards = False
                 .MatchSoundsLike = False
             End With
             pApplicationWord.Selection.Find.Execute Replace:=wdReplaceAll
          
          Next j
            
          'on supprime le mot réservé
          With pApplicationWord.Selection.Find
             .Text = pCodesMotsReserves(i)
             .Replacement.Text = ""
             .Forward = True
             .Wrap = wdFindContinue
             .Format = False
             .MatchCase = False      'Non respect de la casse
             .MatchWholeWord = False
             .MatchAllWordForms = False
             .MatchWildcards = False
             .MatchSoundsLike = False
          End With
          pApplicationWord.Selection.Find.Execute Replace:=wdReplaceAll
          
 
        'la chaîne de caractères n'excéde pas 200 caractères
        'rechercher-remplacer classique
        Else
        
          With pApplicationWord.Selection.Find
            .Text = pCodesMotsReserves(i)
            .ClearFormatting
            .Replacement.Text = dicMotsReserves(pCodesMotsReserves(i))
            .Replacement.ClearFormatting
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchWildcards = False
            .MatchSoundsLike = False
          End With
          pApplicationWord.Selection.Find.Execute Replace:=wdReplaceAll

        End If '200 caractères
       End If 'image ou texte
      End If 'non null
    
    Next i
    
    
    'enregistrement du document
     pApplicationWord.ActiveDocument.Save
   
    'fermeture du document
    pApplicationWord.ActiveDocument.Close
    MsgBox "Edition terminée...", vbOKOnly, "Fin de création"
        
    'tout s'est bien passé
    EditerDocumentWord = True
    
    Set pApplicationWord = Nothing
    Set pDocumentWord = Nothing
    Set pFileSystemObject = Nothing
        
    Exit Function
       
Erreur:
    MsgBox "Erreur " & vbCrLf & Err.Number & " : " & Err.Description, vbCritical, "Erreur"
    pApplicationWord.Quit SaveChanges:=wdDoNotSaveChanges
    Set pApplicationWord = Nothing
    Set pDocumentWord = Nothing
    Set pFileSystemObject = Nothing
    EditerDocumentWord = False

End Function


Public Function GetWord() As Object
' Description : retourne une référence sur l'application Word

    On Error Resume Next
    
    Dim pApplicationWord As Object
    
    Set pApplicationWord = GetObject(, "Word.Application")
    ' L'application n'est pas ouverte : ouverture de l'application
    If Err.Number <> 0 Then
        Set pApplicationWord = CreateObject("Word.Application")
        Err.Clear
    End If
    Set GetWord = pApplicationWord
    
    Set pApplicationWord = Nothing

End Function

Public Sub test()
'Voici un extrait de fonction de pilotage de MS Word créée sous ArcMap 8/9. Elle peut donner des pistes...
 
 Dim blnEdition As Boolean
 Dim dicDico As New Dictionary
     
 dicDico.Add "TITRE", "C. Iuli Caesaris Commentariorum de Bello Civili"
 dicDico.Add "AUTEUR", "César"
 dicDico.Add "CITATION", "Litteris C. Caesaris consulibus redditis aegre ab his impetratum est summa tribunorum plebis contentione, ut in senatu recitarentur; ut vero ex litteris ad senatum referretur, impetrari non potuit. Referunt consules de re publica in civitate. . Incitat. L. Lentulus consul senatu rei publicae se non defuturum pollicetur, si audacter ac fortiter sententias dicere velint; sin Caesarem respiciant atque ejus gratiam sequantur, ut superioribus fecerint temporibus, se sibi consilium capturum neque senatus auctoritati obtemperaturum: habere se quoque ad Caesaris gratiam atque amicitiam receptum. In eandem sententiam loquitur Scipio: Pompeio esse in animo rei publicae non deesse, si senatus sequatur; si cunctetur atque agat lenius, nequiquam ejus auxilium, si postea velit, senatum imploraturum."
 dicDico.Add "IMAGE", "chemin absolu d'accès à l'image ex : d:\images\test.jpg"
 
 blnEdition = EditerDocumentWord("le chemin absolu du modèle MS Word ex. d:\modeles\modele.doc", "le chemin de sauvegarde ex : d:\documents\test.doc", dicDico)
 
End Sub

Dernière modification par DrassCentreSSE (Thu 22 December 2005 15:19)

Hors ligne

 

Pied de page des forums

Powered by FluxBB