[VBA Word] Ouverture et modification de classeur Excel sous Word

Résolu
fguihot Messages postés 4 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 28 mars 2007 - 28 mars 2007 à 10:01
fguihot Messages postés 4 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 28 mars 2007 - 28 mars 2007 à 12:43
Bonjour à tous !!!
Petite mise au point : J'ai découvert le VBA il y a peu, et il est possible que je passe à côté de grosses erreurs conceptuelles... Merci d'avance de m'éclairer...
Voila mon PB : En gros, j'ai un modèle de document sous word, et je voudrait créer une macro qui enregistre des renseignements pris de ce documents dans un classeur excel de résumé (Par exemple : Nom de fichier, emplacment, auteur, titre, sujet, version, etc... Bref, de quoi faire une base de donnée pour retrouver tous ses documents quand on est bordélique...)
Débutant en VBA, j'ai mis au point la macro sous excel en VBA, pour me faire la main.
Ensuite, je l'ai copiée sous word, en créant l'application Excel, et l'objet WorkBook.
Et le code qui marche très bien sous Excel ne fonctionne pas sous Word...

Voici le code simplifié en question :

Public Sub InscriptionDB()

DimMyFileName As String
Dim Selection As Range
Dim NLigne As Integer

MyFileName = "c:\MyXls.xls" 'Nom du fichier Excel qui stocke tout. Il contient une feuille appellée "Documents"
Dim MonExcel As Object 'Référence à l'application Excel qui va être instanciée
Dim MonWorkBook As Object'Référence au classeurqui va être ouvert

Set MonExcel = CreateObject("Excel.Application") 'On lance l'application
Set MonWorkBook = MonExcel.Workbooks.Open(MyFileName, , False) 'On ouvre le classeur depuis l'application
MonExcel.Application.Visible = False'On laisse l'application invisible

' DEBUT partie de code fonctionnant sous VBA Excel, mais générant une erreur sous VBA Word
'Selectionne l 'ensemble de la colonne jusque la première case vide
Set Selection = MonWorkBook.Sheets("Documents").Range("A2",MonWorkBook.Sheets("Documents").Range("A2").End(xlDown))

'Recherche si le document est déja enregistré...
For Each Cellule In Selection.Cells
    If Cellule.Value = ActiveDocument.CustomDocumentProperty("Numéro de document DB") Then
        MsgBox "Erreur : Document déja enregistré ligne : " & Cellule.Item() & " !!!"
    End If
Next
'FIN partie de code fonctionnant sous VBA Excel

MonExcel.Workbooks.Close
MonExcel.Quit
End Sub

En fait, ç'est la selection qui ne fonctionne pas... Il y a un message d'erreur très explicite :
Erreur d'execution '1004'
Erreur définie par l'application ou l'objet

Lorsque j'écrit la partie de code sous Excel en remplaçant  MonExcel.MonWorkBook par ThisWorkBook, cela fonctionne très bien
Je suis passé à coté de quoi ???? Peut on lancer ce type de code depuis une macro word, ou est-ce interdit ???
D'avence, merci !!!

5 réponses

fguihot Messages postés 4 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 28 mars 2007
28 mars 2007 à 10:26
Houla !!!
J'ai trouvé ma boulette....

Je déclare un objet Range sous Word, qui semble à priori totalement différent de l'objet Range sous Excel....
Et bien sur, je charge ce Word.Application.Range par Excel.Application.Range

D'ou l'erreur de cast...
En déclarant
Dim Selection as Object
Cela fonctionne très bien....

Grrr Pourquoi avoir donné le même nom.... C'est vraiment un piège à con. Et je suis tombé dedans...
La prochaine fois, je chercherai un poil plus avant de crier à l'aide....
A plus.
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 mars 2007 à 12:00
Plutôt que de déclarer tes variables As Object, crée une référence à Excel et utilise des variables comme ceci
Dim xlApp As Excel.Application
Dim xlBook as Excel.Workbook
Dim xlSheet As Excel.Worksheet

....
Comme ça tu pourras utiliser ces objets comme si tu étais sous Excel

Recherche ces mots sur le site et tu trouveras plein de choses dans les forums et sources.

MPi
3
fguihot Messages postés 4 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 28 mars 2007
28 mars 2007 à 10:43
Bon, ce truc m'a fait prendre conscience des grosses différences entre VBA word et VBA Excel, et je viens de m'apercevoir que toutes les constantes de VBA Excel (ex : xldown, xlup) sont inconnues sous VBA word...
D'ou le meme message d'erreur pour
Set Selection = MonWorkBook.Sheets("Documents").Range("A2",MonWorkBook.Sheets("Documents").Range("A2").End(xlDown))

Est ce que quelqu'un connais un moyen de faire un include, ou est ce que je dois taper à chaque fois la valeur exacte des constantes ????
D'avance merci....
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
28 mars 2007 à 11:27
Salut, j'arrive pas te suivre tu veux faire ça dans excel ou dans word! En tout cas si j'ai bien compris tu veux faire des manip excel avec vba word?



Set Selection = MonWorkBook.Sheets("Documents").Range("A2",MonWorkBook.Sheets("Documents").Range("A2").End(xlDown))

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fguihot Messages postés 4 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 28 mars 2007
28 mars 2007 à 12:43
Merci pour les réponses, je vais essayer...

...Et oui, je veux à partir d'une macro sous word, ouvrir un classeur excel et mettre à jours des cellules de ce classeur, à partir de variables prises dans le document word....
Le pépin, c'est que pour faire des manips sur ce classeur, j'utilise des objets et des constantes spécifiques à excel, et donc inconnus sous word.  Je vais essayer la manip de MPi...
0
Rejoignez-nous