IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Outlook Discussion :

probleme sauvegarde mail


Sujet :

VBA Outlook

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut probleme sauvegarde mail
    bonjour,

    Alors voila mon problème je suis entrain de faire une petite macro qui enregistre le mail ouvert dans un dossier particulier.
    Quand celui ci n'existe pas et que je le créait par la macro cela marche très bien.
    Cependant quand je veux enregistrer un mail dans un dossier qui est déjà existant impossible. Une erreur s'affiche.

    Ci dessous mon mail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    Sub Classement()
     
     Dim myinspector As Outlook.Inspector
     Dim myItem As Outlook.MailItem
     Dim email As String
     Dim doss As String
     Dim creation As String
     Dim societe As String
     Dim Nom As String
     Dim Prenom As String
     Dim Dossier As String
     Dim intFic As Integer
     Dim strLigne As String
     Dim Dossecriture As String
     
     
     
     
     
     
     Dim olObj As Object
         'Note: Must have set reference to:
         'Microsoft Excel 14.0 Object Library
         'This is accessed in the VBE Editor
         'Under Tools -> References...
     
        Set olObj = Application.ActiveInspector.CurrentItem
        HisMail = olObj.Recipients.Item(1).Address
        Set olObj = Nothing
     
     
     
     Set myinspector = Application.ActiveInspector
     
     
     Set myItem = myinspector.CurrentItem
     'Detection du mail ouvert pour recuperer ses informations
     
     
    Objet = myItem.Subject
    'Prend l'objet du mail
    Objet = Replace(Objet, ":", " ")
    Objet = Replace(Objet, ".", " ")
    ' Enleve les carateres interdit
     
    heure = myItem.ReceivedTime
    'Prend l'heure de email
    email = myItem.SenderEmailAddress
    'Prend l'adresse email
     
    doss = "C:\Users\Secrétariat2\Desktop\CESAR\client\gestion\" & email
    texte = doss & "\" & "chemin.txt"
     
     
    If Dir(doss, vbDirectory) = "" Then
        MkDir (doss)
        creation = "oui"
     
     
        Else
     
        creation = "non"
     
        End If
     
    If (creation = "oui") Then
     
     
            societe = InputBox("Le client apparait pas dans notre base" & vbCrLf & vbCrLf & _
            "Sa societé ?", "Creation fiche client")
            'On demande La societé
            Nom = InputBox("Son NOM en majuscule svp" & vbCrLf & vbCrLf & _
            "Son Nom ?", "Creation fiche client")
            'On demande le Nom
            Prenom = InputBox("Son Prenom avec la premiere lettre en majuscule" & vbCrLf & vbCrLf & _
            "Son Prenom ?", "Creation de ca fiche")
            'On demande le prenom
            societe = UCase(societe)
            Nom = UCase(Nom)
            Prenom = LCase(Prenom)
     
     
     
            Dossier = "C:\Users\Secrétariat2\Desktop\CESAR\client" & "\" & societe & "_" & Prenom & "_" & Nom
     
            If Dir(Dossier, vbDirectory) = "" Then
            MkDir (Dossier)
            Const ForReading = 1, ForWriting = 2
            Set fso = CreateObject("Scripting.FileSystemObject")
            Set f = fso.OpenTextFile(texte, ForWriting, True)
            f.Write (Dossier)
            Dossecriture = Dossier & "\"
            End If
     
     
    Else
     
            intFic = FreeFile
            Open texte For Input As intFic
            Line Input #intFic, strLigne
            Close intFic
            Dossecriture = Dossier & "\"
     
    End If
        Set objCurrentMessage = ActiveInspector.CurrentItem
     
        repertoire = Dossecriture & Objet
        PathNomExport = repertoire & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
        NomExport, "\", ""), "/", "-"), ":", "#"), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"
     
        'Ici on vérifie que le fichier n'existe pas déjà sinon il serait écrasé
        n = 1
        MemPath = PathNomExport
        While Dir(PathNomExport) <> ""
            MsgBox "Le fichier " & vbCr & PathNomExport & vbCr & "existe déjà", vbInformation
            PathNomExport = Left(MemPath, Len(MemPath) - 4) & "(" & n & ")" & ".msg"
            n = n + 1
     
        Wend
     
        objCurrentMessage.SaveAs PathNomExport, OlSaveAsType.olMSG
     
    End Sub
     
    Sub LanceSurOuvert()
        sav_mail_as_msg
    End Sub
     
     
    Sub LanceSurSelection()
        Dim MonOutlook As Outlook.Application
        Dim LeMail As Object
        Dim LesMails As Outlook.Selection
        Set MonOutlook = Outlook.Application
     
        Set LesMails = MonOutlook.ActiveExplorer.Selection
     
        For Each LeMail In LesMails
            sav_mail_as_msg LeMail
        Next LeMail
     
        Set LesMails = Nothing
        MsgBox "Fin de traitement"
    End Sub
    Avez vous une idée du problème ?

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,

    c'est à cause de cette ligne je pense
    PathNomExport = Repertoire & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
    NomExport, "\", ""), "/", "-"), ":", "#"), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"

    du coup "Dossier" est modifié et ne correspond plus au dossier testé

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Oliv- Voir le message
    Bonjour,

    c'est à cause de cette ligne je pense
    PathNomExport = Repertoire & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
    NomExport, "\", ""), "/", "-"), ":", "#"), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"

    du coup "Dossier" est modifié et ne correspond plus au dossier testé

    J'ai essayé en enlevant les modification. Ca ne resoud pas mon probleme.
    voila le message d'erreur:
    Nom : Capture.PNG
Affichages : 118
Taille : 9,7 Ko

    Une idée du probleme ?

    Cesar

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Effectivement c est pas la cause car le replace est après répertoire

    Par contre tes dossiers n pointes pas au même endroit dans les 2 cas.
    Cela semble être un problème de droit d accès au dossier mais dans ce cas cela devrait le faire pour les 2 cas alors regarde le pb d emplacement different

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Oliv- Voir le message
    Effectivement c est pas la cause car le replace est après répertoire

    Par contre tes dossiers n pointes pas au même endroit dans les 2 cas.
    Cela semble être un problème de droit d accès au dossier mais dans ce cas cela devrait le faire pour les 2 cas alors regarde le pb d emplacement different
    Merci pour votre aide mais j'ai mal commenté mon code. Je pense que vous ne comprenez pas ma démarche.
    Il y'a un dossier avec comme nom l'adresse Email de la personne (Dans le dossier Gestion) celui ci contient juste un fichier txt avec le chemin de l'autre dossier.(celui de stockage des mail)
    Je m'explique je n'ai pas envie de trier mes mail par adresse email mais par Société Prénom Nom.
    Je me sers donc d'un dossier avec l'adresse Email et avec ce fichier txt pour faire une mémoire permettant a l'ordinateur de retrouver son chemin vers le dossier de stockage sans que j'ai a lui indiqué a chaque fois. En effet l'adresse email je peux la prendre dans le mail ouvert le nom societe et prenom je ne peux pas.

    Ci dessous j'ai rajouter des commentaire a mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    Sub Classement()
     
     Dim myinspector As Outlook.Inspector
     Dim myItem As Outlook.MailItem
     Dim email As String
     Dim doss As String
     Dim creation As String
     Dim societe As String
     Dim Nom As String
     Dim Prenom As String
     Dim Dossier As String
     Dim intFic As Integer
     Dim strLigne As String
     Dim Dossecriture As String
     
     
     
     
     
     
     Dim olObj As Object
     
        Set olObj = Application.ActiveInspector.CurrentItem
        HisMail = olObj.Recipients.Item(1).Address
        Set olObj = Nothing
     
     
     
     Set myinspector = Application.ActiveInspector
     
     
     Set myItem = myinspector.CurrentItem
     'Detection du mail ouvert pour recuperer ses informations
     
     
    Objet = myItem.Subject
    'Prend l'objet du mail
    Objet = Replace(Objet, ":", " ")
    Objet = Replace(Objet, ".", " ")
    ' Enleve les carateres interdit
     
    heure = myItem.ReceivedTime
    'Prend l'heure de email
    email = myItem.SenderEmailAddress
    'Prend l'adresse email
     
    doss = "C:\Users\Secrétariat2\Desktop\CESAR\client\gestion\" & email
    texte = doss & "\" & "chemin.txt"
    'dossier dit de sauvegarde (ce dossier contient un fichier txt dans lequelle se trouve le chemin d'acces au dossier contenant tout les mails
     
     
    If Dir(doss, vbDirectory) = "" Then
        MkDir (doss)
        creation = "oui"
    'Le dossier de sauvegarde avec cette adresse mail n'existe pas on le creait et on envoie l'information pour creer le dossier ou ranger les mail
     
        Else
     
        creation = "non"
    'Les dossier (savegarde et stockage sont deja existant
        End If
     
    If (creation = "oui") Then
        'Creation du dossier de stockage
     
            societe = InputBox("Le client apparait pas dans notre base" & vbCrLf & vbCrLf & _
            "Sa societé ?", "Creation fiche client")
            'On demande La societé
            Nom = InputBox("Son NOM en majuscule svp" & vbCrLf & vbCrLf & _
            "Son Nom ?", "Creation fiche client")
            'On demande le Nom
            Prenom = InputBox("Son Prenom avec la premiere lettre en majuscule" & vbCrLf & vbCrLf & _
            "Son Prenom ?", "Creation de ca fiche")
            'On demande le prenom
            societe = UCase(societe)
            Nom = UCase(Nom)
            Prenom = LCase(Prenom)
     
     
     
            Dossier = "C:\Users\Secrétariat2\Desktop\CESAR\client" & "\" & societe & "_" & Prenom & "_" & Nom
            'Exemple dans le dossier client : NIKE_jean_CLAUDE dedans va se trouver tout les mails de Jean claude travaillant chez nike
            If Dir(Dossier, vbDirectory) = "" Then
            MkDir (Dossier)
            'Maintenant nous creont le document texte avec le chemin que nous venons de creer
            Const ForReading = 1, ForWriting = 2
            Set fso = CreateObject("Scripting.FileSystemObject")
            Set f = fso.OpenTextFile(texte, ForWriting, True)
            f.Write (Dossier)
            Dossecriture = Dossier & "\"
            End If
     
     
    Else
            'Les dossier existe deja du coup on recupere le chemin
            intFic = FreeFile
            Open texte For Input As intFic
            Line Input #intFic, strLigne
            Close intFic
            Dossecriture = Dossier & "\"
            'Il manquait un \ on l'ajoute pour pouvoir rentrer dans le dossier de stockage
     
    End If
     
        'Maintenant c'est la partie sauvegarde du mail:
     
        Set objCurrentMessage = ActiveInspector.CurrentItem
     
        Repertoire = Dossecriture & Objet
        PathNomExport = Repertoire & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
     NomExport, "\", ""), "/", "-"), ":", "#"), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg"
     
        'Ici on vérifie que le fichier n'existe pas déjà sinon il serait écrasé
        n = 1
        MemPath = PathNomExport
        While Dir(PathNomExport) <> ""
            MsgBox "Le fichier " & vbCr & PathNomExport & vbCr & "existe déjà", vbInformation
            PathNomExport = Left(MemPath, Len(MemPath) - 4) & "(" & n & ")" & ".msg"
            n = n + 1
     
        Wend
     
        objCurrentMessage.SaveAs PathNomExport, OlSaveAsType.olMSG
     
    End Sub
     
    Sub LanceSurOuvert()
        sav_mail_as_msg
    End Sub
     
     
    Sub LanceSurSelection()
        Dim MonOutlook As Outlook.Application
        Dim LeMail As Object
        Dim LesMails As Outlook.Selection
        Set MonOutlook = Outlook.Application
     
        Set LesMails = MonOutlook.ActiveExplorer.Selection
     
        For Each LeMail In LesMails
            sav_mail_as_msg LeMail
        Next LeMail
     
        Set LesMails = Nothing
        MsgBox "Fin de traitement"
    End Sub

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bon j'ai trouvé un bout de piste. C'est tout con les dossier créez sont créez avec l'autorisation lecture seule.
    Y'a un moyen de config la creation de dossier pour qu'il ne soit pas en lecture seule ?

    Cesar

  7. #7
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    En fait cela vient de là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Else
     
            intFic = FreeFile
            Open Texte For Input As intFic
            Line Input #intFic, strLigne
            Close intFic
            Dossecriture = Dossier & "\"
     
        End If
    il faut ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Else
    
            intFic = FreeFile
            Open Texte For Input As intFic
            Line Input #intFic, strLigne
            Close intFic
            Dossecriture = strLigne & "\"
    
        End If

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ba oui pourquoi j'ai écrit ca moi. Je deviens totalement fou.
    Bon apriori ca fonctionne maintenant.
    Preuve qu'un deuxième œil est toujours la bien venu.

    Merci en tout cas.

    Je règle deux trois problèmes qu'il reste et je publie mon code pour ceux que ca intéresse.

  9. #9
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    en fait il faudrait tester le contenu de ton fichier chemin.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if instr(1,strLigne,"C:\Users\Secrétariat2\Desktop\CESAR\client",1) then
     Dossecriture = strLigne & "\"
    else
    msgbox "contenu erroné"
    End if

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Oui.
    Je suis aussi entrain d'ajouter l'heure au nom du mail et de faire une verif de l'adresse mail pour que si c'est moi l'expéditeur ca prenne l'adresse du destinataire.
    Ce qui me permet de gérer les conversation complète élément envoyé et reçu facilement.

Discussions similaires

  1. [Mail] probleme avec mail();
    Par pierrot10 dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2006, 15h46
  2. [Mail] Probleme script mail
    Par shub dans le forum Langage
    Réponses: 33
    Dernier message: 02/04/2006, 08h52
  3. Problème sauvegarde et raid5 sous Redhat
    Par Mugette dans le forum Matériel
    Réponses: 2
    Dernier message: 31/03/2006, 09h39
  4. [Mail] Probleme fonction mail()
    Par tissot dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2005, 12h55
  5. Probleme Sauvegarde-Restauration avec MySql Administrator
    Par Christophe Charron dans le forum Administration
    Réponses: 7
    Dernier message: 26/07/2005, 08h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo