Verrouillé 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:03
     
     
    Mettez 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
     
      A du code

    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
     
      A du code

    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:19
     
     
    Merci. 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:22
     
     
    Merci. 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
     
     Traitée

    Grace au titre je viens de trouver ça. Là je crois que j'ai tout.

    http://support.microsoft.com/kb/306682/fr


    Frank
  • dimanche 14 août 2011 17:19
     
     Traitée A du code

    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
  • dimanche 14 août 2011 17:36
     
     
    Merci de partager votre solution, surtout que cela est bien plus pratique que ce que je proposais :)

    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7