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 '424' Objet requis


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 10
    Par défaut Erreur '424' Objet requis
    Bonjour à tous,
    tout d'abord merci d'avance pour vos réponses...
    Voilà j'ai un soucis : ça fait des semaines que je suis sur ce programme et que je n'arrive pas à le débeuguer. Il y a toujours et encore la même erreur et j'ai beau essayer de la corriger, je n'y parviens pas. En effet, je souhaiterais faire un programme qui permettrait à des personnes ayant des connaissances limités en informatique, d'effectuer des recherches de document par nom du fichier, date de création, de modification, emplacement et/ou le propriétaire/auteur. Mais la ligne *For Each FileItem In SourceFolder.Files* fait des siennes. Si vous avez une solution à proposer, je suis prenante !
    Vous pourez trouver le code en pièce jointe.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    le message d'erreur signifie que tu manipules une variable qui n'est pas un objet OU une variable objet qui n'est pas instanciée ... dans une instruction qui attend un objet

    donc, sans voir ton code complet, deux possibilités :

    1) La variable FileItem est mal typée dans sa déclaration
    2) La variable SourceFolder est mal typée dans sa déclaration ET/OU non instanciée avant de faire ta boucle For Each


    si tu montres ton code, ça ira beaucoup mieux

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 10
    Par défaut
    Le code est en pièce jointe au message

  4. #4
    Invité
    Invité(e)
    Par défaut
    et pour voir le code j'imagine qu'il faut Télécharger a pièce jointe?

    mon téléphone portable affiche bien les classeur Excel mais pas le code des macro!

    je fais comment?

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    La réponse est probablement logée dans un coin de notre cerveau.

    Si tu ne fais pas d'effort en présentant ta procédure, pourquoi on en ferait pour tenter de t'aider ?
    On demande juste à un copier coller de quelques lignes VBA, on ne demande pas la lune j'espère ?

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 10
    Par défaut
    Je vous écris les lignes de codes :

    PS : le problème se trouverait d'après moi à la ligne 24 du premier code

    --- Liste des fichiers ---
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Dim i
    Sub arborescence()
      Application.ScreenUpdating = False
     
      racine = "D:\Documents\n.dervaux\Documents" 'Répertoire à parcourir
     
      If racine = "" Then Exit Sub
     
      'Réinitialise le tableau
      Range("A2:E20000").ClearContents
     
      Set fs = CreateObject("Scripting.FileSystemObject")
      Set dossier_racine = fs.GetFolder(racine)
     
      i = 2 'numéro de la ligne à remplir
     
      Lit_dossier dossier_racine, 1
     
    End Sub
    Sub Lit_dossier(ByRef dossier, ByVal niveau)
     
       'Boucle sur tous les fichiers du répertoire
        For Each FileItem In SourceFolder.Files
            'Inscrit le nom du fichier dans la cellule
            Cells(i, 1).Value = FileItem.Name
            'Ajoute un lien hypertexte vers le fichier
            ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), _
                Address:=FileItem.ParentFolder & "\" & FileItem.Name
            'Indique le type
            Cells(i, 2).Value = FileItem.ParentFolder
            'Indique la date deù création
            Cells(i, 3).Value = FileItem.DateCreated
            'Indique la date de dernière modification
            Cells(i, 4).Value = FileItem.DateLastModified
            'Indique le nom de l'auteur
            Cells(i, 5).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author") '.Value ?
            i = i + 1
       Next
     
       'Boucle sur tous les sous-dossiers du répertoire
       For Each d In dossier.SubFolders
         Lit_dossier d, niveau + 1
       Next
     
       'Ajuste la largeur des colonnes A:E en fonction du contenu des cellules.
        Columns("A:E").AutoFit
    End Sub
    --- Sélectionner les fichiers recherchés ---

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    Sub RechercheCorrespondences(Feuil1, Liste)
     
        Dim MC1 As String
        Dim MC2 As String
        Dim MC3 As String
        Dim T As String
        Dim DCMin As Date
        Dim DCMax As Date
        Dim DMMin As Date
        Dim DMMax As Date
        Dim A As String
        Dim k As Long
        Dim j As Long
     
        MC1 = Range("B3").Value 'Récupère ce qui a été entré dans la case 'Mot-clé 1' et le stocke dans la variable MC1
        MC2 = Range("D3").Value 'Récupère ce qui a été entré dans la case 'Mot-clé 2' et le stocke dans la variable MC2
        MC3 = Range("F3").Value 'Récupère ce qui a été entré dans la case 'Mot-clé 3' et le stocke dans la variable MC3
        T = Range("B4").Value 'Récupère ce qui a été entré dans la case 'Type' et lestocke dans la variable T
        DCMin = Range("B5").Value 'Récupère ce qui a été entré dans la case 'Date de création min' et le stocke dans la variable DCMin
        DCMax = Range("E5").Value 'Récupère ce qui a été entré dans la case 'Date de création max' et le stocke dans la variable DCMax
        DMMin = Range("B6").Value 'Récupère ce qui a été entré dans la case 'Date de modification min' et le stocke dans la variable DMMin
        DMMax = Range("E6").Value 'Récupère ce qui a été entré dans la case 'Date de modification max' et le stocke dans la variable DMMax
        A = Range("B7").Value 'Récupère ce qui a été entré dans la case 'Auteur' et le stocke dans la variable A
     
        j = 1
        Do While Liste.Cells(j, 1) <> ""
            j = j + 1
        For i = 1 To j 'i va parcourir la liste de tout les fichiers référencés précédemment
            'MOTS-CLE
            If "*MC1*" = Liste.Cells(1, i).Value Or "*MC2*" = Liste.Cells(1, i).Value Or "*MC3*" = Liste.Cells(1, i).Value Then 'Détecte l apparition des mots-clé dans le titre du i-ème fichier
                k = 17 + i
                Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk") 'Remplit la case Nom du fichier du tableu de résultats
            End If
     
            'TYPE
            If "*T" = Liste.Cells(2, i).Value Then 'Détecte si le type du i-ème fichier est celui saisi dans les critères de recherche
                k = 17 + i
                Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk") 'Remplit la case Type du tableu de résultats
                Feuil1.Cells("Ck") = T
            End If
     
            'DATE DE CREATION
            If DCMin <> "" And DCMax <> "" Then '/!\ Si une des deux dates n'est pas remplie
                If "DCMin*" >= DC Or "DCMax*" <= DC Then
                    Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                    Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                    Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk") 'Remplit la case Date de création du tableu de résultats
                End If
            ElseIf DCMin <> "" Then
                If "DCMin*" >= DC Then
                    Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                    Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                    Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk")
                End If
            ElseIf DCMax <> "" Then
                If "DCMax*" <= DC Then
                    Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                    Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                    Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk") 'Remplit la case Date de création du tableu de résultats
                End If
            End If
     
            'DATE DE MODIFICATION
            If DMMin <> "" And DMMax <> "" Then '/!\ Si une des deux dates n'est pas remplie
                If "DMMin*" >= DM Or "DMMax*" <= DM Then
                    Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                    Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                    Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk") 'Remplit la case Date de modification du tableu de résultats
                End If
            ElseIf DMMin <> "" Then
                If "DMMin*" >= DM Then
                    Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                    Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                    Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk")
                End If
            ElseIf DMMax <> "" Then
                If "DMMax*" <= DM Then
                    Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                    Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                    Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk") 'Remplit la case Date de modification du tableu de résultats
                End If
            End If
     
            'AUTEUR
            If A = Liste.Cells(5, i).Value Then 'Détecte si l auteur du i-ème fichier est celui saisi dans les critères de recherche
                k = 17 + i
                Range("Ak,Bk").Merge 'Fusionne les cellules Ak et Bk du Nom
                Range("Ck,Dk").Merge 'Fusionne les cellules Ck et Dk du Type
                Sheets("Liste").Range("Ai:Ei").Copy Sheets("Feuil1").Range("Ak:Gk") 'Remplit la case Auteur du tableu de résultats
            End If
         Next
         Loop
     
         Worksheets("Feuil1").Select
     
    End Sub

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 10
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    La réponse est probablement logée dans un coin de notre cerveau.

    Si tu ne fais pas d'effort en présentant ta procédure, pourquoi on en ferait pour tenter de t'aider ?
    On demande juste à un copier coller de quelques lignes VBA, on ne demande pas la lune j'espère ?
    Si je n'avais pas écris les codes, c'est parce que je pensais que vous pouviez tous y avoir accès avec le fichier Excel. Cela ne me pose aucun problème de faire ce simple copier coller comme vous pouvez le constater par vous même.

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each FileItem In dossier.Files

    SourceFolder n'est pas un argument de ta procédure Lit_dossier, en utilisant le bon argument (dossier) ça devrait être bon

    en revanche, simple conseil, prend l'habitude de déclarer tes variables, dans les deux premières procédures ce n'est pas le cas.
    Si besoin, ajoutes en haut du module

    ça te forcera à les déclarer, pour éviter les erreurs de ce type

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 10
    Par défaut
    Merci pour l'aide, le programme répertorie bien tous les fichiers. Mais re-beugue sur la même ligne. Je m'explique : lorsque je lance le programme, il tourne et affiche un message d'erreur. lorsque j'arrête le programme, les lignes s'affichent...

    Et merci pour le conseil, en temps normale j'essaye de le faire un maximum mais le premier code m'a été donné sur un autre forum :-)

  10. #10
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    J'avais testé ton premier programme (les deux procédures pour lister les fichiers) et je n'ai pas eu de message d'erreur

    pour le point lié au fait que c'est en arrêtant la procédure que les lignes s'affichent, c'est normal. Tu es en mode rafraichissement d'écran désactivé.
    donc tant que la procédure tourne, tu ne vois rien de modifié dans Excel. L'affichage se fait uniquement à la fin de la procédure OU quand tu la stop.


    quand tu dis qu'il bug encore sur la même ligne, c'est toujours celle là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each FileItem In dossier.Files
    c'est le même message d'erreur ? Ca me surprendrais puisqu'on a bien la variable dossier qui est un objet (fait référence à "dossier_racine" qui est un objet "Folders")
    Et la variable FileItem n'a pas besoin d'être déclarée ou instanciée pour fonctionner en l'état

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 10
    Par défaut
    Le programme (le premier code) prend du temps à s'effectuer (je peux comprendre même si je n'ai pas énormément de fichiers, 6926 pour être précise) sauf que maintenant, c'est le chemin qui n'est pas valide alors que je prends l'emplacement d'un dossier dans les propriétés du fichier...
    A la réflexion, c'est parce qu'il indique que le chemin n'est pas valide qu'il bug sur cette ligne...

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Dépendant de la version de Windows, il y a plus ou moins de dossiers dont l'accès est bloqué à VBA.

    Une chose que tu peux essayer, sans garantie de succès (absolu), c'est d'ouvrir Excel en tant qu'administrateur. Sur ta machine, cela devrait s'améliorer un petit peu. Sur une machine au travail, cela risque de dépendre du Service de Dictature Informatique pour les droits d'accès.

Discussions similaires

  1. Find - Erreur 424 - Objet requis
    Par wilfried_42 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/02/2009, 09h42
  2. erreur 424, objet requis
    Par Nessie37 dans le forum VBA Access
    Réponses: 8
    Dernier message: 08/01/2009, 12h20
  3. Erreur 424 objet requis
    Par davyvba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2008, 17h52
  4. erreur "424" Objet requis
    Par fifrelin_70 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 29/10/2007, 19h48
  5. Erreur 424 Objet requis sur connexion à Access
    Par darkian dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 11h32

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