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 :

Formulaires: comment transmettre variables à une Sub [OL-2010]


Sujet :

VBA Outlook

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 56
    Points
    56
    Par défaut Formulaires: comment transmettre variables à une Sub
    Bonjour à tous,

    J'ai besoin, à reception d'un mail ou à son envoi, de pouvoir sauvegarder le mail ET dans des répertoires Outlook, ET sur un répertoire Windows.
    J'ai récupérer des macros sur Developpez qui me permettent de faire cela, il n'y a aucun soucis.

    La ou ca se corse pour moi, c'est que j'ai créé un formulaire qui récupère certaines informations:
    - sauver le mail: Oui / Non
    - Sujet du mail
    - Destinataire
    - Emplacement de sauvegarde du mail

    Mon problème est que je n'arrive pas à transmettre les données récupérées. J'ai bien essayé de définir les variable comme Public dans le Userform, puis dans la macro de départ, mais j'ai le message "Invalid attribute in Sub or function".
    Est ce que quelqun pourrai m'aiguiller sur la bonne méthode à suivre?

    Mes variable Sauvegarde et RepSauvegarde son les variables que je cherche à transmettre dans un premier temps...

    Voici mon code dans ThisOutlookSession:
    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
    Public WithEvents maBoiteEnvoi As Outlook.Items
    Private Sub Application_Startup()
    Set maBoiteEnvoi = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items
    End Sub
     
    Private Sub Application_ItemSend(ByVal item As Object, Cancel As Boolean)
        Dim prompt As String
        Dim taille, pieces
        Dim objNS  As NameSpace
        Dim objFolder As MAPIFolder
        Public Sauvegarde As String
        Public RepSauvegarde As String
     
        'On verifie que c'est un mail
        If Not item.Class = olMail Then GoTo fin
        TriMail.Show 'Lancement du formulaire
     
    fin:
    Set item = Nothing
    End Sub
     
    Private Sub maBoiteEnvoi_ItemAdd(ByVal item As Object)
    Dim oDossier As MAPIFolder
    Set oNS = Application.GetNamespace("MAPI")
    Set oDossier = Application.GetNamespace("MAPI").PickFolder
    On Error Resume Next
    If Not oDossier Is Nothing Then
    item.Move oDossier
    End If
    Set oDossier = Nothing
    End Sub
    Et le code du module:
    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
    Sub sav_mail_as_msg(Optional objCurrentMessage As Object)
        If objCurrentMessage Is Nothing Then Set objCurrentMessage = ActiveInspector.CurrentItem
     
        'Ici on défini le répertoire où l'enregistrer
        repertoire = BrowseForFolder("Choisissez la destination")
        'Ici on construit le nom du fichier qui sera créé
        NomExport = objCurrentMessage.Subject & objCurrentMessage.CreationTime
        NomExport = "Email " & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
        NomExport, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160)
     
        'Choix de l'emplacement de sauvegarde du mail et de son nom
        NomExport = InputBox("Choisissez le nom", "Enregistrer-sous", NomExport)
     
        'Ici on supprime les caractères non autorisé dans les noms de fichiers
        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
    Et pour les crack du VBA, j'ai une autre colle:
    Est il possible de donner un répertoire par défaut au PickFolder: Set oDossier = Application.GetNamespace("MAPI").PickFolder
    J'ai pas mal cherché en pensant ne pas etre loin de la solution, mais qui ne fonctionne réellement...


    Merci d'avance pour vos propositions qui seront accueillies à bras ouverts

  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
    salut,
    Y a quoi dans le code de ton formulaire ?

    c'est lui qui doit lancer sav_mail_as_msg

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    Bonjour Oliv-

    Effectivement, il manque un bout de 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
    Public Sub Btn_OK_Click()
    'Dim Sauve As Boolean
    Dim Destination As String
    Dim TempOU As String
    Dim CtrlSauve, CtrlOu As Control
    'Dim RepSauvegarde As String
     
     
    'Récupération du choix de sauvegarde sur le disque
        For Each CtrlSauve In Frame_Sauve.Controls
            If CtrlSauve.Object.Value = True Then
                Sauvegarde = CtrlSauve.Object.Caption
                Exit For
            End If
        Next CtrlSauve
     
    'Récupération du lieux de sauvegarde sur le disque
        For Each CtrlOu In Frame_Emplacement.Controls
            If CtrlOu.Object.Value = True Then
                RepSauvegarde = CtrlOu.Object.Caption
                Exit For
            End If
        Next CtrlOu
     
    Me.hide
    End Sub
     
    Private Sub Btn_Cancel_Click()
    Unload Me
    End Sub
    Le lancement de sav_mail_as_msg a été volontairement désactivé, car ce n'est pas faile de bosser en meme temps que de se préparer les macros...
    Mais pour la sauvegarde du mail, pas de soucis!
    Mon problème vient de comment transmettre une variable récupérée dans mon formulaire pour la traiter dans la procédure…

    Voila l'apparence du formulaire:
    Nom : Formulaire.jpg
Affichages : 1593
Taille : 266,0 Ko

    Merci pour ton aide

  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
    Bonjour,
    Je pense que tu utilises mal les formulaires,
    pour tester un contrôle qui se trouve sur le formulaire il faut juste utiliser son nom

    regarde ici c'est la même chose que pour excel

    http://silkyroad.developpez.com/VBA/ControlesUserForm/
    +
    http://silkyroad.developpez.com/VBA/UserForm/


    Ensuite pour passer des infos vers une macro tu as en gros 2 possibilités

    soit ta macro comporte une entrée, exemple ici la macro attend qu'on lui communique l'objet objCurrentMessage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub sav_mail_as_msg(Optional objCurrentMessage As Object)

    Soit tu utilises des variables PUBLIC


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'à mettre en haut d'un MODULE (donc pas d'un formulaire)
     
     
    PUBLIC RepSauvegarde  as string

    et tu l'utilises dans tes formulaires sans la déclarer de nouveau (= pas de "DIM RepSauvegarde" )

    voir http://silkyroad.developpez.com/VBA/LesVariables/

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    Re Bonjour,

    Oui, je sentais que j'avais une mauvaise utilisation. J'essaye de passer par une variable public, mais ca me générai une erreur, et je crois que c'est ta petite annotation qui va me débloquer: créer la variable Public au début du module...
    Je vais tester ca dans la journée

    Un grand merci, et je te tiens au courant!

  6. #6
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    HEllo,

    C'est tout bon, j'ai pu débloquer mon problème et comprendre le fonctionnement des variable Public, c'est parfait!!

    Merci pour ton aide Oliv-, je n'aurais pas réussi tout seul... !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire passer une variable en plus d'un formulaire
    Par frisouille12 dans le forum Langage
    Réponses: 1
    Dernier message: 06/08/2009, 15h06
  2. Réponses: 2
    Dernier message: 05/03/2009, 10h57
  3. Réponses: 6
    Dernier message: 08/02/2009, 17h04
  4. Réponses: 1
    Dernier message: 21/05/2007, 13h37
  5. comment transmettre 1 variable de formulaire a 2 page cible
    Par NoobX dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/03/2005, 15h29

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