Classement, tri et récursivité.

Unknown_Noob Messages postés 2 Date d'inscription dimanche 5 juillet 2015 Statut Membre Dernière intervention 5 juillet 2015 - Modifié par Unknown_Noob le 5/07/2015 à 01:51
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 5 juil. 2015 à 12:54
Bonjour,
Je suis tout nouveau et aussi noob de chez noob en programmation.
Dernièrement j'ai été chargé de mettre en place une rénovation concernant l'archivage des messages de ma boite.
Avec l'aide d'un collègue j'ai réussi à faire un script qui me permet (après export de mes messages) de les trier suivant qu'ils soient arrivés ou départs dans 2 dossiers distincts et également de les classer par critères qui sont : normal, urgent et important.

Maintenant (suite à une requête de mes supérieurs) je dois d'abord les classer par date, puis ensuite les classer par critère d'importance.
J'ai réussi à reprendre mon premier script pour classer mes messages arrivés-départs et classer mes départs par mois (il n'y a que le classement des départs qui m'intéresse). Comme je suis un noob, je n'ai pas réussi à faire de boucle et je me retrouve avec une douzaine de "SI" imbriqué (et oui 12 mois dans l'année), mais au moins mes messages sont triés par mois.
Le problème c'est que je ne comprends pas grand chose à la récursivité... enfin en script car j'arrive à peu près à voir le fonctionnement mais pas à le mettre en forme.

Si l'un d'entre vous avez la gentillesse de m'expliquer de manière simple, car j'avoue que mes recherches sur le net n'ont pas été très fructueuses, j'ai trouvé quelques exemples mais la plupart du temps sans commentaire pour expliquer le fonctionnement de la ou des boucles mises en places. Et puis niveau syntaxe en vbs (comme en d'autres langages d'ailleurs) je n'y connais rien.

Je vous mets mon script de tri arrivés-départs et classement par mois.
N'hésitez pas et soyez honnête, je sais que mon code est assez mauvais, mais si je peux m'améliorer je suis preneur.

D'avance merci

--------------------------------------------------------------------------------
1er script - Tri arrivés-départs
' Script qui classe par arrive/depart les messages présents dans le répertoire RepMsg

Option Explicit


' Définitions des variables

' MODIFIABLE : Chemin du repertoire ou seront stockés les messages à trier
Const RepMsg = "D:\test\"

' Autres variables
Dim fso, fichier, fileItem, readfile, sLigne, bMsgDep, bIdentifie, bRepMsgExist, bReptriconfExist, bRepDepExist, bRepArrExist, sRepDep, sRepArr

' Initialisation des variables

' Repertoire ou seront stockes les messages departs
sRepDep = RepMsg & "DEP\"

' Repertoire ou seront stockes les messages arrives
sRepArr = RepMsg & "ARR\"

bMsgDep = false
bIdentifie = false

Set fso = CreateObject("Scripting.FileSystemObject")

' On test l'existence du repertoire
bRepMsgExist = fso.FolderExists(RepMsg)
If bRepMsgExist Then
 
 ' On test l'existence des repertoires ARR et DEP
 bRepDepExist = fso.FolderExists(sRepDep)
 bRepArrExist = fso.FolderExists(sRepArr)

 ' Si le repertoire DEP n'existe pas on le créer
 If Not bRepDepExist Then
  fso.CreateFolder(sRepDep)
 End IF
 
 ' Si le repertoire ARR n'existe pas on le créer
 If Not bRepArrExist Then
  fso.CreateFolder(sRepArr)
 End IF
 
 ' Parcours des fichiers présents dans le repertoire des messages
 For Each fichier In fso.GetFolder(RepMsg).Files
  Set fileItem = fso.GetFile(fichier)
  
  ' Ouverture du fichier
  Set readfile = fso.OpenTextFile(fichier,1,false)
  
  ' Lecture ligne par ligne du fichier jusqu'à la fin du fichier
  Do While readfile.AtEndOfStream=false
   sLigne = readfile.ReadLine
   
   ' Si on a pas encore identifié le message comme étant un arrivé ou un départ
   IF Not bIdentifie Then
    
    ' On cherche la chaîne de caractères 
    IF InStr(sLigne, "From adresse mail") Then
                                               
      ' Le message est identifié
      bIdentifie = true
    
      ' On le tag comme un message départ
      bMsgDep = true
    End If
   End If
  Loop
  
  ' Fermeture du fichier
  readfile.close
  
  ' A la fin de la lecture du fichier
  
  ' Si c'est un message depart
  If bMsgDep Then
   ' Déplacement dans le répertoire DEP
   fso.MoveFile fichier, sRepDep
  Else
   ' Déplacement dans le répertoire ARR
   fso.MoveFile fichier, sRepArr
  End If
  
  ' Réinitialisation des variables avant analyse du prochain message
  bIdentifie = false
  bMsgDep = false
 Next
 
 ' Fin du traitement, on avertit l'utilisateur
 MsgBox "Fin du traitement.",vbOKOnly,"Tri Arrivés - Départs"
Else
 ' On informe l'utilisateur que le répertoire n'existe pas
 MsgBox "Le repertoire " & RepMsg & " n'existe pas !"
End If


--------------------------------------------------------------------------------
2ème script - tri par mois
 (attention les yeux)

' Script qui classe par date les messages présents dans le répertoire DEP

Option Explicit

' Définitions des variables

' MODIFIABLE : Chemin du repertoire ou seront stockés les messages à trier
Const RepMsg = "D:\test\DEP\"

' Autres variables
Dim fso, fichier, fileItem, readfile, sLigne, bIdentifie, bRepMsgExist, sRepMsg, bMsgJAN, bMsgFEV, bMsgMAR, bMsgAVR, bMsgMAI, bMsgJUN, bMsgJUL, bMsgAOU, bMsgSEP, bMsgOCT, bMsgNOV, bMsgDEC, bMsgAutre, bRepJANExist, bRepFEVExist, bRepMARExist, bRepAVRExist, bRepMAIExist, bRepJUNExist, bRepJULExist, bRepAOUExist, bRepSEPExist, bRepOCTExist, bRepNOVExist, bRepDECExist, brepAutreExist, sRepJAN, sRepFEV, sRepMAR, sRepAVR, sRepMAI, sRepJUN, sRepJUL, sRepAOU, sRepSEP, sRepOCT, sRepNOV, sRepDEC, sRepAutre


' Initialisation des variables

' Repertoire ou seront stockes les messages
sRepJAN = RepMsg & "01 - JAN\"
sRepFEV = RepMsg & "02 - FEV\"
sRepMAR = RepMsg & "03 - MAR\"
sRepAVR = RepMsg & "04 - AVR\"
sRepMAI = RepMsg & "05 - MAI\"
sRepJUN = RepMsg & "06 - JUN\"
sRepJUL = RepMsg & "07 - JUL\"
sRepAOU = RepMsg & "08 - AOU\"
sRepSEP = RepMsg & "09 - SEP\"
sRepOCT = RepMsg & "10 - OCT\"
sRepNOV = RepMsg & "11 - NOV\"
sRepDEC = RepMsg & "12 - DEC\"
sRepAutre = RepMsg & "Messages internes"


bMsgJAN = false
bIdentifie = false

bMsgFEV = false
bIdentifie = false

bMsgMAR = false
bIdentifie = false

bMsgAVR = false
bIdentifie = false

bMsgMAI = false
bIdentifie = false

bMsgJUN = false
bIdentifie = false

bMsgJUL = false
bIdentifie = false

bMsgAOU = false
bIdentifie = false

bMsgSEP = false
bIdentifie = false

bMsgOCT = false
bIdentifie = false

bMsgNOV = false
bIdentifie = false

bMsgDEC = false
bIdentifie = false

Set fso = CreateObject("Scripting.FileSystemObject")

' On test l'existence du repertoire
bRepMsgExist = fso.FolderExists(RepMsg)
If bRepMsgExist Then
 
 ' On test l'existence des repertoires des différents mois
 bRepJANExist = fso.FolderExists(sRepJAN)
 bRepFEVExist = fso.FolderExists(sRepFEV)
 bRepMARExist = fso.FolderExists(sRepMAR)
 bRepAVRExist = fso.FolderExists(sRepAVR)
 bRepMAIExist = fso.FolderExists(sRepMAI)
 bRepJUNExist = fso.FolderExists(sRepJUN)
 bRepJULExist = fso.FolderExists(sRepJUL)
 bRepAOUExist = fso.FolderExists(sRepAOU)
 bRepSEPExist = fso.FolderExists(sRepSEP)
 bRepOCTExist = fso.FolderExists(sRepOCT)
 bRepNOVExist = fso.FolderExists(sRepNOV)
 bRepDECExist = fso.FolderExists(sRepDEC)
 bRepAutreExist = fso.FolderExists(sRepAutre)

 ' Si le repertoire JAN n'existe pas on le créer
 If Not bRepJANExist Then
  fso.CreateFolder(sRepJAN)
 End IF
 
 ' Si le repertoire FEV n'existe pas on le créer
 If Not bRepFEVExist Then
  fso.CreateFolder(sRepFEV)
 End IF
 
 ' Si le repertoire MAR n'existe pas on le créer
 If Not bRepMARExist Then
  fso.CreateFolder(sRepMAR)
 End IF
 
 ' Si le repertoire AVR n'existe pas on le créer
 If Not bRepAVRExist Then
  fso.CreateFolder(sRepAVR)
 End IF

 ' Si le repertoire MAI n'existe pas on le créer
 If Not bRepMAIExist Then
  fso.CreateFolder(sRepMAI)
 End IF
 
 ' Si le repertoire JUN n'existe pas on le créer
 If Not bRepJUNExist Then
  fso.CreateFolder(sRepJUN)
 End IF

 ' Si le repertoire JUL n'existe pas on le créer
 If Not bRepJULExist Then
  fso.CreateFolder(sRepJUL)
 End IF
 
 ' Si le repertoire AOU n'existe pas on le créer
 If Not bRepAOUExist Then
  fso.CreateFolder(sRepAOU)
 End IF

 ' Si le repertoire SEP n'existe pas on le créer
 If Not bRepSEPExist Then
  fso.CreateFolder(sRepSEP)
 End IF
 
 ' Si le repertoire OCT n'existe pas on le créer
 If Not bRepOCTExist Then
  fso.CreateFolder(sRepOCT)
 End IF

 ' Si le repertoire NOV n'existe pas on le créer
 If Not bRepNOVExist Then
  fso.CreateFolder(sRepNOV)
 End IF
 
 ' Si le repertoire DEC n'existe pas on le créer
 If Not bRepDECExist Then
  fso.CreateFolder(sRepDEC)
 End IF

 ' Si le repertoire Autre n'existe pas on le créer
 If Not bRepAutreExist Then
  fso.CreateFolder(sRepAutre)
 End IF

 ' Parcours des fichiers présents dans le repertoire des messages
 For Each fichier In fso.GetFolder(RepMsg).Files
  Set fileItem = fso.GetFile(fichier)
  
  ' Ouverture du fichier
  Set readfile = fso.OpenTextFile(fichier,1,false)
  
  ' Lecture ligne par ligne du fichier jusqu'à la fin du fichier
  Do While readfile.AtEndOfStream=false
   sLigne = readfile.ReadLine
   
   ' Si on a pas encore identifié le mois du message
   IF Not bIdentifie Then
    ' On cherche la chaîne de caractères Janvier
    IF InStr(sLigne, " Janvier ") Then

     ' Le message est identifié
     bIdentifie = true
    
     ' On le tag comme un message Janvier
     bMsgJAN = true
    End If

    ' On cherche la chaîne de caractères Fevrier
    IF InStr(sLigne, " Fevrier ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Fevrier
     bMsgFEV = true
    End If

    ' On cherche la chaîne de caractères Mars
    IF InStr(sLigne, " Mars ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Mars
     bMsgMAR = true
    End If

    ' On cherche la chaîne de caractères Avril
    IF InStr(sLigne, " Avril ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Avril
     bMsgAVR = true
    End If

    ' On cherche la chaîne de caractères Mai
    IF InStr(sLigne, " Mai ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Mai
     bMsgMAI = true
    End If

    ' On cherche la chaîne de caractères Juin
    IF InStr(sLigne, " Juin ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Juin
     bMsgJUN = true
    End If

    ' On cherche la chaîne de caractères Juillet
    IF InStr(sLigne, " Juillet ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Juillet
     bMsgJUL = true
    End If

    ' On cherche la chaîne de caractères Aout
    IF InStr(sLigne, " Aout ") Then
     ' Le message est identifié
     bIdentifie = true

     ' On le tag comme un message Aout
     bMsgAOU = true
    End If

    ' On cherche la chaîne de caractères Septembre
    IF InStr(sLigne, " Septembre ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Septembre
     bMsgSEP = true
    End If

    ' On cherche la chaîne de caractères Octobre
    IF InStr(sLigne, " Octobre ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Octobre
     bMsgOCT = true
    End If

    ' On cherche la chaîne de caractères Novembre
    IF InStr(sLigne, " Novembre ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Novembre
     bMsgNOV = true
    End If

    ' On cherche la chaîne de caractères Decembre
    IF InStr(sLigne, " Decembre ") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Decembre
     bMsgDEC = true
    End If

    ' On cherche la chaîne de caractères from administrateur
    IF InStr(sLigne, "from administrateur") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message Autre
     bMsgAutre = true
    End If

   End If
  Loop
  
  ' Fermeture du fichier
  readfile.close
  
  ' A la fin de la lecture du fichier
  
  ' Si c'est un message Janvier
  If bMsgJAN Then
   ' Déplacement dans le répertoire Janvier
   fso.MoveFile fichier, sRepJAN
  Else
   ' Si c'est un message Fevrier
   If bMsgFEV Then
    ' Déplacement dans le répertoire Fevrier
    fso.MoveFile fichier, sRepFEV
   Else
    ' Si c'est un message Mars
    If bMsgMAR Then
     ' Déplacement dans le répertoire Mars
     fso.MoveFile fichier, sRepMAR

    Else
     ' Si c'est un message Avril
     If bMsgAVR Then
      ' Déplacement dans le répertoire Avril
      fso.MoveFile fichier, sRepAVR

     Else
      ' Si c'est un message Mai
      If bMsgMAI Then
       ' Déplacement dans le répertoire Mai
       fso.MoveFile fichier, sRepMAI
     
      Else
       ' Si c'est un message Juin
       If bMsgJUN Then
        ' Déplacement dans le répertoire Juin
        fso.MoveFile fichier, sRepJUN

       Else
        ' Si c'est un message Juillet
        If bMsgJUL Then
         ' Déplacement dans le répertoire Juillet
         fso.MoveFile fichier, sRepJUL
        
        Else
         ' Si c'est un message Aout
         If bMsgAOU Then
          ' Déplacement dans le répertoire Aout
          fso.MoveFile fichier, sRepAOU

         Else
          ' Si c'est un message Septembre
          If bMsgSEP Then
           ' Déplacement dans le répertoire Septembre
           fso.MoveFile fichier, sRepSEP

          Else
           ' Si c'est un message Octobre
           If bMsgOCT Then
            ' Déplacement dans le répertoire Octobre
            fso.MoveFile fichier, sRepOCT
  
           Else
            ' Si c'est un message Novembre
            If bMsgNOV Then
             ' Déplacement dans le répertoire Novembre
             fso.MoveFile fichier, sRepNOV
            Else 
             ' Si c'est un message Decembre
             If bMsgDEC Then
              ' Déplacement dans le répertoire Decembre
              fso.MoveFile fichier, sRepDEC
             Else
              ' Déplacement dans le répertoire Autre
              fso.MoveFile fichier, sRepAutre
             End If
            End If
           End If
          End If
         End If
        End If
       End If
      End If
     End If
    End If
   End If
  End IF
  
  ' Réinitialisation des variables avant analyse du prochain message
  bMsgJAN = false
  bIdentifie = false

  bMsgFEV = false
  bIdentifie = false

  bMsgMAR = false
  bIdentifie = false

  bMsgAVR = false
  bIdentifie = false

  bMsgMAI = false
  bIdentifie = false

  bMsgJUN = false
  bIdentifie = false

  bMsgJUL = false
  bIdentifie = false

  bMsgAOU = false
  bIdentifie = false

  bMsgSEP = false
  bIdentifie = false

  bMsgOCT = false
  bIdentifie = false

  bMsgNOV = false
  bIdentifie = false

  bMsgDEC = false
  bIdentifie = false

  bMsgAutre = false
  bIdentifie = false

 Next
 
 ' Fin du traitement, on avertit l'utilisateur
 MsgBox "Fin du classement par mois."
Else
 ' On informe l'utilisateur que le répertoire n'existe pas
 MsgBox "Le repertoire " & RepMsg & " n'existe pas !"
End If

--------------------------------------------------------------------------------
3ème script - le classement par importance (ne fonctionne que dans un dossier donné)

' Script qui classe par importance les messages présents dans les répertoire ....(JAN)

Option Explicit


' Définitions des variables

' MODIFIABLE : Chemin du repertoire ou seront stockés les messages à trier
Const RepMsg = "D:\test\DEP\JAN"

' Autres variables
Dim fso, fichier, fileItem, readfile, sLigne, bMsgimportant, bMsgurgent, bMsgnormal, bIdentifie, bRepMsgExist, bRepimportantExist, bRepurgentExist, bRepnormalExist, sRepimportant, sRepurgent, sRepnormal, sRepJAN

' Initialisation des variables

' Repertoire ou seront stockes les messages importants
sRepimportant = RepMsg & "important\"

' Repertoire ou seront stockes les messages urgents
sRepurgent = RepMsg & "urgent\"

' Repertoire ou seront stockes les messages normaux
sRepnormal = RepMsg & "normal\"

bMsgimportant = false
bIdentifie = false

bMsgurgent = false
bIdentifie = false

bMsgnormal = false
bIdentifie = false

Set fso = CreateObject("Scripting.FileSystemObject")

' On test l'existence du repertoire
bRepMsgExist = fso.FolderExists(RepMsg)
If bRepMsgExist Then
 
 ' On test l'existence des repertoires important, urgent et normal
 bRepimportantExist = fso.FolderExists(sRepimportant)
 bRepurgentExist = fso.FolderExists(sRepurgent)
 bRepnormalExist = fso.FolderExists(sRepnormal)

 ' Si le repertoire important n'existe pas on le créer
 If Not bRepimportantExist Then
  fso.CreateFolder(sRepimportant)
 End IF
 
 ' Si le repertoire urgent n'existe pas on le créer
 If Not bRepurgentExist Then
  fso.CreateFolder(sRepurgent)
 End IF

 ' Si le repertoire normal n'existe pas on le créer
 If Not bRepnormalExist Then
  fso.CreateFolder(sRepnormal)
 End IF
 
 ' Parcours des fichiers présents dans le repertoire des messages
 For Each fichier In fso.GetFolder(RepMsg).Files
  Set fileItem = fso.GetFile(fichier)
  
  ' Ouverture du fichier
  Set readfile = fso.OpenTextFile(fichier,1,false)
  
  ' Lecture ligne par ligne du fichier jusqu'à la fin du fichier
  Do While readfile.AtEndOfStream=false
   sLigne = readfile.ReadLine
   
   ' Si on a pas encore identifié le message comme étant un important, urgent ou normal
   IF Not bIdentifie Then
    ' On cherche la chaîne de caractères Important
    IF InStr(sLigne, "Important") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message important
     bMsgimportant = true
    End If

    ' On cherche la chaîne de caractères Urgent
    IF InStr(sLigne, "Urgent") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message urgent
     bMsgurgent = true
    End If

    ' On cherche la chaîne de caractères Normal
    IF InStr(sLigne, "Normal") Then
     ' Le message est identifié
     bIdentifie = true
     
     ' On le tag comme un message normal
     bMsgnormal = true
    End If
   End If
  Loop
  
  ' Fermeture du fichier
  readfile.close
  
  ' A la fin de la lecture du fichier
  
  ' Si c'est un message important
  If bMsgimportant Then
   ' Déplacement dans le répertoire important
   fso.MoveFile fichier, sRepimportant
  Else
   If bMsgurgent Then
    ' Déplacement dans le répertoire urgent
    fso.MoveFile fichier, sRepurgent
   Else
    ' Déplacement dans le répertoire normal
    fso.MoveFile fichier, sRepnormal
   End If
  End IF
  
  ' Réinitialisation des variables avant analyse du prochain message
  bMsgimportant = false
  bIdentifie = false

  bMsgurgent = false
  bIdentifie = false
 
  bMsgnormal = false
  bIdentifie = false
 Next

 ' Fin du traitement, on avertit l'utilisateur
 MsgBox "Fin du traitement.",vbOKOnly,"Tri Importance"
Else
 ' On informe l'utilisateur que le répertoire n'existe pas
 MsgBox "Le repertoire " & RepMsg & " n'existe pas !"
End If

--------------------------------------------------------------------------------

D'avance merci pour vos conseils et votre aide.
T

3 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
Modifié par cs_JMO le 5/07/2015 à 09:56
Bonjour,

Effectivement ce n'est pas le top !!!

Exemple pour créer l'arborescence des répertoires :
Option Explicit
Const cstRepMsg = "D:\Test_Unknown_Noob\"

' Arborescence des répertoires
' TEST
' DEP
' 01 - JAN
' Urgent
' Important
' Normal
' 02 - FEV
' ...
' Messages internes
' ...
' ARR
' 01 - JAN
' Urgent
' Important
' Normal
' 02 - FEV
' ...
' Messages internes

'
' Définition des variables
Dim objFso
Dim arrSubFolder, arrNotif
Dim strRepDep, strRepArr
Dim i, j

strRepDep = cstRepMsg & "DEP\"
strRepArr = cstRepMsg & "ARR\"

' Tableau des sous-repertoires
arrSubFolder = Array("01 - JAN\","02 - FEV\","03 - MAR\","04 - AVR\","05 - MAI\","06 - JUN\",_
"07 - JUL\","08 - AOU\","09 - SEP\","10 - OCT\","11 - NOV\","12 - DEC\","Messages internes\")
arrNotif = Array("urgent\","important\","normal\")

Set objFso = CreateObject("Scripting.FileSystemObject")

' On teste l'existence du repertoire RepMsg
Call CheckFolder(cstRepMsg)

' On teste l'existence du repertoire RepDep et
' des sous-repertoires
Call CheckFolder(strRepDep)
For i = 0 To UBound(arrSubFolder)
Call CheckFolder(strRepDep & arrSubFolder(i))
For j = 0 To UBound(arrNotif)
Call CheckFolder(strRepDep & arrSubFolder(i) & arrNotif(j))
Next
Next

' On teste l'existence du repertoire RepArr et
' des sous-repertoires
Call CheckFolder(strRepArr)
For i = 0 To UBound(arrSubFolder)
Call CheckFolder(strRepArr & arrSubFolder(i))
For j = 0 To UBound(arrNotif)
Call CheckFolder(strRepArr & arrSubFolder(i) & arrNotif(j))
Next
Next

Set objFso = Nothing
WScript.Quit

'###########################################
' Sub de creation de repertoire
'###########################################
Sub CheckFolder(ArgFolder)
If Not objFso.FolderExists(ArgFolder) Then
objFso.CreateFolder(ArgFolder)
End If
End Sub


Questions:
- ne te manque-t-il pas un sous-répertoire "Année" ?
- tu effectues l'extraction de la messagerie vers "D:\Test" manuellement, pourquoi ne pas le faire par script ?
- quelle messagerie utilises-tu ?

jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
5 juil. 2015 à 10:21
simplification de la récursivité
Option Explicit
Const cstRepMsg = "D:\Test_Unknown_Noob\"

' Définition des variables
Dim objFso
Dim arrFolder, arrSubFolder, arrNotif
Dim i, j, k

' Tableau des repertoires DEP et ARR
arrFolder = Array(cstRepMsg & "DEP\",cstRepMsg & "ARR\")

' Tableau des sous-repertoires
arrSubFolder = Array("01 - JAN\","02 - FEV\","03 - MAR\","04 - AVR\","05 - MAI\","06 - JUN\",_
"07 - JUL\","08 - AOU\","09 - SEP\","10 - OCT\","11 - NOV\","12 - DEC\","Messages internes\")
' Tableau des sous-repertoire de notification
arrNotif = Array("urgent\","important\","normal\")

Set objFso = CreateObject("Scripting.FileSystemObject")

' On teste l'existence du repertoire RepMsg
Call CheckFolder(cstRepMsg)

' Parcours du tableau arrFolfder
For i = 0 To UBound(arrFolder)
' On teste l'existence du repertoire
Call CheckFolder(arrFolder(i))

' Parcours du tableau arrSubFolfder
For j = 0 To UBound(arrSubFolder)
' On teste l'existence du repertoire
Call CheckFolder(arrFolder(i) & arrSubFolder(j))

' Parcours du tableau arrNotif
For k = 0 To UBound(arrNotif)
' On teste l'existence du repertoire
Call CheckFolder(arrFolder(i) & arrSubFolder(j) & arrNotif(k))
Next
Next
Next

Set objFso = Nothing
WScript.Quit

'###########################################
' Sub de creation de repertoire
'###########################################
Sub CheckFolder(ArgFolder)
If Not objFso.FolderExists(ArgFolder) Then
objFso.CreateFolder(ArgFolder)
End If
End Sub
0
Unknown_Noob Messages postés 2 Date d'inscription dimanche 5 juillet 2015 Statut Membre Dernière intervention 5 juillet 2015
5 juil. 2015 à 11:35
Questions:
- ne te manque-t-il pas un sous-répertoire "Année" ?
Pour le moment, vu mon niveau et le fait que je n'arrive déjà pas à classer mes messages par mois, je vais attendre avant de les classer par année. Mais c'est une option que j'avais en effet envisagé. En plus je suis actuellement en déplacement et internet est un peu difficile d'accès en ce moment, donc j'essaie de me débrouiller avec les moyens que j'ai (c'est à dire quelques sites web et pas de docs...)

- tu effectues l'extraction de la messagerie vers "D:\Test" manuellement, pourquoi ne pas le faire par script ?
Oui, je le fais en manuel, car dans un premier temps j'archive l'intégralité de mes messages (arr et dep) et ensuite je récupère les messages départs afin de les classer et de les trier.
Le dossier qui est généré par mon système lors de l'archivage porte un nom du type:
"archivage_JJ MM AAAA_hh mm ss" et dans ce répertoire j'ai un dossier qui contient tous les messages qui se nomme "RepFormatTexte", et c'est dans ce dernier que je vais chercher les messages à trier.

- quelle messagerie utilises-tu ?
Je bosse avec 2 messageries:
¤ une qui a été conçue juste pour ma boite
¤ et thunderbird
Pour le moment je me concentre uniquement sur la première.

A terme ce que je souhaiterai faire (quand mon niveau sera un peu meilleur) c'est finaliser déjà l'archivage et le classement des messages de ma messagerie interne avec la création d'un tableau dans un fichier excel qui me permettra de savoir quels messages vient de qui et pour qui il est destiné et voir l'objet du message.
Ensuite faire la même chose avec ma messagerie thunderbird.
D'ailleurs le problème avec cette dernière c'est que je suis obligé d'enregistrer chaque message au format html (ou htm) en manuel car les archives doivent pouvoir être consultable sur un pc qui n'est pas forcément équipé d'une messagerie mail.

Merci pour ta réponse et pour ton aide, je vais étudier ton script afin de mieux comprendre le principe de récursivité.

Cordialement,
T

PS: j'ai lu sur certains forums que certaines personnes cherchent des solutions "toutes faites", je tiens à préciser que ce n'est pas mon cas, je suis là avant tout afin de comprendre ce que je fais apprendre à corriger mes erreurs et m'améliorer dans le but de pouvoir me débrouiller tout seul.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
5 juil. 2015 à 12:54
Peux-tu nous énumérer les premières lignes d'un fichier (en masquant tes datas confidentielles) afin de nous permettre d'identifier les lignes (from, to, date, notification).

Dans le premier script, on voit que tu lis le fichier ligne à ligne et jusqu'à la fin. Puis, dans le deuxième script, tu relis le même fichier, ligne à ligne jusqu'à la fin.
Perte de temps.
Une seule lecture du fichier doit suffire et positionner un Exit Do quand from, date et notification sont récupérés.
0
Rejoignez-nous