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 :

Liste de fichiers triés [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Liste de fichiers triés
    Salut à tous,

    Voici mon problème: lors de l'Initialize d'un UserForm, je souhaite afficher dans une ListBox la liste des fichiers contenus dans un certain répertoire, triés par ordre décroissant de date de création (du plus récent au plus ancien).
    Pour cela je passe d'abord par un tableau dynamique appelé ListeFichiers() qui contient des objets File. Seulement lorsque je veux initialiser ce tableau et y mettre un premier objet File, l'erreur "Utilisation incorrecte de la propriété" apparaît et ListeFichiers(0) est surligné, sans que je comprenne pourquoi... Y a-t-il un problème dans le For Each? Dans le type File?

    Voici le début de mon 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
    Private Sub UserForm_Initialize()
    Dim fso As Scripting.FileSystemObject
    Dim disque As Scripting.Folder
    Dim fichier As Scripting.File
    Dim ListeFichiers() As Scripting.File
    Set fso = New Scripting.FileSystemObject
    Set disque = fso.GetFolder("E:\")
    'Tri des fichiers .out par ordre décroissant de date de création
    For Each fichier In disque.Files
        If UBound(ListeFichiers()) = -1 Then
            ReDim ListeFichiers(0)
            ListeFichiers(0) = fichier
        End If
    ...

    Merci d'avance de votre aide!

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Est-ce que ton userform est uniquement fait pour lister les fichiers puis cliquer sur un ou plusieurs pour les ouvrir ?

    Si c'est la cas je te conseille vivement d'utiliser les "FileDialog" c'est beaucoup plus simple.

    A moins bien sur si ton Userform sert à autre chose

    Tu dis

    A+
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Salut Igloobel et merci pour ta réactivité!

    Oui, mon UserForm ne comporte qu'une ComboBox (pas ListBox, au temps pour moi) destinée à lister les fichiers pour en sélectionner un à traiter, un bouton qui sert à valider la sélection et un autre qui ferme l'UserForm.
    OK je vais voir avec les FileDialog, mais j'aurais aimé quand même comprendre ce qui cloche dans mon code, car je ne vois pas ce qui fait défaut...

  4. #4
    Invité
    Invité(e)
    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
     
    Private Sub UserForm_Initialize()
    Dim Fso As Object, Lst As Object, ListeFichiers() As String, Ub As Integer
    Set Lst = CreateObject("System.Collections.SortedList")
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set disque = Fso.GetFolder("c:\")
    'Tri des fichiers .out par ordre décroissant de date de création
    For Each fichier In disque.Files
    Lst.Add Format(fichier.datecreated, "yyyy-mm-dd-hh-mm-ss") & "_" & fichier.Name, fichier.Name
     
    Next
     
    Ub = -1
     For I = 0 To Lst.Count - 1
        Ub = Ub + 1
        ReDim Preserve ListeFichiers(Ub)
       ListeFichiers(Ub) = Lst(Lst.GetKey(I))
     Next
     Me.ListBox1.List = ListeFichiers
    End Sub

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour

    Très indépendamment de tout le reste (qui n'a rien à voir avec l'erreur)
    cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UBound(ListeFichiers()) = -1 Then
    n'a aucun sens
    Un tableau non dimensionné n'a pas de UBound (et un Ubound ne saurait être négatif).
    Fais ce test tout bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim toto()
    If UBound(toto()) = -1 Then MsgBox "coucou"
    et constate la sortie en débug
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Salut rdurupt et unparia,

    rdurupt: Merci, ça marche très bien!

    unparia: OK mais pourtant j'ai trouvé sur msdn:
    Si Array n'a pas d'éléments, par exemple, si c'est une chaîne de longueur nulle, UBound retourne -1.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Aal'k Voir le message
    unparia: OK mais pourtant j'ai trouvé sur msdn:
    oui et pourtant non!

    écris ça dans la fenêtre d'execution ?ubound(array())écris ça dans ton code ?ubound(array())

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    oui et pourtant non!
    Pourrais-tu être un peu plus explicite?

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Ne pas confondre array et matrice (tableau dynmique).
    Ce que tu as lu est vrai dans le cas d'un array, et ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    toto = Array()
    MsgBox UBound(toto)
    If UBound(toto) = -1 Then MsgBox "coucou"
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    unparia: D'accord c'est noté!

    Encore une fois, merci à tous!

    A+

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Pas de quoi...
    Pour les plus curieux, maintenant :
    voici un exemple de mécanisme rigolo qu'il m'arrive d'utiliser dans certains cas (rares) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private toto()
     
    Private Sub CommandButton1_Click()
      If Not (Not toto) Then
        MsgBox "déja dimensionné à " & UBound(toto) & " on va lui ajouter un élément"
        ReDim Preserve toto(UBound(toto) + 1)
        MsgBox "maintenant dimensionné à " & UBound(toto)
      Else
        MsgBox "non encore dimensionné - pouvez faire un redim(0), par exemple. On le fait"
        ReDim toto(0)
        MsgBox "maintenant dimensionné à " & UBound(toto)
      End If
     End Sub
    Si DarkVader, que je salue, passe par là, il va surement crier au scandale et proposer du plus pur (ce qui est en effet également possible)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

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

Discussions similaires

  1. Tri liste de fichiers ( GLOB )
    Par olivier1969 dans le forum Langage
    Réponses: 5
    Dernier message: 06/05/2016, 12h59
  2. [XL-2007] Tri liste sur fichier excel
    Par broch01 dans le forum Excel
    Réponses: 5
    Dernier message: 08/11/2013, 14h50
  3. Tri d'une liste de fichiers selon un ordre
    Par Geoffrey49000 dans le forum Général Java
    Réponses: 1
    Dernier message: 09/09/2011, 00h03
  4. tri d'une liste de fichiers
    Par Kleer dans le forum C
    Réponses: 1
    Dernier message: 01/10/2007, 15h19
  5. [Kylix] Liste des fichiers d'un répertoire
    Par Houben Jacques dans le forum EDI
    Réponses: 3
    Dernier message: 30/11/2002, 21h14

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