J'ai une secrétaire qui me fait une gaffe depuis un certain temps.
Lorsqu'elle sauve un attachement d'un émail, elle sauvegarde TOUT le mail en
format Word.
Résultat: J'ai aujourd'hui 1245 documents word qui représentent les mails.
Maintenant, je dois récupérer tous les fichiers attachés.
C'est faisable en faisant un clic droit sur l'objet et dans le menu qui
apparais, je dois faire:
- File Object => Save as
Vu que j'ai 1245 documents Word à ouvrir, j'aimerais automatiser le travail.
Comment???
Lorsque j'exécute l'enregistreur de macro, je pers le bouton droit de la souris.
Set attache = .OLEFormat.Object ' l'erreur se fait sur cette ligne.
Par contre .Oleformat.Edit ou .Oleformat.Open
Permettent d'ouvrir ou d'enregistrer le fichier.
-- A+
Andre
Bonjour,
Pour commencer, j'aimerais remercier Geo et Anacoluthe pour votre support et d'accepter de donner de votre temps pour moi.
Voici la situation: Cela fonctionne très bien en mode "pas à pas". Mais lorsque je le fait fonctionner en automatique, il n'active pas l'objet OLE, mais le document principal.
J'essaie de trouver le moyen de mettre l'objet OLE dans ma variable 'attache'.
Remarque sur le point (1) dans le code:
Lorsque j'observe le stack, je vois (en automatique), que le document principal est en index 1 et l'objet OLE en index 2. En mode "pas à pas", c'est l'inverse. Si je suis certain (à 100%) que l'objet OLE sera TOUJOURS en index 2, alors ma solution est trouvée.
Mais j'ose pas m'aventurer!
Qu'en pensez-vous?
André
Sub test() Dim objDoc As Word.Document Dim attache As Word.Document chemin = "D:FichierWord" ct = 1 fichier = Dir(chemin) While fichier <> "" If Right(fichier, 3) = "rtf" Then nom = fichier Set objDoc = Application.Documents.Open(chemin & fichier) If objDoc.InlineShapes.Count > 0 Then
' L'Objet OLE s'ouvre correctement. ' J'ai essayé également l'autre instruction (Edit) ' Même résultat ' ------------------------------------------------ objDoc.InlineShapes(1).OLEFormat.Open
' C'est ici qu'est le problème: ' En "pas à pas", c'est impeccable, cela fonctionne. ' En "automatique",il selectionne le document principal (objDoc) ' ------------------------------------------------------------- Set attache = ActiveDocument ' (1) voir la remarque ci-dessus nom = attache.Name
p = InStr(1, nom, ".") If p > 0 Then nom = Left(nom, p - 1) & CStr(ct) & Mid(nom, p, Len(nom)) End If ct = ct + 1 attache.SaveAs chemin & nom attache.Close End If objDoc.Close End If fichier = Dir Wend MsgBox "fini" End Sub
Bonjour,
Pour commencer, j'aimerais remercier Geo et Anacoluthe pour votre support et
d'accepter de donner de votre temps pour moi.
Voici la situation:
Cela fonctionne très bien en mode "pas à pas". Mais lorsque je le fait
fonctionner en automatique, il n'active pas l'objet OLE, mais le document
principal.
J'essaie de trouver le moyen de mettre l'objet OLE dans ma variable 'attache'.
Remarque sur le point (1) dans le code:
Lorsque j'observe le stack, je vois (en automatique), que le document principal
est en index 1 et l'objet OLE en index 2. En mode "pas à pas", c'est l'inverse.
Si je suis certain (à 100%) que l'objet OLE sera TOUJOURS en index 2, alors ma
solution est trouvée.
Mais j'ose pas m'aventurer!
Qu'en pensez-vous?
André
Sub test()
Dim objDoc As Word.Document
Dim attache As Word.Document
chemin = "D:FichierWord"
ct = 1
fichier = Dir(chemin)
While fichier <> ""
If Right(fichier, 3) = "rtf" Then
nom = fichier
Set objDoc = Application.Documents.Open(chemin & fichier)
If objDoc.InlineShapes.Count > 0 Then
' L'Objet OLE s'ouvre correctement.
' J'ai essayé également l'autre instruction (Edit)
' Même résultat
' ------------------------------------------------
objDoc.InlineShapes(1).OLEFormat.Open
' C'est ici qu'est le problème:
' En "pas à pas", c'est impeccable, cela fonctionne.
' En "automatique",il selectionne le document principal (objDoc)
' -------------------------------------------------------------
Set attache = ActiveDocument ' (1) voir la remarque ci-dessus
nom = attache.Name
p = InStr(1, nom, ".")
If p > 0 Then
nom = Left(nom, p - 1) & CStr(ct) & Mid(nom, p, Len(nom))
End If
ct = ct + 1
attache.SaveAs chemin & nom
attache.Close
End If
objDoc.Close
End If
fichier = Dir
Wend
MsgBox "fini"
End Sub
Pour commencer, j'aimerais remercier Geo et Anacoluthe pour votre support et d'accepter de donner de votre temps pour moi.
Voici la situation: Cela fonctionne très bien en mode "pas à pas". Mais lorsque je le fait fonctionner en automatique, il n'active pas l'objet OLE, mais le document principal.
J'essaie de trouver le moyen de mettre l'objet OLE dans ma variable 'attache'.
Remarque sur le point (1) dans le code:
Lorsque j'observe le stack, je vois (en automatique), que le document principal est en index 1 et l'objet OLE en index 2. En mode "pas à pas", c'est l'inverse. Si je suis certain (à 100%) que l'objet OLE sera TOUJOURS en index 2, alors ma solution est trouvée.
Mais j'ose pas m'aventurer!
Qu'en pensez-vous?
André
Sub test() Dim objDoc As Word.Document Dim attache As Word.Document chemin = "D:FichierWord" ct = 1 fichier = Dir(chemin) While fichier <> "" If Right(fichier, 3) = "rtf" Then nom = fichier Set objDoc = Application.Documents.Open(chemin & fichier) If objDoc.InlineShapes.Count > 0 Then
' L'Objet OLE s'ouvre correctement. ' J'ai essayé également l'autre instruction (Edit) ' Même résultat ' ------------------------------------------------ objDoc.InlineShapes(1).OLEFormat.Open
' C'est ici qu'est le problème: ' En "pas à pas", c'est impeccable, cela fonctionne. ' En "automatique",il selectionne le document principal (objDoc) ' ------------------------------------------------------------- Set attache = ActiveDocument ' (1) voir la remarque ci-dessus nom = attache.Name
p = InStr(1, nom, ".") If p > 0 Then nom = Left(nom, p - 1) & CStr(ct) & Mid(nom, p, Len(nom)) End If ct = ct + 1 attache.SaveAs chemin & nom attache.Close End If objDoc.Close End If fichier = Dir Wend MsgBox "fini" End Sub