XL 2010 Comparer les noms de fichiers dans un dossier avec ceux dans une feuille excel

Offoloren

XLDnaute Nouveau
Bonjour à tous,

je cherche à comparer les noms de fichiers excel se trouvant dans un dossier avec des noms récupérés dans un fichier :roll:
Dis comme ça, pas sur d'être compris.
Mon code vba actuel :

Code:
Sub RequeteClasseurFerme()
    Dim Cn As ADODB.Connection
    Dim Dossier As String, Fichier As String, texte_SQL As String
    Dim Rst As ADODB.Recordset
    Dim wb As Workbook
   
    'Définit le classeur fermé servant de base de données
    Dossier = "Y:\Mes documents\00 - bureau\semaine\"
    Fichier = Dir(Dossier & "*.xlsx")
   
    Set Cn = New ADODB.Connection
    Set wb = ThisWorkbook

    '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Dossier & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
            .Open
        End With
    '-----------------
   
        Do While Len(Fichier) > 0

        'je récupère le nom du fichier
                wb.Sheets(1).Range("C60000").End(xlUp).Offset(1, -2).Value = Fichier
                       
        'On sélectionne l'ensemble du tableau EXPORT_NORMAL
                texte_SQL = "SELECT * FROM EXPORT_NORMAL"
   
                Set Rst = New ADODB.Recordset
                Set Rst = Cn.Execute(texte_SQL)
   
        'Ecrit le résultat
                wb.Sheets(1).Range("B60000").End(xlUp).Offset(0, 0).CopyFromRecordset Rst
   
                Fichier = Dir

        Loop
       
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
       
        MsgBox "C'est terminé !"
End Sub

Donc, je vais récupérer un tableau dans chaque fichier excel qui se trouve dans le dossier Y:\Mes documents\00 - bureau\semaine\
Par la même occasion, je récupère le nom du fichier et je colle tout ça sur ma Feuil1.

Dans ce dossier, il y a régulièrement de nouveaux fichiers excel qui apparaissent.

Ma question : comment faire pour récupérer les données des nouveaux fichiers ?
Je pensais comparer les noms (vu que je les récupère) mais je ne m'en sors absolument pas
Dans ma tête, c'est tout simple mais quand je veux le coder, je tourne en rond sans vraiment réussir.

Quelqu'un pourrait-il me dépanner SVP ?
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Offoloren

Si les données ne sont pas copiées à la suite, tu n'as rien à faire vu que tu as Do While Len(Fichier) > 0, qui traduit donne: tant que le dossier contient des fichiers alors copie les données de la feuille X. Et le nom du nouveau fichier viendra s'ajouter à la liste existante.

Si c'est le contraire, il faut tout éffacer dans la feuille destination, sinon tu vas te retrouver avec un tas de doublons. Un Exemple

With Sheets("Destination")
x = .Range("a" & Rows.Count).End(xlup).Row
Set plage = .Range("a2:s" & x)
End with
plage.ClearContents

Ensuite la boucle de copie
 
Dernière édition:

Offoloren

XLDnaute Nouveau
Je savais bien que ce que je voulais faire était tout bête mais la semaine dernière, pas moyen de m'en sortir.
Je n'ai absolument pas utilisé ce que tu m'as dit mais c'est toi qui m'a mis sur la piste :) Donc merci beaucoup pour l'aide involontaire :mrgreen:

Code:
Sub RequeteClasseurFerme()
    Dim Cn As ADODB.Connection
    Dim Dossier As String, Fichier As String, texte_SQL As String
    Dim Rst As ADODB.Recordset
    Dim wb As Workbook
    Dim i As Integer
   
    Application.ScreenUpdating = False
   
    'Définit le classeur fermé servant de base de données
    Dossier = "Y:\Mes documents\00 - bureau\semaine\"
    Fichier = Dir(Dossier & "*.xlsx")
   
    Set Cn = New ADODB.Connection
    Set wb = ThisWorkbook

        '___init var i à 2 pour avoir cellule A2 sheet 2 en 1er.
        i = 2
   
    '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Dossier & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
            .Open
        End With
    '-----------------
   
        Do While Len(Fichier) > 0
               
                FichierExtrac = Sheets(2).Range("A" & i).Value
               
                '____on compare les noms de fichier. Si déjà existant, on saute la copie pour refaire une boucle avec le fichier suivant
                If Fichier = FichierExtrac Then GoTo suite
               
                '____si les 2 ne sont pas égaux, on récupère les données du tableau et on copie le nom du fichier en sheet 2 pour future comparaison
               
                wb.Sheets(1).Range("C60000").End(xlUp).Offset(1, -2).Value = Fichier
                wb.Sheets(2).Range("A60000").End(xlUp).Offset(1, 0).Value = Fichier
       
        'On sélectionne l'ensemble du tableau EXPORT_NORMAL
                texte_SQL = "SELECT * FROM EXPORT_NORMAL"
   
                Set Rst = New ADODB.Recordset
                Set Rst = Cn.Execute(texte_SQL)
   
        'Ecrit le résultat
                wb.Sheets(1).Range("B60000").End(xlUp).Offset(0, 0).CopyFromRecordset Rst

        '____Comparaison noms fichiers. Si les 2 noms sont =, on saute ici pour passer au fichier suivant et on incrémente la var i
suite:
                Fichier = Dir
                i = i + 1
               
        Loop
       
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
       
        Application.ScreenUpdating = True
       
        MsgBox "C'est terminé !"
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 088
Messages
2 085 201
Membres
102 816
dernier inscrit
bolivier