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 :

Tri de mails dans un repertoire ou Tri dans Excel [OL-2010]


Sujet :

VBA Outlook

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Tri de mails dans un repertoire ou Tri dans Excel
    Bonjour,

    petite question sur une macro sur laquelle je bosse actuellement, dans cette macro, je veux entre autres :

    - récupérer des données dans les mails d'un repertoire "ANOMALIES" => Fait, OK
    - les mettre dans un fichier Excel => fait , OK
    - Trier les données du fichier Excel par la colonne G puis la colonne F par ordre ascendant

    Mais je n'arrive pas à utiliser la fonction Range (qui marchait sous VBA Excel), j'ai une erreur "function non définie"

    du coup je pense à passer directement par un tri des mails dans le repertoire "ANOMALIES" selon l'objet du mail , par exemple "Anomalie de type A" , " "Anomalie de type B", "Anomalie de type C",etc..

    j'ai essayé en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myFolder.Items.Sort "[Item.Subject]", False
    Mais ça ne marche pas

    Pouvez-vous me dire si ce que je souhaite faire est réalisable, que ce soit le tri dans le fichier Excel via Outlook, ou que ce soit le tri des mails selon l'objet du mail, et me dire ce qui cloche ^^'

    Merci d'avance pour votre aide,

    Cordialement.

  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
    Il faudrait que tu publies plus de ton code
    Si tu lances ton code à partir d outlook tu dois donc avoir un objet excel
    Il faut faire précéder les instructions excel de cet objet

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    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
    Sub ITDClos()
      Dim myFolder As MAPIFolder
      Dim Item As Variant 'MailItem
      Dim xlApp As Object 'Excel.Application
      Dim xlWB As Object 'Excel.Workbook
      Dim xlSheet As Object 'Excel.Worksheet
      Dim xlRow As Long
      Dim Keys(100)
      Dim Lines() As String
      Dim I As Long, J As Long, P As Long
     
    .....
     
     Set xlWB = xlApp.Workbooks.Add  'Add a new workbook
     
     Set xlSheet = xlWB.ActiveSheet
     xlRow = 1
     Set myFolder = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)  'Access the outlook inbox folder
     
     Set myFolder = myFolder.Folders("ANOMALIES")
     
     'Visit all mails
     For Each Item In myFolder.Items
        If TypeOf Item Is MailItem Then
            MyString = Item.Subject
            FirstWord = Mid(MyString, 1, 10)    ' Renvoie les 10 premiers car. du sujet du mail
     
            If FirstWord = "ANOMALIE 1" Then  ' Verifie si objet du mail contient les anomalies 1
               Lines = Split(Item.Body, vbCrLf)
               J = 0
               For I = 0 To UBound(Lines)
               A = Mid(Lines(I), 4, 3)
               B = Mid(Lines(I), 4, 7)
               C = Mid(Lines(I), 4, 9)
               D = Mid(Lines(I), 4, 6)
     
               If B = "REF-PRD" Then
                  xlSheet.Cells(xlRow, J + 1) = Mid(Lines(I), 16)
                  xlSheet.Cells(xlRow, J + 7) = "Anomalie 1"
               End If
     
               If B = "REF-CTR" Then
                  xlSheet.Cells(xlRow, J + 2) = Mid(Lines(I), 16)
                  xlSheet.Cells(xlRow, J + 7) = "Anomalie 1"
               End If
     
               If C = "PROGRAMME" Then    ' à vérifier
                  xlSheet.Cells(xlRow, J + 3) = Mid(Lines(I), 16)
                  xlSheet.Cells(xlRow, J + 7) = "Anomalie 1"
               End If
     
               If A = "MSG" Then
                  xlSheet.Cells(xlRow, J + 4) = Mid(Lines(I), 16)
                  xlSheet.Cells(xlRow, J + 7) = "Anomalie 1"
               End If
     
               If D = "METIER" Then   ' à vérifier
                  xlSheet.Cells(xlRow, J + 5) = Mid(Lines(I), 16)
                  xlSheet.Cells(xlRow, J + 7) = "Anomalie 1"
               End If
     
               If C = "SITE DEST" Then
                  xlSheet.Cells(xlRow, J + 6) = Mid(Lines(I), 16)
                  xlSheet.Cells(xlRow, J + 7) = "Anomalie 1"
               End If
               Next
               xlRow = xlRow + 1
     
            End If
        End If
    Next

    Et il y'a plusieurs types d'anomalies : Anomalie 1, Anomalie 2, Anomalie 3,..
    je veux donc à la fin pouvoir faire un tri sur mes données importés sur Excel, sur la colonne G ( qui contient le type de l'anomalie)

    J'avais essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
         Set xlSheet = xlWB.ActiveSheet
        xlSheet.Cells.Select
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear    =>  Erreur d'execution '424'  Objet requis
      ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=ActiveWorkbook.Worksheets("Feuil1").Range("G1:G7"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil1").Sort
           .SetRange ActiveWorkbook.Worksheets("Feuil1").Range("A1:G7") 
           .Header = xlGuess
           .MatchCase = False
           .Orientation = xlTopToBottom
           .SortMethod = xlPinYin
           .Apply
        End With
    J'ai ensuite tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     xlSheet.Cells.Select
      xlSheet.Sort.SortFields.Clear
      xlSheet.Sort.SortFields.Add Key:=xlSheet.Range("G1:G7"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal   => Erreur d'execution '1004'  Erreur définie par l'application ou par l'objet
       With xlSheet.Sort
           .SetRange xlSheet.Range("A1:G7") 
            .Header = xlGuess
           .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

    Merci de votre 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,
    c'est ce que disais précedemment.

    Si tu fais cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xlApp As Object 'Excel.Application
    je suppose que tu as un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set xlApp =createobject("Excel.Application")
    et que tu n'as pas de "référence" à MICROSOFT EXCEL ?

    dans ce cas les constantes EXCEL ne sont pas connues de ton programme.
    comme xlAscending, xlSortNormal

    soit tu ajoute la référence soit tu ajoutes les constantes

    pour trouver les constantes à partir de excel tu fais alt+f11 puis f2 et tu tapes dans la recherche ta constante.

    tu peux essayer ainsi

    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
     
    Const xlAscending = 1
    Const xlSortNormal = 0
     
    'etc...
     
    Set xlSheet = xlWB.ActiveSheet
        xlSheet.Cells.Select
        xlSheet.Sort.SortFields.Clear    '=>  Erreur d'execution '424'  Objet requis
     xlSheet.Sort.SortFields.Add Key:=ActiveWorkbook.Worksheets("Feuil1").Range("G1:G7"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With xlSheet.Sort
           .SetRange xlSheet.Range("A1:G7") 
           .Header = xlGuess
           .MatchCase = False
           .Orientation = xlTopToBottom
           .SortMethod = xlPinYin
           .Apply
        End With

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Développeur COBOL
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, j'ai tenté en rajoutant les constantes, et ça marche!

    Merci pour votre aide!

  6. #6
    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
    Je n'avais pas mis toutes les constantes utilisées, pour être sur de ne pas en louper ajoute en haut de ton module


  7. #7
    Membre actif Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 783
    Points : 203
    Points
    203
    Par défaut
    Bonjour,

    Comment faite l'inverse : Trier Outlook par date la plus récente en haut, depuis Excel ?

    Meilleures salutations

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/01/2014, 19h34
  2. [Dev-Pascal] Problème dans les procédures de tri
    Par degseb dans le forum Autres IDE
    Réponses: 6
    Dernier message: 19/12/2008, 18h25
  3. Réponses: 2
    Dernier message: 29/08/2008, 16h31
  4. Affichage des dates dans un ListGridView, et tri
    Par mister3957 dans le forum Framework .NET
    Réponses: 4
    Dernier message: 18/03/2007, 12h26
  5. Recherche dans une liste non trié
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 13/09/2004, 14h56

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