Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/09/2011, 20h26   #1
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : 2
Points : 2
Par défaut Ouvrir un .doc par une Macro Word 2007

Dans une macro Word 2007 je souhaite ouvrir successivement des fichiers au format word 97.

La commande suivante fonctionne pour ouvrir un .docx:
Code :
1
2
3
4
5
Documents.Open fileName:=newPath & "\" & newFileName, _
                                ReadOnly:=True, _
                                ConfirmConversions:=False, _
                                Format:=wdOpenFormatAuto, _
                                Revert:=False
par contre lorsque la cible est un .doc la macro s'arrête sans même générer une erreur.

Quelqu'un a déjà rencontré ce problème?
JYG_perdu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 22h27   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
tu est sur que ta macro s'arrête bien la ..? essai d'exécuter ton code pas à pas ..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 07h25   #3
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : 2
Points : 2
Exécuté en pas à pas, le document s'affiche mais la macro est ensuite ré-initialisée (pointeur pas à pas sur l'instruction sub) ou en ajoutant une instruction MsgBox juste après cette commande, le message ne s'affiche pas.
L'insertion d'une instruction On error resume next n'a pas donné plus de résultat.

Lorsque la cible est un .docx par contre le document s'ouvre et la message box s'affiche.

J'ai essayé avec les différents valeurs possibles du paramètre format sans résultat.
JYG_perdu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 17h19   #4
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut JYG_perdu,

En fait, je pense que tu as un souci de scope de ta macro. Il faut bien comprendre comment ça fonctionne, c'est presque simple (en s'accrochant un peu) :


Lorsqu'un fichier est ouvert, ses modèles actifs sont chargés et tu peux lancer des macros de ce modèle. Si ta macro ferme le fichier, elle ferme le modèle mais certains modèles sont privilégiés et restent en permanence et continuer de fonctionner toujours, c'est le cas de "Normal.dotm" pour Word 2007/2010 et de "Normal.dot" pour Word 97/2003 sur PC (sur Mac, c'est légèrement différent).

Donc je pense que tu ouvres ton fichier 2007, que tu lis et que tu stockes le résultat en mémoire, pour l'exploiter dans une boucle ==> si tu as des fichiers Word 2007, c'est OK mais lorsque tu passes sur du Word 2003, tu perds ton scope, ou un truc de ce genre. Car c'est une supposition vu que l'on a pas ta macro. Si c'est le cas, c'est simple, ne ferme pas ton fichier initial comme ça tu ne perds pas son scope. Il suffit alors que tu travailles sur ActiveDocument, que tu ouvres (avec ta ligne de commande ça le fait) , que tu travaille sur ActiveDocument (qui entre temps a changé mais ce n'est pas grave), puis que tu le fermes et ton document initial redevient le ActiveDocument, tu finis ta boucle sur tous tes fichiers, puis tu fermes ton ActiveDocument (donc le initial) avec un
Code :
Application.Quit wdDoNotSaveChange
qui quitte Word sans sauvegarder ton fichier initial et le tour est joué.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 19h45   #5
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : 2
Points : 2
Merci Sepia pour ta réponse mais ...

Le fichier contenant la macro n'est pas fermé (en fait dans la macro complète il n'est même jamais fermé, il doit l'être par l'utilsateur). Le fichier .doc ouvert ne contient pas de macro à exécution automatique.
Donc s'il s'agit effectivement d'un pb de scope je ne vois pas ce qui pourrait être fait de plus pour ne pas perdre ce scope.

Pour info dans ma macro la fonction suivant le open (qui ne me rend pas la main) était justement un document.activate qui n'est donc jamais exécuté.
JYG_perdu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 22h40   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 332
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 332
Points : 29 238
Points : 29 238
Salut,

Pourrais-tu mettre tout ton code ?
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 10h00   #7
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : 2
Points : 2
Voici le code:
Citation:
Sub Essai_Ouverture()

'
' Essai_Ouverture Macro
'
' Test l'existence du fichier

If Dir("d:\Essai\F2.doc") = "F2.doc" Then

Documents.Open filename:="d:\Essai\F2.doc", _
ReadOnly:=True, _
Format:=WdOpenFormat.wdOpenFormatDocument97, _
Revert:=False, _
ConfirmConversions:=False

MsgBox "Fichier ouvert"
Else

MsgBox "Fichier inexistant"
End If


End Sub
J'ai un peu poursuivi mes investigations et la réponse est probablement dans la direction évoquée par Sepia qui parle de scope de macro.

La macro fonctionne avec un fichier .doc créé pour le besoin par contre avec le fichier que je veux ouvrir alors qu'il ne comporte aucune macro (ni dans le document ni dans un modèle sous-jacent) en éxécution pas à pas l'éditeur VBA se positionne dans le projet de ce fichier (Project (F2) / Modules/NewMacros).

Je poursuis mes investigations.
JYG_perdu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 10h24   #8
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : 2
Points : 2
En fait dans les fichiers que je voulais ouvrir il n'y avait plus de Macro par contre dans la structure du projet il restait Project (F2)/Modules/NewMacros.

Le fait de supprimer dans l'arborescence projet NewMacros résoud mon problème.

Merci à tous de m'avoir orienté vers la solution.
JYG_perdu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 18h46   #9
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut JYG_perdu,

Content que tu aies réussi et que tu t'en sois sorti. Ce problème est assez complexe à expliquer , comme on n'a fait qu'orienter, c'est mieux car cela signifie que tu as assimilé les arcanes du scope des macros.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h55.


 
 
 
 
Partenaires

Hébergement Web