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 :

impossible de prendre la main dans une boucle de lecture de fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut impossible de prendre la main dans une boucle de lecture de fichier
    Bonjour,

    J'ai une boucle qui cherche des fichiers pour mettre à jour une base.

    J'aimerais ajouter une sauvegarde du fichier lu dans un sous répertoire avant de supprimer l'original et comme ça ne fonctionne pas je voulais débugger.
    or je n'arrive pas à prendre la main dans la boucle pour vérifier ma séquence le fichier s'ouvre et la macro se termine. j'ai mis des point d'arrets, mais cela ne change rien.

    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
    Sub Import()
    On Error GoTo 0   '<== tentative pour forcer au cas ou le gestionnaire d'erreur soit inactif
    Dim Fich, Mon_Rep As String, Ctr As Long, Ligne As Integer
    Dim La_Colon
     
    'Application.ScreenUpdating = False
     
    Mon_Rep = "G:\TRANSFERT\FICHIERS_SAP\"
            Fich = Dir(Mon_Rep & "STK_Nav_MP*.csv")
     
    While Len(Fich) > 0
     
    Workbooks.Open Filename:=Mon_Rep & Fich, Local:=True
    Stop  '<==== ne s'arrete pas
    ActiveSheet.Range("A2:K" & ActiveSheet.Range("A1048576").End(xlUp).Row).Copy ThisWorkbook.Worksheets("Reception").Range("A" & ThisWorkbook.Worksheets("Reception").Range("A1048576").End(xlUp).Row + 1)
     
    Workbooks(Fich).SaveAs Mon_Rep & "Save_navettes\" & Fich   ' <== ce que je souhaite faire 
    Workbooks(Fich).Close
    Kill Mon_Rep & Fich
    Fich = Dir
    Wend
     
        ActiveWorkbook.RefreshAll
     
    MsgBox "j'ai fini ! "
     
    End Sub
    merci de vos conseils
    Denis

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut

    De mon côté, l'exécution s'arrête bien sur la ligne Stop. Qu'est-ce qui ne fonctionne pas dans ton code?

    Ceci dit:
    1. On Error Goto 0 ne sert pas à grand chose en début de macro. Ca ne désactive pas les gestionnaires d'erreurs qui seraient présents dans la pile d'appel. Au mieux, ça remet l'erreur à 0;
    2. Perso, je travaillerais avec une variable de type workbook pour piloter plus facilement mon code;
    3. Si tu souhaites enregistrer le fichier au format CSV (vu le nom que tu utilises), il serait souhaitable de le préciser: wbSource.SaveAs Mon_Rep & "Save_navettes\" & Fich, FileFormat:=xlCSV.




    Code NON TESTÉ!!

    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
    Sub Import()
      Dim Fich, Mon_Rep As String, Ctr As Long, Ligne As Integer
      Dim La_Colon
      Dim wbSource As Workbook
      Dim Source As Range, Target As Range
     
      Mon_Rep = "c:\data\temp\"
      Fich = Dir(Mon_Rep & "*.csv")
     
      While Len(Fich) > 0
        Set wbSource = Workbooks.Open(Filename:=Mon_Rep & Fich, Local:=True)
        Stop  '<==== ne s'arrete pas
        Set Target = ThisWorkbook.Worksheets("Reception").Range("A1048576").End(xlUp)(2)
        Set Source = ctiveSheet.Range("A2:K" & ActiveSheet.Range("A1048576").End(xlUp).Row)
        Source.Copy Target
        wbSource.SaveAs Mon_Rep & "Save_navettes\" & Fich, FileFormat:=xlCSV  ' <== ce que je souhaite faire
        wbSource.Close
        Kill Mon_Rep & Fich
        Fich = Dir
      Wend
     
      ActiveWorkbook.RefreshAll
      MsgBox "j'ai fini ! "
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/05/2020, 02h18
  2. [WM21] Smsenvoie dans une boucle avec lecture de fichier
    Par TARGUE dans le forum Windev Mobile
    Réponses: 7
    Dernier message: 05/04/2017, 15h12
  3. Prendre en compte une valeur insérée dans une boucle for
    Par SOPSOU dans le forum Intelligence artificielle
    Réponses: 6
    Dernier message: 08/07/2009, 16h20
  4. Réponses: 17
    Dernier message: 25/06/2009, 11h38
  5. prendre par id dans une boucle
    Par kaking dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/09/2008, 10h19

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