VBA Publisher : sélectionner une page
Dernière réponse : dans Programmation
Bonjour à tous,
Je développe actuellement une application pour laquelle j'ai besoin de travailler, en VBA, sous Publisher depuis Excel. Je n'ai jamais fait de VBA sous Publisher auparavant mais beaucoup sous Excel. Je cherche désespérément, depuis une semaine, comment faut-il faire pour sélectionner une page en particulier ?
Ma demande est très simple : mon document Publisher contient déjà plusieurs pages ; lorsque je l'ouvre, il se place sur la première. J'ai besoin d'ajouter un élément à la troisième page, mais pour cela il faut que je l'active / la sélectionne. Or je n'ai trouvé absolument aucune instruction qui permette de le faire...
Les ressources sur ce sujet sur Internet sont inexistantes ou très rares. Quelqu'un peut-il m'aider ? Ou au moins me dire si jamais ce n'est pas possible de sélectionner une page via le VBA...
L'élément que je souhaite rajouter est une image, copiée depuis Excel. J'ai mis une instruction simple :
Le problème c'est que malgré ça il me colle l'image en page 1 - la page active !
Merci d'avance à la bonne âme qui pourra m'aider... ou essaiera au moins de le faire
PlugNPlay
Je développe actuellement une application pour laquelle j'ai besoin de travailler, en VBA, sous Publisher depuis Excel. Je n'ai jamais fait de VBA sous Publisher auparavant mais beaucoup sous Excel. Je cherche désespérément, depuis une semaine, comment faut-il faire pour sélectionner une page en particulier ?
Ma demande est très simple : mon document Publisher contient déjà plusieurs pages ; lorsque je l'ouvre, il se place sur la première. J'ai besoin d'ajouter un élément à la troisième page, mais pour cela il faut que je l'active / la sélectionne. Or je n'ai trouvé absolument aucune instruction qui permette de le faire...
Les ressources sur ce sujet sur Internet sont inexistantes ou très rares. Quelqu'un peut-il m'aider ? Ou au moins me dire si jamais ce n'est pas possible de sélectionner une page via le VBA...
L'élément que je souhaite rajouter est une image, copiée depuis Excel. J'ai mis une instruction simple :
Publisher.ActiveDocument.Pages(3).Shapes.Paste
Le problème c'est que malgré ça il me colle l'image en page 1 - la page active !
Merci d'avance à la bonne âme qui pourra m'aider... ou essaiera au moins de le faire
PlugNPlay
Autres pages sur : vba publisher selectionner page
Lassé par la pub ? Créez un compte
Meilleure solution
Mmh ouais, pas bête
!
Je fais un essai... ça marche
!
il me semblait avoir essayé pourtant, il faudra que je vérifie sur l'autre pc.
Donc, au final, la solution est la suivante (je résume pour ceux qui ont pas envie de se retaper toute la discussion
) :
Dans le VBE d'Excel, aller activer la librairie Microsoft Publisher xx.x Object Library ;
Dans une macro Excel, entrer le code suivant :
Exécuter
Merci d'avoir poursuivi la discussion jusqu'au bout zeb, j'ai appris des choses !
!Je fais un essai... ça marche
!il me semblait avoir essayé pourtant, il faudra que je vérifie sur l'autre pc.
Donc, au final, la solution est la suivante (je résume pour ceux qui ont pas envie de se retaper toute la discussion
) :
Sub PbTest()
'Mettre le "Publisher." devant précise qu'on utilise l'objet issu
'de la librairie Publisher :
Dim db As Publisher.Shape
'En supposant que le doc Publisher existe déjà, qu'il est déjà ouvert
'et possède au moins 4 formes sur la deuxième page :
Set db = Publisher.ActiveDocument.Pages(2).Shapes(4)
Publisher.ActiveDocument.ActiveView.ScrollShapeIntoView Shape:=db
'Et voilà ! Bon après petits problèmes de zoom, pour faire simple :
Publisher.ActiveDocument.ActiveView.Zoom = 100
End Sub
Merci d'avoir poursuivi la discussion jusqu'au bout zeb, j'ai appris des choses !
Salut,
Je n'ai pas de Publisher sous la main.
Peut-être devrais-je aller lire la doc' de 'Crosoft sur le sujet (modèle objet de Publisher) qu'on devrait trouver sur MSDN, mais je me dis que tu peux très bien le faire toi-même.
Je viens de te faire un bon vieux RTFM !
En fait, je me permets cette entrée en matière parce que j'ai peut-être une solution pour toi.
Fais-le dans Publisher avec l'enregistreur de macro (y-a-t-il bien un enregistreur de macro sous Publisher ?)
Ensuite analyse le code et transpose-le dans Excel.
Je n'ai pas de Publisher sous la main.
Peut-être devrais-je aller lire la doc' de 'Crosoft sur le sujet (modèle objet de Publisher) qu'on devrait trouver sur MSDN, mais je me dis que tu peux très bien le faire toi-même.
Je viens de te faire un bon vieux RTFM !En fait, je me permets cette entrée en matière parce que j'ai peut-être une solution pour toi.
Fais-le dans Publisher avec l'enregistreur de macro (y-a-t-il bien un enregistreur de macro sous Publisher ?)
Ensuite analyse le code et transpose-le dans Excel.
Merci de répondre, déjà, parce que c'est le seul retour que j'aie eu jusqu'à présent
Je m'y attendais bien à ce type de réponse, mais que croyez-vous, oui je l'ai lu en long, en large et en travers le fucking manual... déjà qu'il est pas bien épais...
MS propose de télécharger une sorte de doc Publisher, ce que j'ai fait, je l'ai installée mais j'ai beau essayer elle fonctionne pas...
J'ai regardé toutes les collections, propriétés, objets, méthodes, etc en rapport avec Pages ou Shapes sur MSDN et dans la librairie du VBE mais on trouve que dalle.
Et à mon grand malheur, non, l'enregistreur de macros n'existe pas sous Publisher
Mais je me suis dit, puisque je travaille depuis Excel, ben je vais enregistrer depuis Excel ! Et... ça marche pas non plus
Excel enregistre seulement ce que je fais sous Excel : sélectionner une cellule, copier un graph, réduire la fenêtre... ensuite je suis passée sous Publisher pour y coller le graph... puis je suis revenue sous Excel, sélectionner une cellule. Mais résultat, ce qu'il enregistre c'est comme si je n'avais jamais quitté Excel !
Voilà voilà où j'en suis...
Mais ça fait plaisir de recevoir une réponse quand même on se sent moins seul
Je m'y attendais bien à ce type de réponse, mais que croyez-vous, oui je l'ai lu en long, en large et en travers le fucking manual... déjà qu'il est pas bien épais...
MS propose de télécharger une sorte de doc Publisher, ce que j'ai fait, je l'ai installée mais j'ai beau essayer elle fonctionne pas...
J'ai regardé toutes les collections, propriétés, objets, méthodes, etc en rapport avec Pages ou Shapes sur MSDN et dans la librairie du VBE mais on trouve que dalle.
Et à mon grand malheur, non, l'enregistreur de macros n'existe pas sous Publisher
Mais je me suis dit, puisque je travaille depuis Excel, ben je vais enregistrer depuis Excel ! Et... ça marche pas non plus
Excel enregistre seulement ce que je fais sous Excel : sélectionner une cellule, copier un graph, réduire la fenêtre... ensuite je suis passée sous Publisher pour y coller le graph... puis je suis revenue sous Excel, sélectionner une cellule. Mais résultat, ce qu'il enregistre c'est comme si je n'avais jamais quitté Excel !Voilà voilà où j'en suis...
Mais ça fait plaisir de recevoir une réponse quand même on se sent moins seul
Voilà autre chose :
Non vérifié, bien sûr.
---------
PS: A ceux qui sont habitués à me voir fustiger l'utilisation des objets actifs et l'emploi du presse-papier comme zone de travail, sachez que quelqu'un d'autre a utilisé mon compte pour écrire le pseudo-code ci-dessus. Non, je n'aurais pas pu écrire cela moi-même.
Excel.ActiveShape.Cut Publisher.ActiveDocument.Pages(3).Activate Publisher.ActiveDocument.ActivePage.Paste
Non vérifié, bien sûr.
---------
PS: A ceux qui sont habitués à me voir fustiger l'utilisation des objets actifs et l'emploi du presse-papier comme zone de travail, sachez que quelqu'un d'autre a utilisé mon compte pour écrire le pseudo-code ci-dessus. Non, je n'aurais pas pu écrire cela moi-même.
Ah ben non là ça ne va pas aller ! si c'était aussi simple, je n'aurais même pas eu besoin de poster sur un forum ; ) !
L'objet Pages n'inclut aucune sorte de méthode Activate ou quoi que ce soit d'autre qui y ressemble. De plus la propriété ActivePages n'existe pas non plus.
Moi je vois pas le problème quant à l'utilisation des objets actifs... pourquoi surcharger le code en re-précisant à chaque fois de quoi/qui on parle, tant qu'on ne s'embrouille pas ? Presse-papier ok mais des fois on n'a pas le choix.
L'objet Pages n'inclut aucune sorte de méthode Activate ou quoi que ce soit d'autre qui y ressemble. De plus la propriété ActivePages n'existe pas non plus.
Moi je vois pas le problème quant à l'utilisation des objets actifs... pourquoi surcharger le code en re-précisant à chaque fois de quoi/qui on parle, tant qu'on ne s'embrouille pas ? Presse-papier ok mais des fois on n'a pas le choix.
Gné ?
Ecoute, je ne rêve pas !
L'exemple As it applies to the Shapes object donné à la page http://msdn.microsoft.com/en-us/library/aa211289%28v=of... me semble clair.
Euh.... Attention, code crade
Ecoute, je ne rêve pas !
L'exemple As it applies to the Shapes object donné à la page http://msdn.microsoft.com/en-us/library/aa211289%28v=of... me semble clair.
Euh.... Attention, code crade
' // Code qui devrait fonctionner Publisher.ActiveDocument.Pages(3).Shapes.Paste ' // Si ça marche pas : With Publisher.ActiveDocument .Pages(1).Shapes.Paste ' // Ah tu la veux sur la première page ? La voilà ! .Pages(1).Shapes(.Pages(1).Shapes.Count).Cut ' // Grosse astuce .Pages(2).Shapes.Paste ' // Code by Microsoft. Si ça, ça ne marche pas End With
Ok, compris pour l'objet actif
La première partie du code, c'est ce que j'avais fait au début, qui devrait fonctionner sans problème, et pourtant il me le collait systématiquement sur la page active, à savoir la page 1 (puisqu'il se replace toujours sur la première page quand il ouvre le doc Publisher... pas moyen de faire comme sous Excel, enregistrer tant qu'on est sur une certaine page et quand on rouvre le classeur on est encore sur cette page)
En revanche bonne astuce pour la deuxième partie du code, je n'y avais pas pensé. Ca ne sélectionne pas la page, mais ça colle bien l'image sur la deuxième page, c'est l'essentiel.
En attendant, j'avais réussi à trouver moi aussi une grosse astuce, c'est tordu mais bon... ça fonctionne, c'est tout ce qui m'intéresse à ce niveau-là depuis quelques temps !
Ouais, je sais, moi aussi j'ai horreur des types 'Variant', d'ailleurs c'est la première fois que je suis amenée à déclarer une telle variable, mais... ici encore, j'ai tout essayé, 'Shape', 'Shapes', 'ShapeRange', 'Range', ... Aucun ne permettait à la macro de s'exécuter sans message d'erreur. Pourtant l'argument Shape est bien de type Shape. Si tu trouves avec quel type ça fonctionne...
Bref, l'instruction ScrollShapeIntoView je ne sais même pas à quoi elle est sensée servir, à la base, elle ne sélectionne pas la forme, en revanche elle se place sur la même page qu'elle, la centre dans l'écran et zoom dessus jusqu'à ce qu'elle occupe toute la largeur de l'écran (ce qui fait que je me suis retrouvée avec un zoom à 800% mais ça c'est facile à régler).
La seule chose importante, c'est qu'on se retrouve avec la bonne page sélectionnée.
Bon, eh bien un grand merci pour ton aide !
La première partie du code, c'est ce que j'avais fait au début, qui devrait fonctionner sans problème, et pourtant il me le collait systématiquement sur la page active, à savoir la page 1 (puisqu'il se replace toujours sur la première page quand il ouvre le doc Publisher... pas moyen de faire comme sous Excel, enregistrer tant qu'on est sur une certaine page et quand on rouvre le classeur on est encore sur cette page)
En revanche bonne astuce pour la deuxième partie du code, je n'y avais pas pensé. Ca ne sélectionne pas la page, mais ça colle bien l'image sur la deuxième page, c'est l'essentiel.
En attendant, j'avais réussi à trouver moi aussi une grosse astuce, c'est tordu mais bon... ça fonctionne, c'est tout ce qui m'intéresse à ce niveau-là depuis quelques temps !
Dim Shp1 As Variant
Set Shp1 = Publisher.ActiveDocument.Pages(3).Shapes(6)
Publisher.ActiveView.ScrollShapeIntoView Shape:=Shp1
Ouais, je sais, moi aussi j'ai horreur des types 'Variant', d'ailleurs c'est la première fois que je suis amenée à déclarer une telle variable, mais... ici encore, j'ai tout essayé, 'Shape', 'Shapes', 'ShapeRange', 'Range', ... Aucun ne permettait à la macro de s'exécuter sans message d'erreur. Pourtant l'argument Shape est bien de type Shape. Si tu trouves avec quel type ça fonctionne...
Bref, l'instruction ScrollShapeIntoView je ne sais même pas à quoi elle est sensée servir, à la base, elle ne sélectionne pas la forme, en revanche elle se place sur la même page qu'elle, la centre dans l'écran et zoom dessus jusqu'à ce qu'elle occupe toute la largeur de l'écran (ce qui fait que je me suis retrouvée avec un zoom à 800% mais ça c'est facile à régler).
La seule chose importante, c'est qu'on se retrouve avec la bonne page sélectionnée.
Bon, eh bien un grand merci pour ton aide !
Eh, attends je n'en ai pas terminé avec toi !
Si tu es obligé de définir un Variant, c'est que VBA/Excel ne connaît pas que les objets d'Excel. Si tu veux qu'il connaisse aussi ceux de Publisher, de Word, etc. il va falloir explicitement les lui apprendre. Or dans quoi apprend-t-on ? Dans les livres de références
Ta mission, puisque tu l'acceptes, va être de trouver dans le menu Outils de ton éditeur de VBA/Excel, une icône représentant des bouquins avec comme nom : "Références".
Dans ce menu, cherche et trouve "Microsoft Publisher V.er.si.on Object Library".
Et voilà
Si tu es obligé de définir un Variant, c'est que VBA/Excel ne connaît pas que les objets d'Excel. Si tu veux qu'il connaisse aussi ceux de Publisher, de Word, etc. il va falloir explicitement les lui apprendre. Or dans quoi apprend-t-on ? Dans les livres de références
Ta mission, puisque tu l'acceptes, va être de trouver dans le menu Outils de ton éditeur de VBA/Excel, une icône représentant des bouquins avec comme nom : "Références".
Dans ce menu, cherche et trouve "Microsoft Publisher V.er.si.on Object Library".
Et voilà
Voui mais je l'avais déjà activée la librairie, en VBA Excel je m'y connais bien...
Quoi qu'il en soit, de toute façon le problème ne semble pas venir de là puisque de toute façon quand je déclare ma variable, les "Shape" "Shapes" etc font partie de ses propositions, et ce sont des mots clé qu'il reconnaît (même sans activer la librairie d'ailleurs)
Je me suis fait un tout petit bout de code pour réessayer :
A côté de ça j'ai bien sûr ouvert une instance Publisher, où j'ai créé un ptit document de 3 pages, avec quelques formes sur chacune d'elles.
Et librairie activée ou pas, tout ce qu'Excel sait me dire c'est "incompatibilité de type" à la ligne 1...
Pour finir j'ai essayé en déclarant une constante plutôt qu'une variable... mais à l'exécution il me dit "Constante requise" en surlignant le mot clé ".Shapes", alors qu'il est suivi de "(3)" donc c'est constant ça...
Quoi qu'il en soit, de toute façon le problème ne semble pas venir de là puisque de toute façon quand je déclare ma variable, les "Shape" "Shapes" etc font partie de ses propositions, et ce sont des mots clé qu'il reconnaît (même sans activer la librairie d'ailleurs)
Je me suis fait un tout petit bout de code pour réessayer :
Sub essai()
Dim sd As Shapes 'Essayé aussi As Shape, As ShapeRange, ...
1 Set sd = Publisher.ActiveDocument.Pages(2).Shapes(3)
2 Publisher.ActiveDocument.ActiveView.ScrollShapeIntoView Shape:=sd
End Sub
A côté de ça j'ai bien sûr ouvert une instance Publisher, où j'ai créé un ptit document de 3 pages, avec quelques formes sur chacune d'elles.
Et librairie activée ou pas, tout ce qu'Excel sait me dire c'est "incompatibilité de type" à la ligne 1...
Pour finir j'ai essayé en déclarant une constante plutôt qu'une variable... mais à l'exécution il me dit "Constante requise" en surlignant le mot clé ".Shapes", alors qu'il est suivi de "(3)" donc c'est constant ça...
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumVba crã er nouvelle page
- benchmarkVba ouverture page web
- ForumVba mise en page paysage
- ForumVba mise en page longue
- ForumOuvrir page web vba
- ForumCopier page excel vba
- ForumSaut de page vba excel
- ForumOuverture page internet vba
- ForumVba ouvrir une page internet
- ForumVba sélectionner plage cellules
- Voir plus