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 :

[XL-365 ProPlus] ForEach - méthode non gérée [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 9
    Par défaut [XL-365 ProPlus] ForEach - méthode non gérée
    Bonjour à tous,

    Je débute en VBA ne parviens pas à trouver mon erreur.

    Mon objectif est pourtant très simple.
    - Donner un chemin d'accès dans une cellule, menant a un dossier avec des .xlsx
    - Faire une boucle parcourant les .xlsx afin de les modifier/dupliquer/déplacer ...
    Le code en question :

    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
    Sub test1()
    Dim fso As Object
    Dim rep As String
    Dim X As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    rep = Cells(6, 3).Value & "\" 'répertoire actif à partir de C6 = C:\..\..\
    MsgBox rep                   'Vérification : OK
    
    For Each X In fso.GetFolder(rep)
    'mes instructions, exemple:
        Workbooks.Open X                                     'Ouvre le xlsx original    Sheets("Feuil1").Range("B4:C15").Copy       'Copier des données
        ActiveWorkbook.Close                                 'Ferme le xlsx original
        Workbooks.Add                                           'Créé un nouveau xlsx
        ActiveSheet.Paste Destination:=Range("A1")  'Y coller les données
        ActiveWorkbook.SaveAs "MODEL"                 'Le nommer
        ActiveWorkbook.Close                                 'Ferme le nouveau xlsx
    Next X
    
    End Sub
    Et sur le for each, j'ai l'erreur suivante :
    Erreur 438, propriété ou méthode non gérée par cet objet.
    J'ai pourtant regardé pas mal de forums (nombreux topics sur for each) et la docs microsoft, je ne sais pas pourquoi. J'ai également essayé en ajoutant un .SubFolders, mais meme resultat (de tout manière il n'y a pas de sous ossier dans mon cas).
    Cela pourrait-il venir de la version que j'utilise ? 365 proplus

    Egalement j'ai vu revenir à plusieurs reprises l'instruction f = Dir(X & "*.xlsx"), je n'ai pas bien compris ce que cela renvoyait (pas réussi a la faire tourner).

    Pourriez-vous m'indiquer mes erreurs ?

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 423
    Par défaut
    Bonjour,

    Un début de solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test1()
        Dim fso As Object, rep As Object, X As Object
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set rep = fso.GetFolder(Cells(6, 3).Value) 'chemin répertoire
        For Each X In rep.Files
            If InStr(X.Name, ".xls") > 0 Then
                Debug.Print X.Name
            End If
        Next X
    End Sub
    Cordialement.

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 9
    Par défaut
    Bonjour EricDgn,
    Merci beaucoup pour ta réponse ! Avec ça, la boucle parcours bien les différents fichiers.
    Question détails : ta ligne 4 avec le set, elle permet de définir le chemin d'accès au dossier ou bien elle permet d’accéder au dossier (= elle "ouvre" le dossier) ?

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 423
    Par défaut
    Disons, qu'au moment de ce Set rep il y a tentative de se connecter au dossier. Si le dossier n'existe pas, cela provoque une erreur. Sinon, rep se connecte au dossier.
    Cordialement.

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 9
    Par défaut
    Igloobel > Bonne année ! Merci pour le lien, je suis en train de le zyeuter c'est une vraie mine d'or pour se familiariser avec l'utilisation des mots-clés.
    Je ne connais pas FileDialog, je suis vraiment au tout début de mon apprentissage. J'ai de bonnes connaissances en python, R et matlab/scilab mais VBA c'est nouveau.
    Ok merci pour le "Dir" ! Donc c'est pas la peine de l'utiliser lorsqu'on utilise déjà une boucle For Each pour parcourir les fichiers si je comprends bien.
    (Merci aussi pour le PS, j'y penserais !)

    EricDgn > C'est compris, merci beaucoup !

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    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 871
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous,

    et Bonne Année

    Il manque l'instanciation du fichier Excel

    Je te conseille ce tuto que j'ai comme livre de chevet

    http://warin.developpez.com/access/fichiers/#LI-D-1


    Certes l'exemple est avec un fichier Texte mais rien ne t'empêche d'y mettre un fichier Excel




    Ceci dit moi j'utiliserais les "FileDialog" car tout ce gère dedans y compris les ouvertures de plusieurs fichiers. C'est hypra simple et c'est très propre.




    concernant l'instruction: f = Dir(X & "*.xlsx") cette instruction permet de passer au fichier suivant seulement je ne l'ai jamais vu combiné avec *.xlsx

    voici un exemple tiré de la documentation en ligne

    Cet exemple utilise la fonction Dir pour vérifier si certains fichiers et répertoires existent.

    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
    Dim MyFile, MyPath, MyName
    ' Returns "WIN.INI" (on Microsoft Windows) if it exists.
    MyFile = Dir("C:\WINDOWS\WIN.INI")    
    ' Returns filename with specified extension. If more than one *.ini
    ' file exists, the first file found is returned.
    MyFile = Dir("C:\WINDOWS\*.INI")
    ' Call Dir again without arguments to return the next *.INI file in the 
    ' same directory.
    MyFile = Dir
    ' Return first *.TXT file with a set hidden attribute.
    MyFile = Dir("*.TXT", vbHidden)
    ' Display the names in C:\ that represent directories.
    MyPath = "c:\"    ' Set the path.
    MyName = Dir(MyPath, vbDirectory)    ' Retrieve the first entry.
    Do While MyName <> ""    ' Start the loop.
        ' Ignore the current directory and the encompassing directory.
        If MyName <> "." And MyName <> ".." Then
            ' Use bitwise comparison to make sure MyName is a directory.
            If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
                Debug.Print MyName    ' Display entry only if it
            End If    ' it represents a directory.
        End If
        MyName = Dir    ' Get next entry.
    Loop
    l'instruction : MyName = Dir
    suffit pour passer au fichier suivant

    tu nous dis

    A bientôt

    PS : Quand tu mets un code sur ton post sélectionne le et clic sur le bouton [#] cela mettra les balises Codes au début et à la fin de ta sélection donc de ton code c'est plus plaisant et facile à lire

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

Discussions similaires

  1. Erreur 438 propriété ou méthode non gérée par cet objet
    Par aba_tarn dans le forum VBA Access
    Réponses: 0
    Dernier message: 22/02/2008, 11h30
  2. Propriété ou méthode non-gérée
    Par abennis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/06/2007, 15h18
  3. Propriété ou méthode non gérée par cet objet
    Par abennis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/06/2007, 17h59
  4. propriété ou méthode non gérée par cet objet
    Par Elstak dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/05/2007, 21h23
  5. Erreur:Propriété ou méthode non gérée par cet objet.
    Par nodogeid dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/05/2007, 17h08

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