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 '-2147024809 (80070057)' [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Dataminer
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Dataminer

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut Erreur d'exécution '-2147024809 (80070057)'
    Bonjour,

    J'ai fais une macro qui pour chaque fichier .txt dans un dossier, l'importe dans un fichier Excel dans une feuille dont le nom correspond au nom du fichier (sans l'extension .txt).

    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
    Sub test()
    
        Dim objBO, objrep
              
        'déclaration des variables
        repertoire = "\\magnum\suivi_des_operations$\ESPR\Etudes\BDD\BRUT"
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objDossier = objFSO.GetFolder(repertoire)
    
        'pour chaque fichier ".rep" dans le dossier
        If (objDossier.Files.Count > 0) Then
            For Each objFichier In objDossier.Files
                If (InStr(1, objFichier.Name, ".txt", 1) > 0) Then
        
                    'nom de la feuille = nom du fichier
                    nom_feuille = Left(Right(objFichier.Name, Len(objFichier.Name) - Len(Left(objFichier.Name, 6))) _
                    , Len(Right(objFichier.Name, Len(objFichier.Name) - Len(Left(objFichier.Name, 6)))) _
                    - Len(Right(Right(objFichier.Name, Len(objFichier.Name) - Len(Left(objFichier.Name, 6))), 4)))
                                    
                    'importe le fichier texte dans la feuille correspondante
                    With Workbooks("BDD.xlsm").Sheets(nom_feuille).QueryTables.Add(Connection:= _
                        "TEXT;" & repertoire & "\" & objFichier.Name _
                        , Destination:=Range("$A$1"))
                        .RefreshStyle = xlOverwriteCells
                        .Refresh BackgroundQuery:=False
                    End With    
                End If
            Next
        End If
    
    End Sub
    Quand je lance la macro, j'ai une
    Erreur d'exécution '-2147024809 (80070057)': La plage de destination n'est pas dans la même feuille de calcul que celle dans laquelle la table de requête est créée.
    Je ne vois pas ce qui cloche dans mon code. Quelqu'un a-t-il une idée s'il vous plait ?

    Merci par avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Si tu veux récupérer juste le nom du fichier sans l'extension et dans sa totalité, utilise plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom_feuille = Left(objFichier.Name, Len(objFichier.Name) - 4)
    car ceci estropie le nom si il dépasse 11 caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            nom_feuille = Left(Right(objFichier.Name, Len(objFichier.Name) - Len(Left(objFichier.Name, 6))) _
    , Len(Right(objFichier.Name, Len(objFichier.Name) - Len(Left(objFichier.Name, 6)))) _
    - Len(Right(Right(objFichier.Name, Len(objFichier.Name) - Len(Left(objFichier.Name, 6))), 4)))
    Hervé.

  3. #3
    Membre confirmé
    Homme Profil pro
    Dataminer
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Dataminer

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut
    En fait j'ai fait comme ça car le nom de mes fichiers n'est pas exactement le même que celui de mes feuilles.

    Mes fichiers se nomment :
    BDD - Appels sortants.txt
    BDD - Convention.txt
    ...

    Et mes feuilles se nomment :
    Appels sortants
    Convention
    ...

    Du coup c'est le seule moyen que j'ai trouvé pour extraire la correspondance.

    Pour mon erreur j'ai trouvé d'où ça venait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    With Workbooks("BDD.xlsm").Sheets(nom_feuille).QueryTables.Add(Connection:= _
                        "TEXT;" & repertoire & "\" & objFichier.Name _
                        , Destination:=Workbooks("BDD.xlsm").Sheets(nom_feuille).Range("$A$1"))
                        .RefreshStyle = xlOverwriteCells
                        .Refresh BackgroundQuery:=False
    Il fallait rajouter la partie en gras.

    Maintenant j'ai un autre problème. Je souhaite supprimer les données de chaque feuille avant d'importer. J'ai fait ce code qui efface les données de chaque colonne non vide de la feuille (quand la cellule de la première ligne est non vide) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                    Sheets(nom_feuille).Select
                    i = 1
     
                    Do While Cells(1, i) <> "" Or Cells(1, i).Interior.Color <> 49407
                        Columns(i).Select
                        Selection.ClearContents
                        i = i + 1
                    Loop
    Mais il tourne en boucle. Je ne vois pas pourquoi.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    Avec And plutôt non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    I = 1
     
    'boucle tant que la cellule en cours n'est pas vide
    'et que sa couleur est différente de 49407
    Do While Cells(1, I) <> "" And Cells(1, I).Interior.Color <> 49407
     
        Columns(I).ClearContents
        I = I + 1
     
    Loop
     
    Hervé.

  5. #5
    Membre confirmé
    Homme Profil pro
    Dataminer
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Dataminer

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut
    C'est ça !

    Olala c'est tellement évident, comment j'ai fais pour passer à côté... on va dire que c'est bientôt le week end lol.

    Merci en tout cas !

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

Discussions similaires

  1. Réponses: 28
    Dernier message: 23/01/2015, 22h50
  2. erreur d'exécution '2147024809(80070057)
    Par timtof2011 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/02/2012, 19h11
  3. [CR8][VB6] Erreur d'exécution 20533
    Par pvava dans le forum SDK
    Réponses: 1
    Dernier message: 01/02/2005, 10h27
  4. Erreurs d'exécution sous delphi 5
    Par nkd dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2004, 17h25
  5. [Apache Perl] Erreur à l'exécution de mes cgi
    Par GLDavid dans le forum Apache
    Réponses: 4
    Dernier message: 28/08/2004, 20h23

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