Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fusion et sélection de fichier

12 réponses
Avatar
Gloops
Bonjour tout le monde,

En ouvrant une source de donn=E9es (Excel) comme suit sous Word 2003 pour=
=20
cr=E9er une fusion (pour pr=E9senter automatiquement chaque enregistremen=
t=20
sur une page), je me ramasse une erreur 5121 lors de l'ouverture de=20
fichier sur l'instruction Merge, on me propose de v=E9rifier les=20
autorisations du fichier/lecteur, v=E9rifier que la m=E9moire et l'espace=
=20
disque sont suffisants, ou ouvrir le fichier avec le convertisseur=20
R=E9cup=E9ration de texte.

Si je fais la m=EAme chose =E0 la main la fusion se fait bien.

J'imagine que j'ai commis une bourde ?

Pour la s=E9lection du fichier par l'utilisateur, serait-ce une meilleure=
=20
id=E9e de passer par l'API ? =E7a a priori =E7a marche, mais si Microsoft=
=20
s'est donn=E9 le mal de fournir des bo=EEtes de dialogue dans Word,=20
j'imagine que la moindre des choses avant de faire appel aux API est de=20
v=E9rifier que =E7a apporte vraiment un plus. C'est gentil wdDialogFileOp=
en,=20
mais =E7a ouvre le fichier, plut=F4t que de le s=E9lectionner. Ou j'ai ou=
bli=E9=20
une astuce ?


Public Sub CreationFusion()
Dim strCheminFichier As String
strCheminFichier =3D SelFichier()
ActiveDocument.Merge FileName:=3DstrCheminFichier
End Sub


Public Function SelFichier()
Dialogs(wdDialogFileOpen).Show
SelFichier =3D Application.ActiveDocument.Path
ActiveDocument.Close
End Function

10 réponses

1 2
Avatar
Geo
Bonjour

Pour la sélection du fichier par l'utilisateur,



regardez FileDialog(msoFileDialogFilePicker) qui marche dans Word, pas
dans toutes les applications.

--
A+
Avatar
Gloops
Geo a écrit, le 14/11/2010 18:38 :
Bonjour

Pour la sélection du fichier par l'utilisateur,



regardez FileDialog(msoFileDialogFilePicker) qui marche dans Word, pas
dans toutes les applications.





Ah, ben la voilà, la réponse :)
Je regarde ça demain, merci.

Dans les autres applications je fais appel à l'API, normal, les autres
applications n'ont pas de boîte de dialogue intégrée.
Avatar
Geo
Bonjour

Dans les autres applications je fais appel à l'API, normal, les autres applications
n'ont pas de boîte de dialogue intégrée.



Oh mais non, je lance un word qui ne fais que ça : choisir le fichier.
Exemple (de choix de plusieurs dossiers) dans Outlook :

Sub PrépareListePublipostage()
Dim i As Integer
Dim appWord As New Word.Application
Dim appWordNouvelle As Boolean
Dim dialFichier As FileDialog
On Error Resume Next
Set appWord = GetObject(, "Word.Application")
If Err <> 0 Then
Set appWord = CreateObject("Word.Application")
appWordNouvelle = True
Else
appWordNouvelle = False
End If
On Error GoTo 0
i = -1
ReDim publipostagePJ(0)
Do
' Boite de dialogue de choix de fichiers
Set dialFichier = appWord.FileDialog(msoFileDialogFilePicker)
With dialFichier
.Title = "Choisissez des pièces à joindre ou cliquer sur Annuler"
If .Show = 0 Then Exit Do
End With
For j = 1 To dialFichier.SelectedItems.count
i = i + 1
ReDim Preserve publipostagePJ(i)
publipostagePJ(i) = dialFichier.SelectedItems(j)
Next j
Loop
If appWordNouvelle Then
appWord.Quit
End If
Set appWord = Nothing


etc

--
A+
Avatar
Gloops
Geo a écrit, le 15/11/2010 07:48 :
Bonjour

Dans les autres applications je fais appel à l'API, normal, les autr es
applications n'ont pas de boîte de dialogue intégrée.



Oh mais non, je lance un word qui ne fais que ça : choisir le fichier .
Exemple (de choix de plusieurs dossiers) dans Outlook :

Sub PrépareListePublipostage()
Dim i As Integer
Dim appWord As New Word.Application
Dim appWordNouvelle As Boolean
Dim dialFichier As FileDialog
On Error Resume Next
Set appWord = GetObject(, "Word.Application")
If Err <> 0 Then
Set appWord = CreateObject("Word.Application")
appWordNouvelle = True
Else
appWordNouvelle = False
End If
On Error GoTo 0
i = -1
ReDim publipostagePJ(0)
Do
' Boite de dialogue de choix de fichiers
Set dialFichier = appWord.FileDialog(msoFileDialogFilePicker)
With dialFichier
.Title = "Choisissez des pièces à joindre ou cliquer sur Annuler"
If .Show = 0 Then Exit Do
End With
For j = 1 To dialFichier.SelectedItems.count
i = i + 1
ReDim Preserve publipostagePJ(i)
publipostagePJ(i) = dialFichier.SelectedItems(j)
Next j
Loop
If appWordNouvelle Then
appWord.Quit
End If
Set appWord = Nothing


etc




Un temps on lançait Excel, pour ça, vu qu'Excel a proposé une boî te de
dialogue de sélection de fichier avant Word.

Enfin quand même, un module qui appelle directement l'API, ça doit qu and
même être plus léger, comme formule, non ?
Avatar
Geo
Bonjour

Un temps on lançait Excel, pour ça, vu qu'Excel a proposé une boîte de dialogue de
sélection de fichier avant Word.

Enfin quand même, un module qui appelle directement l'API, ça doit quand même être plus
léger, comme formule, non ?



Je ne connais pas l'API qui fait la même chose.
Ca dépend aussi de l'usage qu'on en fait.

--
A+
Avatar
Gloops
Geo a écrit, le 16/11/2010 07:03 :
Bonjour

Un temps on lançait Excel, pour ça, vu qu'Excel a proposé une bo îte de
dialogue de sélection de fichier avant Word.



Enfin quand même, un module qui appelle directement l'API, ça doit
quand même être plus léger, comme formule, non ?



Je ne connais pas l'API qui fait la même chose.
Ca dépend aussi de l'usage qu'on en fait.




C'est sûr.

On trouve un exemple là (site dédié à Access, mais on peut utilis er
l'exemple ailleurs aussi), je ne suis pas absolument certain que ça soi t
le plus digeste, mais l'idée est de le copier dans un module et lire ce
qui est écrit en dessous, ça c'est gérable, et puis après on creu se
tranquillement à son rythme si on aime bien comprendre ce qu'on utilise .
ça peut être sympa de comprendre l'articulation des infos, ça perme t
ensuite de régler comme on le souhaite le titre de la boîte de dialog ue,
le répertoire et nom de fichier par défaut ...

http://www.mvps.org/access/api/api0001.htm
http://www.mvps.org/accessfr/apis/api0001.htm

J'ai pu afficher la version anglaise sous Firefox, en revanche pour la
version française il faut Internet Explorer, c'est un défaut connu du site.

Le "aht" devant les noms de variables, ce n'est pas les initiales de
l'auteur, alors ... ça doit être celles de sa petite amie ? :)
Avatar
Gloops
Gloops a écrit, le 20/11/2010 03:52 :
http://www.mvps.org/access/api/api0001.htm
http://www.mvps.org/accessfr/apis/api0001.htm




Une petite curiosité : il y a dix ans, on trouvait dans le code

strFileTitle = Space(256)

qui fonctionnait très bien sous Windows 95.
Sous Windows XP, ça ne fonctionne pas (la boîte de dialogue ne s'ouvr e
carrément pas), d'où la correction :

strFileTitle = String(256, 0)

qui fonctionne sur les deux (et aussi avec les systèmes récents j'ima gine).

On initialise avec des caractères nuls, plutôt qu'avec des espaces.
Avatar
Geo
Bonjour

Le "aht" devant les noms de variables, ce n'est pas les initiales de l'auteur, alors
... ça doit être celles de sa petite amie ? :)



En espérant que l'auteur ne soit pas francophone, sinon, c'est un peu
ambigu !

Merci pour ces liens, ce n'est pas très simple, mais c'est vrai que
c'est très complet.
Ce qui nous manque dans le vba c'est une gestion de code source par
inclusion.
Si on pouvait mettre des trucs du genre
inclure ApiDeLecture param1, param2
ça simplifierait la lecture et ça sécuriserait le code.

--
A+
Avatar
Gloops
Geo a écrit, le 20/11/2010 10:10 :
Bonjour

Le "aht" devant les noms de variables, ce n'est pas les initiales de
l'auteur, alors ... ça doit être celles de sa petite amie ? :)



En espérant que l'auteur ne soit pas francophone, sinon, c'est un peu
ambigu !



:)


Merci pour ces liens, ce n'est pas très simple, mais c'est vrai que
c'est très complet.



Ah oui je me rappelle qu'au début j'ai copié sans rien comprendre, et
puis ça marchait, c'est ça l'essentiel.


Ce qui nous manque dans le vba c'est une gestion de code source par
inclusion.
Si on pouvait mettre des trucs du genre
inclure ApiDeLecture param1, param2
ça simplifierait la lecture et ça sécuriserait le code.




Hum, sécuriser en incluant un fichier texte qui peut être piraté pl us
facilement, j'sais pas, j'ai l'impression que c'est une question à
approfondir ...
Avatar
Gloops
Geo a écrit, le 16/11/2010 07:03 :
Bonjour

Un temps on lançait Excel, pour ça, vu qu'Excel a proposé une bo îte de
dialogue de sélection de fichier avant Word.



Enfin quand même, un module qui appelle directement l'API, ça doit
quand même être plus léger, comme formule, non ?



Je ne connais pas l'API qui fait la même chose.
Ca dépend aussi de l'usage qu'on en fait.




Une bonne adresse aussi pour les appels aux API :
http://allapi.mentalis.org/

On y trouve un éditeur à installer en local, et les déclarations de s API
et de leurs variables pour VBA/VB6 comme pour la plateforme .Net.

Les auteurs préviennent qu'ils n'ont plus le temps de mettre à jour, ce
qui est dommage, mais déjà avec ce qu'il y a en ligne il y a de quoi faire.
1 2