#1 Mon 05 February 2018 14:21
- Oliv38
- Participant actif
- Date d'inscription: 21 Dec 2011
- Messages: 142
Variable dans mise en page
Bonjour,
je ne trouve pas de discussion sur ce sujet donc je me permets de poser la question.
Je voudrais utiliser des variables pour rendre mes mises en page plus dynamiques. Je me demandais donc s'il était possible de déclarer des variables dans le fichier .wor pour les inclure dans les textes de la mise en page.
Par exemple si j'ai le titre : "Suivi de l'année 2018", je voudrais que "2018" varie en fonction de l'année en cours.
Est-ce possible ? Quelle serait la syntaxe ?
Merci d'avance pour vos éclairages.
Oliv
PS : j'utilise Mapinfo 12.5
Hors ligne
#2 Mon 05 February 2018 14:46
- Raphaël_
- Participant actif
- Date d'inscription: 18 Jan 2016
- Messages: 110
Re: Variable dans mise en page
Salut,
Il est possible d'éditer facilement les .wor via un éditeur de texte (et donc via Excel en vba)
Avec une petite macro tu peux facilement éditer ce genre de choses (et même mettre à jour tes cartes et les imprimer automatiquement en pdf)
C'est une solution bien à l'arrache, mais la nature des .wor, avec une commande par ligne, pousse à ça...
Hors ligne
#3 Mon 05 February 2018 15:07
- Oliv38
- Participant actif
- Date d'inscription: 21 Dec 2011
- Messages: 142
Re: Variable dans mise en page
Yes merci, ça me rassure que ce soit possible.
Tu aurais éventuellement une doc sur ce sujet à me conseiller ?
Comment inclurais-tu une date qui varie dans un .wor ?
Si je comprend ce que tu dis, tu peux mettre une ligne dans le .wor qui va chercher une macro excel ??
Effectivement, avec la commande Printwin Window WindowId() en fin de wor je parviens à lancer l'export pdf en automatique.
Merci pour ton aide.
Dernière modification par Oliv38 (Mon 05 February 2018 15:07)
Hors ligne
#4 Mon 05 February 2018 15:27
- Raphaël_
- Participant actif
- Date d'inscription: 18 Jan 2016
- Messages: 110
Re: Variable dans mise en page
Alors dans ma façon de faire, c'est plutôt la date qui varie sous Excel, qui modifie le .wor.
Tu te fais un modèle de .wor dans un fichier Excel (tu fais un bête copier coller de ton .wor et tu lances une macro qui va reprendre ce modèle et recréer un nouveau .wor avec les variables mises à jour (titre, tables, analyses thématiques... tout ce que tu veux en fait)
La condition c'est de travailler dans un même périmètre (ou alors faut adapter et ça demande nettement plus de travail, je l'ai fais une fois, je ne le referais pas)
Pour écrire dans un fichier texte avec Excel (VBA)
Code:
Close Chemin_WOR = "chemin fichier wor\" Open Chemin_WOR & "carte.wor" For Output As #1 For j = 1 To dernière ligne du .wor Print #1, Workbooks("Fichier.xlsm").Worksheets("Feuille").Range("A" & j) Next j Close
Pour l'export (+ fermeture de MI) à mettre dans le .wor
Code:
PrintWin Window FrontWindow() File "chemin\carte.pdf" overwrite Close All Interactive run menu command 113
Et enfin, pour lancer MapInfo automatiquement
Code:
Dim Lance Dim Chemin_MI As String Chemin_MI = "chemin\carte.WOR" Lance = Shell("C:\Program Files\MapInfo\Professional\MAPINFOW.EXE " & Chemin_MI, 1) Application.Wait Time + TimeSerial(0, 0, 20)
Bon ça c'est les lignes essentielles, après bien entendu faut adapter. Mais ce truc là te permet de mettre à jour 5000 cartes dans la nuit...
Ou sinon, solution plus simple : tu passes ça sur QGIS.
J'avais codé tout ça avant la sortie du plug-in, j'ai directement lâché mon programme pour QGIS, bien plus efficace concernant cette problématique.
La limite de QGIS est que tu travailles soit sur une variable, soit sur une table, c'est beaucoup moins souple.
Hors ligne
#5 Mon 05 February 2018 16:03
- Oliv38
- Participant actif
- Date d'inscription: 21 Dec 2011
- Messages: 142
Re: Variable dans mise en page
Ok merci, il faut que je teste mais cela me semble être une bonne solution à ce que je cherche. Merci bcp.
Ton Close/Close se met où exactement ? Un bloc note ou un module VBA ?
Le lancement mapinfo se met dans un sub() ?
Il n'y a donc pas possibilité d'intégrer des variables directement dans le fichier .wor ? Il me semblait qu'il s'agissait ni plus ni moins qu'un langage type mapbasic, je pensais donc pouvoir déclarer une variable "Dim date as string" puis la concaténer dans du texte directement dans mon wor...
Merci encore! Et oui je suis d'accord avec toi pour QGis mais je me traîne Mapinfo pour le moment :-)
Hors ligne
#6 Mon 05 February 2018 16:20
- Raphaël_
- Participant actif
- Date d'inscription: 18 Jan 2016
- Messages: 110
Re: Variable dans mise en page
Tu peux effectivement développer ça en MapBasic, mais le prérequis serait de déjà maîtriser le langage ou de vouloir s'y mettre.
Dans la mesure où MapInfo est en forte perte de vitesse, pas sûr que ça soit forcément un investissement intéressant à faire aujourd'hui (mais je peux me tromper ! )
Le VBA pouvant bien dépanner pour des tâches répétitives, ça m'a semblé plus pertinent de tester ainsi.
Le premier et 3e bloc de code sont à mettre dans un sub() oui, pas forcément le même selon tes besoins.
Hors ligne
#7 Mon 05 February 2018 16:49
- Oliv38
- Participant actif
- Date d'inscription: 21 Dec 2011
- Messages: 142
Re: Variable dans mise en page
Super, merci à toi pour ton aide
Et une dernière question, car tu as attiré ma curiosité, comment tu lances un export automatisé de carte en pdf avec QGis ?
Dernière modification par Oliv38 (Mon 05 February 2018 17:39)
Hors ligne
#8 Tue 06 February 2018 08:56
- nicoboud
- Membre
- Lieu: Nantes
- Date d'inscription: 12 Oct 2007
- Messages: 860
Re: Variable dans mise en page
Bonjour,
Si votre question concerne QGIS, dissocier-là de ce fil de discussion et postez-là dans le forum dédié à QGIS.
Mais voici tout de même la réponse : un export automatisé se gère dans l'onglet atlas des mises en paage QGIS.
Sinon, la méthodo pour des exports automatisés avec Mapinfo en utilisant un publipostage :
https://georezo.net/forum/viewtopic.php … 34#p195634
Nicolas.
Co-modérateur du forum Mapinfo
Utilisateur Mapinfo et QGIS
Hors ligne
#9 Tue 06 February 2018 10:51
- Oliv38
- Participant actif
- Date d'inscription: 21 Dec 2011
- Messages: 142
Re: Variable dans mise en page
Bonjour,
oui effectivement, navré, je n'avais pas l'intention de m'étendre plus sur le sujet.
Merci beaucoup pour la réponse.
Oliv
Hors ligne
#10 Tue 06 February 2018 10:59
- Raphaël_
- Participant actif
- Date d'inscription: 18 Jan 2016
- Messages: 110
Re: Variable dans mise en page
Voilà tu as toutes tes réponses
Pas fan du publipostage, qui commence à faire intervenir un peu trop de logiciels et de programmation à mon goût... :p
Hors ligne
#11 Wed 14 February 2018 23:42
- CRIGBAB
- Participant assidu
- Lieu: Bayonne
- Date d'inscription: 14 Nov 2005
- Messages: 180
Re: Variable dans mise en page
Bonsoir,
Quelques fonctions en mapbasic que tu peux introduire dans ton Wor
CurDateTime( )
Day(curdate())
Month(curdate())
Weekday(curdate())
Year(curdate())
CurTime()
Hour(CurTime())
Minute(CurTime())
Second(CurTime())
en jonglant avec ces fontions tu peux reconstruire une date et heure à façon. Tu inclus la (les) fonction(s) dans la chaine de caractère de ton wor.
Pour ton exemple ta chaine sera
"Suivi de l'année "+Year(curdate())
Attention si tu enregistres le wor sous Mapinfo je ne pense pas que les variables et les fonctions appelées soient conservées. Il faut faire les modifications du Wor sous editeur de texte.
Je confirme les fonctions ne sont pas conservées donc achtung ne pas enregistrer le wor avec MApinfo s'il est modifié sous editeur de texte.
Cordialement.
Hors ligne