Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
891 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Outlook: pieces jointes partiellement sauvegardees

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Outlook: pieces jointes partiellement sauvegardees

n°1097025
llllllllll
Posté le 25-05-2005 à 17:28:14  profilanswer
 

Bonjour!
 
Quand un message arrive dans le repertoire Outlook DAS, je lance la macro pour qu'elle sauve toutes les pieces jointes des e-mails avec "ABCD" ou "EFGH" dans le sujet sur le serveur (avec une date au debut). Ensuite les e-mails sont marques lus et effaces. Le probleme est que seulement UNE piece jointe est enregistree  :??:  
 
Apparemment, cela viens de la position du :
 
                    Item.UnRead = False
                    Item.Delete
 
Mais si je le met plus tard, par exemple apres le "Next Atmt" ca ne marche pas...
 
Vous auriez pas une idee?
 
Voila le code:
-------------------------------------------------------
Sub DASFJ()
    On Error GoTo DAS_err
    Dim ns As NameSpace
    Dim Inbox As MAPIFolder
    Dim Mail As MailItem
    Dim Item As Object
    Dim Atmt As Attachment
    Dim FileName As String
    Dim i As Integer
    Dim DAS As MAPIFolder
    Set ns = GetNamespace("MAPI" )
    Set Inbox = ns.GetDefaultFolder(olFolderInbox)
    Set DAS = Inbox.Folders("DAS" )
    i = 0
'-----------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------
'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
'-----------------------------------------------------------------------------------
    For Each Item In DAS.Items
        For Each Atmt In Item.Attachments
                If InStr(Item.Subject, "ABCD" ) > 0 Then
                    FileName = "\\Server\ABCD\" & _
                    Format(Item.CreationTime, "yymmdd_" ) & Atmt.FileName
                    Atmt.SaveAsFile FileName
                    i = i + 1
                    Item.UnRead = False
                    Item.Delete
                End If
        Next Atmt
    Next Item
'-----------------------------------------------------------------------------------
    For Each Item In DAS.Items
        For Each Atmt In Item.Attachments
                If InStr(Item.Subject, "EFGH" ) > 0 Then
                    FileName = "\\Server\EFGH" & _
                    Format(Item.CreationTime, "yymmdd_" ) & Atmt.FileName
                    Atmt.SaveAsFile FileName
                    i = i + 1
                    Item.UnRead = False
                    Item.Delete
                End If
        Next Atmt
    Next Item
'-----------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------
DAS_exit:
    Set Atmt = Nothing
    Set Item = Nothing
    Set ns = Nothing
    Exit Sub
'-----------------------------------------------------------------------------------
DAS_err:
    MsgBox "An unexpected error has occurred." _
        & vbCrLf & "Please note and report the following information." _
        & vbCrLf & "Macro Name: GetAttachments" _
        & vbCrLf & "Error Number: " & Err.Number _
        & vbCrLf & "Error Description: " & Err.Description _
        , vbCritical, "Error!"
    Resume DAS_exit
 
End Sub

mood
Publicité
Posté le 25-05-2005 à 17:28:14  profilanswer
 

n°1097509
AlainTech
Pas trouvé? Cherche encore!
Posté le 26-05-2005 à 06:19:55  profilanswer
 

llllllllll a écrit :

Mais si je le met plus tard, par exemple apres le "Next Atmt" ca ne marche pas...


Je ne connais pas ce message d'erreur...
Comment veux-tu qu'on t'aide si tu ne nous dis pas ce qui se passe?

n°1097596
llllllllll
Posté le 26-05-2005 à 09:33:48  profilanswer
 

AlainTech a écrit :

Je ne connais pas ce message d'erreur...
Comment veux-tu qu'on t'aide si tu ne nous dis pas ce qui se passe?


 
En fait il n'y a pas de message d'erreur, quand je met
 
Item.UnRead = False  
Item.Delete  
 
apres Next Atmt. "Ca marche" mais ca ne fait pas ce que je veux: le code efface chaque message du repertoire DAS :(

n°1097639
AlainTech
Pas trouvé? Cherche encore!
Posté le 26-05-2005 à 10:13:56  profilanswer
 

Ben oui, c'est tout à fait logique puisque tu l'appliques à tous les messages.
 
Utilise une booléenne que tu positionnes à faux avant "For Each Atmt In Item.Attachments".
Tu la positionnes à vrai après "If InStr(Item.Subject, "ABCD" ) > 0 Then"
Et enfin, tu la testes après "Next Atmt" et tu delete si vrai.
 
Voilà.


Message édité par AlainTech le 26-05-2005 à 10:14:13

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
n°1097682
llllllllll
Posté le 26-05-2005 à 10:38:15  profilanswer
 

AlainTech,
 
Merci pour ta reponse,
 
Ca devrait donner ca:
 
    For Each Item In DAS.Items  
        For Each Atmt In Item.Attachments = False
                If InStr(Item.Subject, "ABCD" ) > 0 Then = True
                    FileName = "\\Server\ABCD\" & _  
                    Format(Item.CreationTime, "yymmdd_" ) & Atmt.FileName  
                    Atmt.SaveAsFile FileName  
                    i = i + 1  
                End If  
        Next Atmt  
IF True then        
Item.UnRead = False  
Item.Delete
End if

    Next Item  
 
 
 ? Desole je suis tres debutant en VBA...

n°1098263
AlainTech
Pas trouvé? Cherche encore!
Posté le 26-05-2005 à 15:48:20  profilanswer
 

Non, ça devrait plutôt donner ça:
 

Dim bHasAttach As Boolean
For Each Item In DAS.Items
  bHasAttach = False  
  For Each Atmt In Item.Attachments
    If InStr(Item.Subject, "ABCD" ) > 0 Then
      bHasAttach = True
      FileName = "\\Server\ABCD\" & _  
                 Format(Item.CreationTime, "yymmdd_" ) & Atmt.FileName  
      Atmt.SaveAsFile FileName  
      i = i + 1  
    End If  
  Next Atmt  
  IF bHasAttach Then          
    Item.UnRead = False  
    Item.Delete  
  End if  
Next Item


 
Edit --> Zut, j'avais laissé un = False après For Each. Je l'ai supprimé


Message édité par AlainTech le 26-05-2005 à 16:22:41

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
n°1098304
llllllllll
Posté le 26-05-2005 à 16:18:56  profilanswer
 

Merci. Je comprends mieux maintenant (et en plus ca marche donc c'est formidable!)
 
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Outlook: pieces jointes partiellement sauvegardees

 

Sujets relatifs
[VBA Excel macro]réutilisation de variable + comparaisons autoproblème VBA Access : "Procédure trop grande"
Comparaison de dates sous VBA[DIVERS] modifier un mail de Outlook 2003 ?
[Excel VBA] Groupe de contrôle sans nom (?!)scroll et VBA
Erreur VBA listbox et suppression de cellulesAffichage Clipboard à partir de VBA sous access
[VBA pour Excel] Nom de userformRécuperer les paramètres d'une fonction VBA
Plus de sujets relatifs à : [VBA] Outlook: pieces jointes partiellement sauvegardees


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR