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 :

erreur d’exécution Dir()


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Par défaut erreur d’exécution Dir()
    Salut la communauté, je développe un formulaire sous Excel pour rechercher des informations, l'idée est la suivante :
    L'utilisateur écrit ce qu'il veut rechercher dans un champ texte, puis Click sur un bouton.
    Le bouton en Question doit rechercher dans un répertoire tous les sous répertoires dont les noms correspondent avec sa recherche.

    voici 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub CommandButton1_Click()
        Dim Search As String
        Dim myFolder1 As String
        Dim myPath1 As String
        Dim myFolder2 As String
        Dim myPath2 As String
     
        '' TextBox1 correspond à la chaine de caractères tapée par l'utilisateur
        Search = Me.TextBox1.Value
     
        'chemin du répertoire parent dans lequel la recherche à lieu
        myPath1 = "C:\Users\a874495\Stage\ATA\N°ATA\"
        myFolder1 = Dir(myPath1, vbDirectory)
     
        Do While myFolder1 <> ""
            If GetAttr(myPath1 & myFolder1) = vbDirectory And myFolder1 <> "." And myFolder1 <> ".." Then
                myPath2 = "C:\Users\a874495\Stage\ATA\N°ATA\" & myFolder1 & "\"
                myFolder2 = Dir(myPath2, vbDirectory)
     
                Do While myFolder2 <> ""
                    If GetAttr(myPath2 & myFolder2) = vbDirectory And myFolder2 <> "." And myFolder2 <> ".." And myFolder2 Like "*" & Search & "*" Then
                    'j'ajoute le répertoire qui match avec la recherche dans une listBox
                    Me.ListBox1.AddItem myFolder2
     
                    End If
                    'Je test le repertoire suivant
                     myFolder2 = Dir()
                Loop
            End If
            myFolder1 = Dir()
        Loop
    End Sub
    J'ai effectué la compilation en mode debug mais je ne comprend toujours pas.

    Lorsque j'exécute le code, cela fonctionne correctement pour les sous répertoires (myFolder2) mais lorsque j'arrive à la boucle principale qui est censé parcourir tous les dossiers parents elle bloque à la 3eme itération, je m'explique :

    En mode debug je vois bien la variable myFolder1 qui prend les valeurs suivante : ".." "." "repertoire 1" puis Erreur d'exécution.
    Elle parcours donc les deux répertoires cachés ".." et "." puis le Premier répertoire visible "repertoire 1" et au moment de passer au répertoire 2 ça m'affiche une erreur d’exécution, alors que le code est très claire, il faut passer au répertoire suivant, le pire c'est que ça à l'air de fonctionner pour les 3 premiers si on considère "." et ".." comme des répertoires.

    Je vous remercie d'avance pour votre aide

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    On ne peut pas avoir plusieurs Dir() concernant des recherches différentes.

    La solution est de faire tourner une première boucle recueillant dans un vecteur de variables de type String les résultats du Dir().

    Puis de reprendre la solution de ton code mais en remplaçant le Dir de myFolder1 par un For To sur le vecteur de variables.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Bonjour,

    Fais une recherche sur les fonctions récursives.

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

Discussions similaires

  1. [AC-2007] Erreur d’exécution 94
    Par Kuky18 dans le forum VBA Access
    Réponses: 8
    Dernier message: 21/07/2011, 16h15
  2. [AC-2007] erreur d’exécution 3167
    Par rominous41 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/05/2011, 14h39
  3. Erreur dexécution '91'
    Par VELO1222 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/01/2011, 17h25
  4. erreur dexécution 1004
    Par VELO1222 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/01/2011, 22h29
  5. Réponses: 2
    Dernier message: 07/05/2008, 13h31

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