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

Macros et VBA Excel Discussion :

tri d'un tableau de mailItem


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Points : 10
    Points
    10
    Par défaut tri d'un tableau de mailItem
    Bonjour,
    Je voudrais savoir pourquoi ce code qui permet de trier un tableau de mail ne marche pas.
    ce code compile, s'exécute mais le tableau n'est pas trié en sortie

    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
     
     
        Dim tableauMail(50) As Object
        Dim echange_effectue As Boolean 'flag
        Dim n As Integer  'nombre de mail dans le tableau
        Dim jour As String
        Dim mailTemp As Outlook.MailItem
     
     
        Do                                                                             
            echange_effectue = False                                                   
            For j = 0 To n - 1                                                         
                If tableauDate(j) > tableauDate(j + 1) Then                            
                    If tableauDate(j + 1) <> Empty Then                                
                       '///////////////// echanger 2 mail /////////////               
                        Set mailTemp = Ol.CreateItem(olMailItem)                     
                        mailTemp = tableauMail(j)                      
                        tableauMail(j) = tableauMail(j + 1)           
                        tableauMail(j + 1) = mailTemp                 
                       '///////////////////////////////////////////////        
                        echange_effectue = True                                       
                    End If                                                            
                End If                                                                 
            Next                                                                       
            n = n - 1                                                                  
        Loop While echange_effectue = True
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    For j = 0 To n - 1
    ..........
    n = n -1
    Si tu exécutes en pas à pas, je pense que ton code va sortir rapidement de ta boucle si n=0 au départ et peut-être même tourner en rond jusqu'à sa mort...
    MPi²

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 84
    Points : 78
    Points
    78
    Par défaut
    Salut,

    Plusieurs choses sont inutiles ou fausses dans ton code :
    1 - Créer un objet Outlook.MailItem n'a aucun intéret pour ce que tu veux faire. Autant utiliser un string.
    2 - Le tableau est de dimension 50 alors pourquoi tu veux savoir combien il y a de mails ? Tu n'as qu'a faire une boucle sur l'ensemble de ton tableau vu qu'il a une dimension fixe.
    3 - Ton tableau est vide la. Il faut que tu le remplisses au début avec des données. Sinon il va rien en ressortir (vu qu'il n'y a rien dedans ...)
    4 - A quoi sert ton n = n-1 à la fin ?

  4. #4
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Le tableau est de dimension 50 mais en réalité c'est juste un maximum, en effet j'aurai dû utiliser un tableau dynamique et donc il y a certainement des cases vides dans le tableau.

    Ici je n'ai mis que la partie de code que je ne maitrisais pas ! Mais avant ça mon tableau est initialisé !

    Je ne comprend pas pourquoi créer un mailItem n'a aucun intérêt étant donné qu'il me faut juste une variable temporaire de ce type pour faire passer un mail.

    Et vous avez raison, n = n-1 ne sert à rien !

    Merci pour vos réponses

    Et malgrès vos conseils, le tableau ne se trie pas

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Que contient tableauDate(j) ?
    J'imagine que ce sont des dates...
    Mais dans quel format et/ou type ?

    Si les dates sont en format String, il serait préférable de charger les dates au format yyyymmdd pour que le tri se fasse correctement.
    MPi²

  6. #6
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    En fait je vais récupérer dans ma boite mail outlook des mails, suite à ça je remplie 2 tableaux, un tableauDate As Date et un tableauMail As mailItem, correspondant au mail et à la date inscrit dans ce mail ! ensuite je veut trier ces tableaux pour les afficher les informations du mail dans l'ordre dans mon fichier Excel. Cependant les dates se trie correctement mais les mail non, sachant que j'ai modifié un peu mon code et cela donne :
    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
     
    Dim tableauMail(50) As Object
    Dim tableauDate(50) As Date
    Dim echange_effectue As Boolean 'flag
    Dim j As Integer 'compteur de boucle
    Dim jour As String
    Dim mailTemp As Outlook.MailItem
     
         Do                                                                             
            echange_effectue = False                                                   
            For j = 0 To 50 - 1                                               
               If tableauDate(j + 1) <> Empty Then                                     
                    If tableauDate(j) > tableauDate(j + 1) Then                        
                       '///////////////// echanger 2 mail /////////////
                        Set mailTemp = Ol.CreateItem(olMailItem)      
                        mailTemp = tableauMail(j)                      
                        tableauMail(j) = tableauMail(j + 1)           
                        tableauMail(j + 1) = mailTemp                 
                       '///////////////////////////////////////////////
                        echangerDate tableauDate(j), tableauDate(j + 1)                
                        echange_effectue = True                                        
                    End If                                                             
                End If                                                                 
            Next                                                                                                                                       
        Loop While echange_effectue = True

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    As-tu essayé de passer ton code en pas à pas et vérifier les valeurs des éléments du/des tableaux au fur et à mesure de la boucle ?
    MPi²

  8. #8
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    oui j'ai passé mon code au pas à pas et c'est juste l'échange de 2 mails qui ne se fait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Set mailTemp = Ol.CreateItem(olMailItem)                     
    mailTemp = tableauMail(j)                      
    tableauMail(j) = tableauMail(j + 1)           
    tableauMail(j + 1) = mailTemp
    les valeurs de tableauMail(j) et tableauMail(j+1) avant et après ce code sont les mêmes or ce n'est pas normal !

  9. #9
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    J'ai trouvé mon problème l'affectation ne se fait fait pas de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Set mailTemp = Ol.CreateItem(olMailItem)                     
    mailTemp = tableauMail(j)                      
    tableauMail(j) = tableauMail(j + 1)           
    tableauMail(j + 1) = mailTemp
    Mais de cette façon là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Set mailTemp = Ol.CreateItem(olMailItem)   
     
    mailTem.Subject = tableauMail(j).Subject    
    mailTem.Body = tableauMail(j).Body   
     
    tableauMail(j).Subject = tableauMail(j + 1).Subject       
    tableauMail(j).Body = tableauMail(j + 1).Body  
     
    tableauMail(j + 1).Subject = mailTemp.Subject
    tableauMail(j + 1).Body = mailTemp.Body

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

Discussions similaires

  1. Tri d'un tableau en 2D
    Par sniperseb dans le forum C
    Réponses: 4
    Dernier message: 05/01/2006, 17h33
  2. Réponses: 6
    Dernier message: 16/09/2005, 11h30
  3. tri d'un tableau à 2 dimensions
    Par dede92 dans le forum C
    Réponses: 4
    Dernier message: 19/02/2005, 19h29
  4. [langage] Probleme de tri d'un tableau de tableau
    Par Ludo167 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2004, 11h32
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 09h43

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