none
VBA Outlook - Erreur d'éxécution 75

    Question

  • Bonsoir à toutes et à tous,

    Je rencontre actuellement un problème dans une macro que j'ai crée sur Outlook sur certains ordinateurs. En effet, sur le mien elle fonctionne correctement mais sur les ordinateur de deux collègues cela coince !

    La macro que j'ai développée me permet d'enregistrer les pièces jointes d'un mail tout en les renommant en les ajoutant par la suite dans un nouveau mail. Juste là pas de problème cela fonctionne sur mon ordinateur. Mais lors de l’exécution du programme sur certains ordinateurs, il y a une erreur à cette ligne :

    Name savePath & nameOldFile As savePath & nameNewFile & extensionFile 'On enregistre avec nouveau nom

    J'ai une erreur d’exécution 75 (chemin inaccessible ou fichier existant). Par contre si je continue l’exécution de la macro après quelle se soit arrêtée en cliquant sur "Continuer" (F5), la macro continue comme si de rien était.

    J'ai également ajouté une pause avant cette instruction pour laissé le temps à l'ordinateur de bien écrire le fichier sur le disque dur mais rien n'y fait...

    Quelqu'un aurait-il(elle) une solution à me proposer ?

    Je vous remercie par avance !

    Thomas  

    lundi 12 mars 2018 20:50

Toutes les réponses

  • Quelles sont les lignes avant celle-là?

    Peut-être que tu devrais insérer une petite pause avant cette commande, ou une boucle qui vérifie l'existance du fichier avant de continuer, mais sans voir ton code complet c'est très difficile à dire.


    Daniel Pineault, 2010-2017 Microsoft MVP
    Professional Support: http://www.cardaconsultants.com
    MS Access Tips and Code Samples: http://www.devhut.net


    lundi 12 mars 2018 20:54
  • Bonjour,

    Je te remercie de ta réponse,

    J'ai effectivement mit une pause avant cette ligne de 500 milli secondes mais ça bug toujours sur cette ligne et quand je cliques sur continuer dans l'éditeur VBA ça repart...

    Voici le code en question:

    Sub saveAttachments(savePath As String, item As Outlook.MailItem) 'Sauvegarde et renommage des pièces jointes voulu
    
            Set attachs = item.Attachments
            'MsgBox (attachs.Count)
            For Each attach In attachs
            
                nameOldFile = attach.FileName 'On stocke le nom de la pièce jointe
                extensionFile = Mid(nameOldFile, InStrRev(nameOldFile, ".")) 'On récupére l'extension du fichier
    
                If extensionFile = ".PDF" Or extensionFile = ".pdf" Or extensionFile = ".Pdf" Or extensionFile = ".doc" Or extensionFile = ".docx" Or extensionFile = ".xls" Or extensionFile = ".xlsx" Or extensionFile = ".xlsm" Then
                    
                    attach.SaveAsFile savePath & nameOldFile 'Sauvegarde pièce jointe
                    '---------------Renomme la pièce jointe enregistrée--------------------------------------------------------------------
                    nameNewFile = "" 'Rénitialisation de la variable entre 2 fichiers
                    Renommer_PJ.Show
                    While RetourBoutonOK <> True
                    Wend
                                    
                    If nameNewFile <> "" Then
                    
                    Temporisation
    
                        Name savePath & nameOldFile As savePath & nameNewFile & extensionFile 'On enregistre avec nouveau nom
                        If tabSupprUilise = 0 Then
                            tabSupprUilise = 1
                            ReDim tabConserver(1, 0)
                            tabConserver(0, 0) = nameOldFile
                            tabConserver(1, 0) = savePath & nameNewFile & extensionFile
                        Else
                            ReDim Preserve tabConserver(1, (UBound(tabConserver, 2) + 1))
                            tabConserver(0, UBound(tabConserver, 2)) = nameOldFile
                            tabConserver(1, UBound(tabConserver, 2)) = savePath & nameNewFile & extensionFile
                        End If
                    Else
                        Temporisation
                        Kill (savePath & nameOldFile) 'On supprime la pièce jointe temporaire qui nous intéresse pas
                    End If
                    
                Else 'Si pas format adéquat on fait rien
                End If
    
            Next
    End Sub
    
    Sub Temporisation()
        Sleep (500)    ' pause de 500 mili secondes
    End Sub

    Merci d'avance

    mardi 13 mars 2018 06:50
  • Moi je ferrais quelque chose du genre

    Sub saveAttachments(savePath As String, item As Outlook.MailItem)    'Sauvegarde et renommage des pièces jointes voulu
        On Error GoTo Error_Handler
        'Dim ...
        'Dim ...
        'Dim ...
    
        Set attachs = item.Attachments
        'MsgBox (attachs.Count)
        For Each attach In attachs
            nameOldFile = attach.FileName     'On stocke le nom de la pièce jointe
            extensionFile = Mid(nameOldFile, InStrRev(nameOldFile, "."))     'On récupére l'extension du fichier
    
            If extensionFile = ".PDF" Or extensionFile = ".pdf" Or extensionFile = ".Pdf" Or _
               extensionFile = ".doc" Or extensionFile = ".docx" Or extensionFile = ".xls" Or _
               extensionFile = ".xlsx" Or extensionFile = ".xlsm" Then
                attach.SaveAsFile savePath & nameOldFile     'Sauvegarde pièce jointe
                '---------------Renomme la pièce jointe enregistrée--------------------------------------------------------------------
                nameNewFile = ""     'Rénitialisation de la variable entre 2 fichiers
                Renommer_PJ.Show
                While RetourBoutonOK <> True
                Wend
    
                If nameNewFile <> "" Then
                    Do While Len(Dir(savePath & nameOldFile)) = 0
                        Sleep (500)
                    Loop
    
                    Name savePath & nameOldFile As savePath & nameNewFile & extensionFile     'On enregistre avec nouveau nom
                    If tabSupprUilise = 0 Then
                        tabSupprUilise = 1
                        ReDim tabConserver(1, 0)
                        tabConserver(0, 0) = nameOldFile
                        tabConserver(1, 0) = savePath & nameNewFile & extensionFile
                    Else
                        ReDim Preserve tabConserver(1, (UBound(tabConserver, 2) + 1))
                        tabConserver(0, UBound(tabConserver, 2)) = nameOldFile
                        tabConserver(1, UBound(tabConserver, 2)) = savePath & nameNewFile & extensionFile
                    End If
                Else
                    Sleep (500)
                    Kill (savePath & nameOldFile)     'On supprime la pièce jointe temporaire qui nous intéresse pas
                End If
    
            Else     'Si pas format adéquat on fait rien
            End If
        Next
    
    Error_Handler_Exit:
        On Error Resume Next
        If Not attachs Is Nothing Then Set attachs = Nothing
        Exit Sub
    
    Error_Handler:
        MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
               "Error Number: " & Err.Number & vbCrLf & _
               "Error Source: saveAttachments" & vbCrLf & _
               "Error Description: " & Err.Description & _
               Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
               , vbOKOnly + vbCritical, "An Error has Occured!"
        Resume Error_Handler_Exit
    End Sub

    Cependant, j'ai une question pourquoi pas changer

    attach.SaveAsFile savePath & nameOldFile     'Sauvegarde pièce jointe

    pour le nommer avec le bon nom?  Pouquoi pas attendre d'avoir le nouveau nom du fichier avant de le sauver?

    attach.SaveAsFile savePath & nameNewFile & extensionFile     'Sauvegarde pièce jointe


    Daniel Pineault, 2010-2017 Microsoft MVP
    Professional Support: http://www.cardaconsultants.com
    MS Access Tips and Code Samples: http://www.devhut.net


    mercredi 14 mars 2018 00:33
  • Bonjour,

    Effectivement je pense que ta solution est meilleure.

    En fait j'enregistre la pièce jointe de "base" pour la visualiser dans un userform et lui donner un nouveau nom.

    Je teste ta solution dès que possible et t'informe du retour !

    Merci

    mercredi 14 mars 2018 08:26
  • Alors,

    J'ai remplacé mon code par le tien. Et cela fonctionne !

    Mon seul problème est que je doit enregistrer la pièce jointe avant de lui donner son nouveau nom car je l'affiche dans un userform pour pouvoir visualiser la pièce jointe et lui donner un nouveau nom.

    Donc à ce niveau, ce que je fait:

    1. J'enregistre la pièce jointe du mail avec le nom original: 

    attach.SaveAsFile savePath & nameOldFile 'Sauvegarde pièce jointe

    2. Je l'affiche dans mon userform, l'utilisateur entre le nouveau nom (boutonOK) puis je referme la pièce jointe et le userform

    Sub UserForm_Initialize()
    RetourBoutonOK = False
    TextBoxOldName = nameOldFile
    Me.WebBrowser1.Navigate savePath & nameOldFile
    End Sub
    
    Private Sub Bouton_OK_Click()
    Me.WebBrowser1.Navigate "about:blank"
    nameNewFile = TextBoxNewName
    RetourBoutonOK = True
    Unload Me
    End Sub

    3. J'enregistre la pièce jointe avec le nouveau nom qu'on vient de lui donner.  Et je supprime la pièce jointe "temporaire" que j'ai sauvegardé pour pouvoir la visualiser.

    attach.SaveAsFile savePath & nameNewFile & extensionFile     'Sauvegarde pièce jointe avec nouveau nom
    Kill savePath & nameOldFile                                  'Suppression de du fichier temporaire

    Je n'ai pas de problème pour enregistrer la pièce jointe avec le nouveau nom.

    Mais pour la suppression de la pièce jointe temporaire oui (la dernière ligne du code juste au dessus):
    Error Number: 70
    Error Source: saveAttachments
    Error Description: Permission refusée

    Suite à cette erreur si je clique sur le bouton Continuer dans l'éditeur de macro, le code continue.
    As-tu une idée pour solutionner le problème ?

    Ce n'est pas primordial, le programme marche correctement juste sans supprimer la pièce jointe tampon. Les pièces jointes sont des PDF donc il faut juste les supprimer à la main quand cela est nécessaire car j'ai commenté" la ligne pour ne pas avoir d'erreur.

    Si il existe une solution en revanche cela m'intéresse :)

    Le code fonctionne bien sur mon ordinateur mais sur un HP non...

    Merci d'avance !



    • Modifié Toto.31 mercredi 14 mars 2018 13:25
    mercredi 14 mars 2018 11:26