[VBA Word] Ouverture et modification de classeur Excel sous Word [Résolu]

fguihot 4 Messages postés vendredi 18 août 2006Date d'inscription 28 mars 2007 Dernière intervention - 28 mars 2007 à 10:01 - Dernière réponse : fguihot 4 Messages postés vendredi 18 août 2006Date d'inscription 28 mars 2007 Dernière intervention
- 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 !!!
Afficher la suite 

Votre réponse

5 réponses

fguihot 4 Messages postés vendredi 18 août 2006Date d'inscription 28 mars 2007 Dernière intervention - 28 mars 2007 à 10:26
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de fguihot
cs_MPi 3864 Messages postés mardi 19 mars 2002Date d'inscription 22 mai 2018 Dernière intervention - 28 mars 2007 à 12:00
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MPi
fguihot 4 Messages postés vendredi 18 août 2006Date d'inscription 28 mars 2007 Dernière intervention - 28 mars 2007 à 10:43
0
Utile
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....
Commenter la réponse de fguihot
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 28 mars 2007 à 11:27
0
Utile
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:
Commenter la réponse de drikce06
fguihot 4 Messages postés vendredi 18 août 2006Date d'inscription 28 mars 2007 Dernière intervention - 28 mars 2007 à 12:43
0
Utile
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...
Commenter la réponse de fguihot

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.