[VBA] Outlook: pieces jointes partiellement sauvegardees

Outlook: pieces jointes partiellement sauvegardees [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 25-05-2005 à 17:28:14    

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

Reply

Marsh Posté le 25-05-2005 à 17:28:14   

Reply

Marsh Posté le 26-05-2005 à 06:19:55    

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?

Reply

Marsh Posté le 26-05-2005 à 09:33:48    

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 :(

Reply

Marsh Posté le 26-05-2005 à 10:13:56    

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!
Reply

Marsh Posté le 26-05-2005 à 10:38:15    

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...

Reply

Marsh Posté le 26-05-2005 à 15:48:20    

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!
Reply

Marsh Posté le 26-05-2005 à 16:18:56    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed