Explication sur ma macro

Bonjour,

alors voila, j'utilise cette macro qui marche très bien :

Sub propriétés(chemin As String, Titre As String) 'macro principale
Dim myShell As Shell
Dim myFolder As Folder
Dim myFile As FolderItem
Dim F As String, lig As Long
Dim curseur As Long
Dim debut
deverrou ("Résultat")

On Error Resume Next
Set myShell = CreateObject("Shell.Application")
Set myFolder = myShell.NameSpace(chemin)

curseur = Sheets("Résultat").cells.Find(What:=Titre).Row '"curseur" = la ligne dans la feuille "Résultat" qui a la même valeur que Titre
curseur = curseur + 2 'décrémente de 2 lignes
debut = curseur

  Application.ScreenUpdating = False
  While cells(curseur, 1).Interior.ColorIndex = xlNone 'Tant que la cellule n'est pas colorée
    Rows(curseur).Delete 'supprime les ligne
  Wend 'Fin supprime
  Application.ScreenUpdating = True

F = Dir(chemin & "\*.doc")
'fonction Dir retourne une chaîne représentant le nom d'un fichier, d'un répertoire ou d'un dossier qui correspond à un modèle
'ou un attribut de fichier spécifié ou à l'étiquette de volume d'un lecteur

Do While Len(F) > 0

'fonction Len retourne un entier contenant le nombre de caractères contenus dans une chaîne ou le nombre nominal d'octets
'requis pour stocker une variable

Set myFile = myFolder.Items.Item(F)

    If myFolder.GetDetailsOf(myFile, 0) <> "" Then

        With Sheets("Résultat")
            .Rows(curseur).Select 'selectionne la ligne "Ligne" de la Feuille "Résultat"
            Selection.Insert Shift:=xlDown 'Insert ligne à partir de la ligne Ligne
            .Range("A1").Offset(curseur - 1, 0).Select
            .Hyperlinks.Add Anchor:=Selection, Address:= _
            chemin & "\" & myFolder.GetDetailsOf(myFile, 0) _
            , TextToDisplay:=myFolder.GetDetailsOf(myFile, 0) 'Affiche le nom et met un lien
            Selection.Font.Bold = True
            .cells(curseur, 5) = CDate(myFolder.GetDetailsOf(myFile, 3)) 'date de modif
            .cells(curseur, 4) = CDate(myFolder.GetDetailsOf(myFile, 31)) 'date de création
            .cells(curseur, 2) = myFolder.GetDetailsOf(myFile, 9) 'Auteur
            .cells(curseur, 3) = myFolder.GetDetailsOf(myFile, 11) ' objet
            .cells(curseur, 7) = myFolder.GetDetailsOf(myFile, 12) ' proprio
            .cells(curseur, 6) = myFolder.GetDetailsOf(myFile, 8) 'lastsaveby
            .Rows(curseur).Locked = True
        End With
        curseur = curseur + 1
    End If

F = Dir
Loop
Set myShell = Nothing
Set myFolder = Nothing
Set myFile = Nothing

With Sheets("Résultat")
    .Range("A" & debut & " :G" & curseur - 1).Sort Key1:=Range("A" & debut), Order1:=xlAscending 'tri dans l'ordre alphabetique
    .Range("A:A, C:C").WrapText = True 'adapte de texte des colonnes
    .cells(4, 1).Select
End With
verrou ("Résultat")
End Sub

Le problème c'est que je ne comprend pas comment elle marche.

Cette marco a pour fonction principale de lister tous les documents présent dans un répertoire donné avec certaines de leur propriétés.

Premièrement la boucle Do While Len(F) > 0 :

En quoi "faire tant que le nombre de caractère du premier document trouvé est supérieur à 0" permet d'effectuer les traitements à l'intérieure de la boucle pour tous les documents du répertoire? Autrement dis ou est le code qui indique de parcourir tous les documents du répertoires?

Ensuite "Set myFile = myFolder.Items.Item(F)" comment on peut traduire cela je ne comprend pas?

Et enfin

"F = Dir

Loop

Set myShell = Nothing

Set myFolder = Nothing

Set myFile = Nothing"

Est-ce une sorte de destructeur? Pourquoi faut-il réinitialiser ces variables?

J'espère trouver des réponses !

Cordialement.

Bonjour,

le premier :

F = Dir(chemin & "\*.doc") 'initialise le Dir et Chemin

...Ensuite le :

F = Dir 'poursuit la recherche avec les paramètres du premier donc à chaque tour de Loop le F à changé

Loop

Pour les items (avec "s" = collection d'item=, ça se passe comme ça ! Aulieu d'écrire directement items(F) ben... on écrit comme ça.

Je suppose que c'est parce que les items ne font pas partie d'une classe aussi bien définies que d'autres éléments d'une collection. J'avais déjà remarqué cette particularité sur d'autres objets en bout de chaine. (p.e. Object.Object...)

Bon, enfin c'est l'explication que je me donne...

Quand au destructeur, on peut le voir comme ça oui. Quoi que dans le cas présent, à mon avis ça ne sert pas à grand chose. ça me semble être une habitude de puristes habitué de langages de prog évolués : Il me semble que dans Excel les instances sont détruites automatiquement en fin de proc. Mébon... Là encore c'est peut-être une excuse que je me donne parce que je suis un tantinet fainéant.

Je détruit rarement mes instances et je n'ai jamais constaté d'anomalies criantes alors...

A+

Ah!! Merciii je comprend mieux maintenant !

c'etait le F=Dir qui était difficile à comprendre.

Cdt.

Rechercher des sujets similaires à "explication macro"