vba (word) vers visual studio 2010
-
mardi 2 août 2011 11:03
Bonjour,
Existe-t-il un moyen simple de transférer un macro écrite en vba (word) vers visual studio 2010 ?
Merci.
Frank
Toutes les réponses
-
dimanche 14 août 2011 08:40
Oui c'est possible après je ne sais pas si c'est cela est simple.
Voici un lien vous permetant de vous aider pour commencer :
http://msdn.microsoft.com/fr-fr/library/kw65a0we(v=VS.100).aspx
En gros il suffit de référencer la dll Microsoft.Office.Interop.Word et manipuler le wrapper par l'intermédiaire de votre language VB ou C#.
Si vous avez besoin d'aide et si vous coder en c#, n'hésitez pas mettre le code de votre Macro, et j'essayerai de vous aider.
Cordialement, Pascal.
Développeur Wpf/SilverLight/WinPhone7
-
dimanche 14 août 2011 10:54
Bonjour et merci.
Je vais regarder ça en appronfondi et merci pour votre offre malheureusement par fainéantise j'ai choisis le vb pour l'instant. Des années de vb6 et de vba ...
Cordialement,
Frank -
dimanche 14 août 2011 11:03Mettez une macro simple en VBA et je verrais si je peux vous aider.
Cordialement, Pascal.
Développeur Wpf/SilverLight/WinPhone7
-
dimanche 14 août 2011 11:13
Merci.
Voici une petite macro.
Sub TousLesDocDuDossierEnUn() Dim sh, fold, fs, f On Error Resume Next Set sh = CreateObject("Shell.Application") Set fold = sh.BrowseForFolder(0, "Choisir le dossier contenant les fichiers à assembler dans un même document.", 592) fold = "" & fold.Items.Item.Path If Err.Number <> 0 Then Exit Sub Set fs = CreateObject("Scripting.FileSystemObject") For Each f In fs.getFolder(fold).Files If UCase(Right(f.Name, 4)) = ".DOC" Or UCase(Right(f.Name, 5)) = ".DOCX" Then Selection.EndKey Unit:=wdStory Selection.InsertFile FileName:=f, Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False End If Next End Sub
Frank -
dimanche 14 août 2011 13:08
Bonjour,
J'espère avoir bien compris ce que faisais la macro, on sélectionne un répertoire et tous les document word sont fusionner en un seul document.
Voila un début en C# (oui je suis mauvais en VB que je ne connais pas, mais je pense que cela doit etre assez simple à transformer).
private void TousLesDocDuDossierEnUn() { //On ouvre une instance de word WordDll.Application application = new WordDll.Application(); application.Visible = true; System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog(); System.Windows.Forms.DialogResult result = dialog.ShowDialog(); //On sélectionne le réperoire if (result == System.Windows.Forms.DialogResult.OK) { //On récupère tous les fichiers du répertoire de type Docx String[] repertoire = Directory.GetFiles(dialog.SelectedPath, "*.Docx"); //On ajoute un Document à Word WordDll.Document doc = application.Documents.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing); foreach (String s in repertoire) { if(doc.Path == string.Empty) doc.SaveAs(dialog.SelectedPath + "\\Merge.Docx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //Et pour chaque document word on le fusionne au nouveau doc object MergeTarget = WordDll.WdMergeTarget.wdMergeTargetCurrent; object DetectFormatChanges = true; object UseFormattingFrom = WordDll.WdUseFormattingFrom.wdFormattingFromCurrent; object AddToRecentFiles = true; doc.Merge(s, ref MergeTarget, ref DetectFormatChanges, ref UseFormattingFrom, ref AddToRecentFiles); } } }Cordialement, Pascal.
Développeur Wpf/SilverLight/WinPhone7
-
dimanche 14 août 2011 15:19Merci. C'est bien un agrégateur de fichier word. Mais là c'est de la conversion manuelle. J'ai quelques milliers de lignes à convertir. J'ai commencé à developper une macro (un bête changement de texte) mais je crois que d'aprés le lien que tu m'avais mis au début ça doit déjà être possible en automatique. Sinon je recherche une solution intérmédiaire pour lancer une macro VBA à partir d'un complément écris sous vsto. Avez-vous une idée ? Merci encore pour votre travail.
Frank -
dimanche 14 août 2011 16:14
Aucune idée, il est vrai qu'avec la programmation sur Office , je suis plus à l'aise avec Outlook.
Mais j'ai trouver ce lien qui concerne le C# et est aussi applicable en vb :
http://support.microsoft.com/kb/306683
Cordialement, Pascal.
Développeur Wpf/SilverLight/WinPhone7
-
dimanche 14 août 2011 16:22Merci. Ca c'est une super piste. Dommage que ce ne soit pas en vb. Mais je pense que je vais m'en sortir quand même.
Frank -
dimanche 14 août 2011 16:26
Grace au titre je viens de trouver ça. Là je crois que j'ai tout.
http://support.microsoft.com/kb/306682/fr
Frank- Proposé comme réponse Pascal Saille dimanche 14 août 2011 17:36
- Marqué comme réponse Ciprian DuduialaOwner mercredi 7 septembre 2011 10:12
-
dimanche 14 août 2011 17:19
En fait c'est encore plus simple. Comme je suis en train de faire un complément word il me suffit de faire une commande :
Application.Run("NomDeMaMacro")
On peut même faire un nom composé NomDeMonModèle.NomDeMonModule.NomDeMaMacro
Frank- Proposé comme réponse Pascal Saille dimanche 14 août 2011 17:36
- Marqué comme réponse Ciprian DuduialaOwner mercredi 7 septembre 2011 10:12
-
dimanche 14 août 2011 17:36Merci de partager votre solution, surtout que cela est bien plus pratique que ce que je proposais :)
Cordialement, Pascal.
Développeur Wpf/SilverLight/WinPhone7

