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 :

Fusion de fichier, problème d'incrémentation de dir?


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Fusion de fichier, problème d'incrémentation de dir?
    Bonjour à tous, ceci est mon 1er message sur le forum. Désolé si je fais des erreurs dans la façon dont je vous présente mon code.

    J'essaye de rassembler 4 fichiers et de les copier/coller dans un fichier déjà existant que l'ont va appeler Extraction (sur le même répertoire). Les 4 fichiers sont des extractions et je n'ai pas le choix de leur format : .xls (Excel 97-2003). J'ai le choix du format de Extraction sur lequel je veux copier les 4 fichiers.

    Les 4 fichiers ont le même format (mêmes colonnes), je souhaite garder celui-ci pour Extraction également. Donc ça simplifie les choses.

    NOTE : Le fichier où il y a la macro est dans un autre répertoire.

    Cela devrait être plutôt simple mais le nom du fichier ne s'incrémente quand je balaye le répertoire et pas et reste tout le temps le même. Je vois ça avec le MsgBox que j'ai mis dans la boucle while. A noter que la boucle est infini puisque rien ne s'incrémente...

    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
    Sub Importation()
     
    'indiquer le chemin du répertoire où nous travaillons
    Dim chemin_fichier_extraction As String
    chemin_fichier_extraction = "d:\Users\bliblou\blabla\"
     
    'Le fichier Extraction et onglet qui nous concernent dans ce répertoire (la où nous voulons copier les 4 fichiers)
    Dim Wb_extraction As Workbook
        Dim Nom_du_Fichier As String: Nom_du_Fichier = "Extraction"
        Dim Ws_extraction As Worksheet
        Dim derniereLigne_exctraction As Integer
     
    'le fichier où il y a la macro    
    Dim Wb_actualisation As Workbook
        Dim Ws_ListeComplete As Worksheet
        Dim derniereLigne_ListeComplete As Integer
        Set Wb_actualisation = ThisWorkbook
     
     
    Dim chemin As String    ' classeur regroupé
    Dim rep As String       ' répertoire à traiter
    Dim fic As String      ' classeur regroupé
    Dim WI As Worksheet     ' feuille regroupement
     
     
    'le répertoire est un répertoire fils où se trouve la macro
    rep = Wb_actualisation.Path & "\Importation en masse SIAM\"
     
    ' jusqu'ici il s'ouvre bien
    Set Wb_extraction = Application.Workbooks.Open(rep & Nom_du_Fichier)
    Set Ws_ListeComplete = ThisWorkbook.ActiveSheet         ' variable feuille où l'on supprime ce qu'il y avait avant
    Ws_ListeComplete.Cells.ClearContents
     
     
    'Qu'importe que je mette "*. *" ou "*.xlsm" ou "*.xls", il m' affiche constamment la même chose Cad le fichier "Extraction.xlsm"
    fic = Dir(rep & "*.xls")    ' recherche fichiers
     
    While fic <> ""
        MsgBox (fic)
        If fic <> Wb_extraction.Name Then
            chemin = rep & fic       ' chemin fichiers
            Workbooks.Open chemin, 0  ' ouverture
            Set Wl = ActiveWorkbook.Sheets(1)
            Wl.Copy After:=Wb_extraction
            Workbooks(fic).Close SaveChanges:=False   ' Fermeture du classeur puis suppression de celui-ci
            Kill Workbooks(fic)
            nbc = nbc + 1
        End If
        fic = Dir(rep) 'j' ai tout essayé Dir() ou Dir ça ne fonctionne pas
    Wend
    End sub
    Qu'est-ce que je ne comprends pas ?
    Merci beaucoup d'avance et bonne soirée !

  2. #2
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 569
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonjour,

    Sans m'intéresser à l'ensemble du code mais pour passer au fichier suivant en fin de boucle tu dois utiliser dir sans paramètres sinon il retourne toujours la même chose puisqu'à chaque boucle tu lui donnes le même ordre.

    fic = dir()
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour Alex020181,

    Merci de ta réponse,

    J'ai essayé avec dir() et juste Dir, ça ne change rien. MsgBox m'affiche toujours le même fichier. C'est comme si Dir() n'incrémentait pas.
    De plus c'est bizarre car fic = Dir(rep & "*.xls") est sensé me prendre uniquement les fichier xls mais celui qu'il m'affiche est Extraction.xlsm ... Je ne comprends pas trop


    Bonne journée à toi !!

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai essayé avec dir() et juste Dir, ça ne change rien. MsgBox m'affiche toujours le même fichier. C'est comme si Dir() n'incrémentait pas.
    J'ai écrit une fonction générique qui renvoie dans une variable tableau les fichiers cherchés en utilisant la Dir voir ma réponse dans cette discussion
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour
    Citation Envoyé par Charlyy29 Voir le message
    Désolé si je fais des erreurs dans la façon dont je vous présente mon code.
    Il faut effectivement boucler avec fic = dir() ou fic = dir

    Tu defini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim WI As Worksheet     ' feuille regroupement
    et tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Set Wl = ActiveWorkbook.Sheets(1)
    I et l ce n'est pas pareil

    nbc n'est pas défini

    L'utilisation de Wb_actualisation ne sert pas à grand chose.

    De plus c'est bizarre car fic = Dir(rep & "*.xls") est sensé me prendre uniquement les fichier xls mais celui qu'il m'affiche est Extraction.xlsm ... Je ne comprends pas trop
    C'est normal car 'xls' est compris dans 'xlsm'

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour Philippe Tulier, Bonjour anasecu,

    Merci pour vos réponses.

    J'ai regardé le code de Philippe et j'ai fait un mix avec le mien en corrigeant ce que tu m'as dit anasecu et ça fonctionne plus ou moins mais honnêtement je ne comprends pas pourquoi . Oh moins maintenant dir s'incrémente bien en tout cas ! Merci.

    Si je prends que la partie qui nous intéresse :

    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
    Sub blabla()
     
    nbc = 0                ' initialisation variables
    i = 1
     
    fic = Dir(rep & "*.xls")    ' recherche fichiers
     
    While fic <> "" Or i < 5
        MsgBox (fic)
        If fic <> Wb_extraction.Name Then
            chemin = rep & fic       ' chemin fichiers
            Workbooks.Open chemin, 0  ' ouverture
            Set Wl = ActiveWorkbook.Sheets(1)
            Wl.Copy After:=Wb_extraction
            Workbooks(fic).Close SaveChanges:=False   ' Fermeture du classeur
            Kill Workbooks(fic)
            nbc = nbc + 1
        End If
        fic = Dir()
        i = i + 1
    Wend
     
    End sub
    A quoi ça sert de mettre une incrémentation dans la boucle (ici nbc) ? Pourquoi met-on 0 après Workbooks.Open chemin, 0 ? Merci de vos réponses !

    NOTE : Je ne sais pas comment le mettre sous forme de code pour que vous le voyiez propre ^^'

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A quoi ça sert de mettre une incrémentation dans la boucle (ici nbc) ?
    Pourquoi met-on 0 après Workbooks.Open chemin, 0 ? Merci de vos réponses !
    Je suppose que c'est toi qui a écrit le programme donc je ne comprends pas pourquoi tu te poses la question de l'incrémentation de la variable nbc ?
    Le troisième argument de la méthode Open est en réalité un boolean et 0 est l'équivalent de False. Comme cet argument est facultatif, il n'y a aucune raison de l'utiliser si ce n'est pas en ReadOnlly

    Explication sur cette méthode https://docs.microsoft.com/fr-fr/off...6)%26rd%3Dtrue

    Il est important de déclarer et typer ses variables et il n'y a aucune raison d'initialiser nbc à 0 en débute de procédure. Par défaut une variable numérique vaut 0
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 569
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonjour,

    Je te joins un fichier qui te montre plusieurs méthodes pour lister les fichiers et appliquer le filtre xls

    - feuille "resultat_liste_simple" --> tu obtiendras la liste de TOUS les fichiers du répertoire défini (donc à adapter par toi même) dans le code
    - feuille "resultat_liste_filtre_xls" --> tu obtiendras la liste des fichiers .xls uniquement du répertoire défini (donc à adapter par toi même) dans le code
    - feuille "resultat_liste_parcourir" --> tu obtiendras la liste de TOUS les fichiers du répertoire choisi par l'utilisateur car le code fait apparaitre une fenêtre "parcourir"
    - feuille "resultat_liste_parcourir_filtre" --> tu obtiendras la liste des fichiers .xls uniquement du répertoire choisi par l'utilisateur car le code fait apparaitre une fenêtre "parcourir"

    et surtout
    - feuille "la_totale" --> tu obtiendras la liste des fichiers .xls uniquement du répertoire choisi par l'utilisateur car le code fait apparaitre une fenêtre "parcourir" et la feuille 1 de chacun de ces fichiers sera copiée dans le classeur contenant le code

    Bien sûr tu auras le résultat de ta demande initiale de ce fil en cliquant sur le bouton de la feuille "la_totale". Les autres codes sont pour te montrer comment lister les fichiers d'un répertoire et appliquer un filtre (du moins la méthode que j'utilise).

    Attention de bien fermer tout autre fichier Excel que celui contenant le code quand tu lanceras la macro "la_totale".

    Enfin on pourrait pour faire plus structuré envisager de créer des fonctions mais bon...

    Teste et dis nous.

    PS; le code ne scanne pas les sous-répertoires éventuels puisque ce n'est pas demandé
    PS2; le zip joins contient une arborescence test. Le fichier Excel contenant les macros se trouve dans le répertoire "macro"
    Fichiers attachés Fichiers attachés
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

  9. #9
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Tout fonctionne merci beaucoup !

  10. #10
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 569
    Points : 1 006
    Points
    1 006
    Par défaut
    Tant mieux.

    Je t'ai mis plusieurs méthodes pour lister les fichiers et une méthode complète qui copie la première feuille des xls.

    Tu as donc tout: la méthodologie générale et la réponse à ta demande.

    Amuse-toi bien.
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/02/2013, 10h47
  2. Réponses: 1
    Dernier message: 25/02/2009, 09h44
  3. [PERL] Problème Fusion de fichiers : TUnit
    Par nicolep dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 21/11/2008, 16h36
  4. [XSLT] Fusion de fichier XML ???
    Par webtheque dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/03/2005, 20h13
  5. [XSL] Problème d'incrémentation
    Par OXyGN dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 28/01/2005, 12h48

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