IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment écrire en VBA dans des signets de Word ?


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut Comment écrire en VBA dans des signets de Word ?
    Bonjour,
    Je dois rappatrier des données d'Excel vers un document Word.
    J'ai créé des signets dans Word à cette fin (ici l'exemple d'un seul signet). Mais j'obtiens l'erreur "La classe ne gère pas l'automation ou la classe attendue". J'ai pourtant coché dans menu Références/Outils : Microsoft Word, Excel, Office 10.0 Object Library, Forms 2.0 Library, Visual Basic For Application et même Microsoft DAO 3.6 Object Library et OLE Automation. Rien n'y a fait. Pouquoi ?
    Merci de votre aide. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub Trt_fiche(chefdesecteur As String, comptable As String, ByRef secteur As String, ByRef numerodefiche As String, ByRef redacteur As String, numCGL As String, JCPC As String, ByRef datesaisie As Date, datecomptable As Date, sensCpte1 As String, lettre1 As String, cpte1 As String, specCpte1 As String, sensCpte2 As String, lettre2 As String, cpte2 As String, specCpte2 As String, montant As String, libelle As String)
            Dim var1 As String
            Dim var2 As Integer
            Dim chemin As String
            Dim prefixecomptable As String
            Dim WordApp As Word.Application
            Dim WordDoc As Word.Document
            chemin = "C:\Users\acer\Desktop\5-11-2009 bis bureau"
     
            ' Ouvre session word
            Set WordApp = New Word.Application
     
            ' Ouvre document Word
            Set WordDoc = WordApp.Documents.Open(chemin & "\modele.doc")
     
            ' Word est visible pendant l'opération
            WordApp.ShowMe
            WordApp.Visible = True
     
            ' Ecriture document au signet 'secteur'
            WordDoc.Bookmarks.Item ("secteur")
            WordDoc.Bookmarks("secteur").Range.Text = secteur
            With WordDoc.Bookmarks("secteur")
                .Range.Font.Size = 14
                .Range.Bold = wdToggle
                .Range.Italic = wdToggle
            End With
            Application.DisplayAlerts = True    
     
    (..id..)    
     
           ' Sauvegarde
           'WordApp.ActiveDocument.SaveAs chemin & "\fic"
           WordDoc.SaveAs "C:\Users\acer\Desktop\5-11-2009 bis bureau\fic"
     
           ' Fermeture
           'WordApp.ActiveDocument.Close
           'WordApp.ActiveDocument.Quit
           'Set WordApp = Nothing
           'Set WordDoc = Nothing
           WordDoc.Close True
           WordApp.Quit
    Exit Sub

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Tu ne nous dis rien de la ligne générant l'erreur...
    J'ai des difficultés à comprendre cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks.Item ("secteur")
    Tu aurais probablement intérêt à poser ta question dans la section vouée à Word (dont la syntaxe parait celle mise en cause).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut
    Merci de m'avoir répondu !
    La ligne mise en cause est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WordApp = New Word.Application
    Autrement dit, il plante dès l'ouverture ! Si je mets son équivalent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateObject("word.application")
    j'ai toujours une erreur.

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks.Item ("secteur")
    signifie d'écrire dans Word au signet (item) baptisé "secteur". J'y colle une variable du même nom.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Si tu as bien coché la référence à Word, tu ne devrais pas avoir cette erreur sur cette ligne (je viens d'essayer) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim AppWord As Word.Application 
     
         Set AppWord = New Word.Application
    Et aucun problème à ce niveau là !

    Je ne comprends toujours pas la ligne dont je t'ai parlé, par contre !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut
    C'est bien pourquoi je m'arrache les cheveux depuis des jours !
    Au bureau, ça marche (windows XP, Office 2002) et chez moi sur Vista (Office 2002 aussi), ça plante.

    Mais j'ai réussi à lancer le fichier Word ce matin. Sans qu'il rappatrie les données malheureusement. Ce n'est donc pas lié à l'OS. Et depuis, il ne lance plus rien. J'ai trop modifié mon code...

    Est-il possible d'envoyer à quelqu'un un zip de mon petit programme avec ses répertoires pour montrer l'appel de procédure depuis 1 bouton ? Peut-être le problème vient-il de la variable secteur ? Pourtant elle est remplie correctement. Mais j'ai lu qu'il fallait parfois rajouter ByRef avant le nom de la variable passée en paramètre. Or j'ignore la signification de ByRef.

    Je ne sais même pas quand il faut privilégier une déclaration As Object plutôt que As [New] Word.Document... J'ai appris par moi-même....

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Août 2009
    Messages : 85
    Par défaut
    Idem, j'ai testé la ligne proposée, aucun pb...

    avec Word 2003, j'ai coché la référence

    Microsoft Word 11.0 Object Library.

    Si tu fais F2 pour afficher l'explorateur d'objets, si tu déroules la liste ou tu as <toutes bibliothèques>, tu vois bien word ??

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut
    Oui je vois bien Word.
    A noter que la procédure Sub appelée est dans Module1 (du projet qui a créé une feuille Excel). Faut-il cocher la même chose (les mêmes bibliothèques) à tous les projets et Modules concernés ?
    Que signifie au juste l'erreur que je trimbale depuis des jours ("la classe ne gère pas Automation ou l'interface attendue" ? Dois-je cocher OLE Automation ? Au bureau, il me semble que ce n'était PAS coché (ni d'ailleurs DAO) et l'appel de Word s'exécutait !

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Effectivement, il te manque la librairie automation.
    Par contre, DAO tu n'en as pas besoin.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par franck92300 Voir le message
    J'ai pourtant coché dans menu Références/Outils : Microsoft Word, Excel, Office 10.0 Object Library, Forms 2.0 Library, Visual Basic For Application et même Microsoft DAO 3.6 Object Library et OLE Automation.
    Je ne comprends plus.

    EDIT :
    Je viens de surcroît de ne laisser que les références (en abrégé) :
    - VBA
    - Excel
    -Word

    L'erreur dénoncée, sur la ligne dénoncée, ne se produit pas !
    Pour mémoire :
    Citation Envoyé par franck92300 Voir le message
    La ligne mise en cause est celle-ci :

    Set WordApp = New Word.Application

    Autrement dit, il plante dès l'ouverture !
    EDIT 2 :
    je n'écarte à ce stade pas un problème MDAC

  10. #10
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WordDoc.Bookmarks.Item ("secteur")
    Pour l'accès au signet, il n'est pas utile de passer par la propriété Item

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks("secteur")
    Le fera tout aussi bien.

    Pour ByRef, c'est assez simple, byValue permet de passer en paramètre la valeur.
    Cette "valeur" n'existe alors qu'au sein de la procédure, lorsque la procédure est terminée, la valeur meurt.

    ByRef est différent, c'est une référence à l'emplacement mémoire occupé par la valeur qui est passé en paramètre.
    Si cette "valeur" est modifiée, c'est la valeur en mémoire qui l'est.

    http://heureuxoli.developpez.com/off...e=page8#L8-C-1

    Si tu veux faire un essai, utilise ce code en Word.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub AjouterBM()
    Dim oDoc As Document
    Dim myBM As Bookmark
     
    Set oDoc = Documents.Add
    Set myBM = oDoc.Bookmarks.Add(Name:="MonBM", Range:=Selection.Range)
    myBM.Range.Text = "Mon Texte de signet"
     
    Set myBM = Nothing
    Set oDoc = Nothing
     
     
    End Sub
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Re, Franck,

    Je cherchais à droite et à gauche des explications... (je cherche encore)

    Au cours de mes recherches, je suis tombé sur ceci :
    http://www.developpez.net/forums/d61...icrosoft-word/
    Bien que cela n'ait rien à voir avec le problème que tu rencontres et tel que tu le définis, il m'a paru utile de te faire part de l'existence de cette discussion.
    Va directement au message n° 8 ==>> et passe, dans ce message, au paragraphe intitulé "Exporter des données Excel vers plusieurs signets d'un document Word"
    Une autre fois : bien que cela n'ait rien à voir avec le message que tu reçois dès l'ouverture.

    EDIT :
    je te communique également la liste des applis "automatisables", juste pour que tu vérifies sur ta machine.
    Microsoft Access 2000 ===>> Msacc9.olb
    Classeur Microsoft 2000 ===>> Msbdr9.olb
    Microsoft Excel 2000 ===>> Excel9.olb
    Microsoft Graph 2000 ===>> Graph9.olb
    Microsoft Office 2000 ===>> Mso9.dll
    Microsoft Outlook 2000 ===>> Msoutl9.olb
    Microsoft PowerPoint 2000 ===>> Msppt9.olb
    Microsoft Word 2000 ===>> Msword9.olb

    Microsoft Access 2002 ===>> Msacc.olb
    Microsoft Excel 2002 ===>> Excel.exe
    Microsoft Graph 2002 ===>> Graph.exe
    Microsoft Office 2002 ===>> MSO.dll
    Microsoft Outlook 2002 ===>> MSOutl.olb
    Microsoft PowerPoint ===>> 2002 MSPpt.olb
    Microsoft Word 2002 ===>> MSWord.olb

    Microsoft Office Access 2003 ===>> Msacc.olb
    Microsoft Office Excel 2003 ===>> Excel.exe
    Graphique Microsoft Office 2003 ===>> Graph.exe
    Microsoft Office 2003 ===>> MSO.dll
    Microsoft Office Outlook 2003 ===>> MSOutl.olb
    Microsoft Office PowerPoint 2003 ===>> MSPpt.olb
    Microsoft Office Word 2003 ===>> MSWord.olb

    Microsoft Office Access 2007 ===>> Msacc.olb
    Microsoft Office Excel 2007 ===>> Excel.exe
    Microsoft Office Outlook 2007 ===>> MSOutl.olb
    Microsoft Office PowerPoint 2007 ===>> MSPpt.olb
    Microsoft Office Word 2007 ===>> MSWord.olb

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/05/2007, 23h10
  2. [VBA-E] Comment écrire à la suite dans une cellule ?
    Par bogosse dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/07/2006, 13h03
  3. Réponses: 7
    Dernier message: 17/03/2006, 13h26
  4. Comment écrire en inverse dans un TListView ?
    Par aliwassem dans le forum Composants VCL
    Réponses: 1
    Dernier message: 16/09/2005, 17h42
  5. [VBA Excel] Comment écrire un code dans le ThisWorkBook ?
    Par WebPac dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/05/2005, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo