Petite modif sur Macro existante

Salut,

Il y a quelques années maintenant, une âme charitable de ce forum m'avait fait cette petite macro, qui vient récupérer quelques données dans tous les fichiers excel du dossier (et sous-dossiers) qui se termine par "DS-516" pour les coller dans l'odre dans un tableau.

La Macro:

Dim nr

Sub recap_valeurs()
    nr = 1
    browsefolder ("W:\INSTRUCTION\EB - Instructions de controle réception\EB_Relevé de contrôle\Relevés de Contrôle Signés (originaux)\DS - Insert\- Suivi\DS-5xx_Inserts OMNIDENT")
MsgBox "importation OK"
End Sub
Sub browsefolder(Optional chemin = "")
    Set cws = ThisWorkbook.ActiveSheet
    If chemin = "" Then chemin = ThisWorkbook.Path
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set folder = FSO.GetFolder(chemin)
    For Each fich In folder.Files
          If InStr(UCase(fich), "DS-516.XLS") Then
          nr = nr + 1
        cws.Cells(nr, 1) = fich 'inscrit le nom de fichier en ligne 2/colonne 1
        cws.Cells(nr, 2) = FSO.GetFile(fich).DateCreated 'inscrit la date de création du fichier en ligne 2/colonne 2

            Set nwb = Workbooks.Open(fich, ReadOnly:=True)
            'prend la valeur se situant à 8 cellules de la cellule contenant le mot "Moyenne"
            Set re = nwb.Worksheets(1).Cells.Find("Moyenne", lookat:=xlWhole)
            If Not re Is Nothing Then cws.Cells(nr, 3) = re.Offset(0, 8)
            'prend la valeur se situant à 10 cellules de la cellule contenant le mot "Moyenne"
            Set re3 = nwb.Worksheets(1).Cells.Find("Moyenne", lookat:=xlWhole)
            If Not re3 Is Nothing Then cws.Cells(nr, 4) = re3.Offset(0, 10)
            'prend la valeur se situant à 11 cellules de la cellule contenant le mot "Moyenne"
            Set re3 = nwb.Worksheets(1).Cells.Find("Moyenne", lookat:=xlWhole)
            If Not re3 Is Nothing Then cws.Cells(nr, 5) = re3.Offset(0, 11)
            nwb.Close
        End If
    Next
    For Each Rep In folder.SubFolders
        browsefolder Rep
    Next
End Sub

Le tableau récap:

1586522134-ds-516-macro

Le truc, c'est qu'aujourd'hui j'ai une certaine quantité de fichiers excel…. et la macro repart du début à chaque fois, donc ca devient assez long.

Je me demandais donc s'il y avait pas un moyen pour faire en sorte que ca reprenne les données uniquement des fichiers excel qui ne sont pas déjà importés, pour les incrémentés dans les lignes suivantes.

Ou, si pas possible, je sais pas, peut-être pouvoir saisir quelque part une date de départ ?

Merci d'avance.

Bonjour,

Peut-être en rajoutant une condition :

....
If InStr(UCase(fich), "DS-516.XLS") And IsError(Application.Match(fich, cws.Columns(1), 0)) Then
....

Application.Match est l'équivalent "Formule" de "EQUIV"

Peut-être?

PS, je ne comprends pas pourquoi tu fais 3 recherches de "MOYENNE"...

....
            Set re = nwb.Worksheets(1).Cells.Find("Moyenne", lookat:=xlWhole)
            If Not re Is Nothing Then
                cws.Cells(nr, 3) = re.Offset(0, 8)
                cws.Cells(nr, 4) = re.Offset(0, 10)
                cws.Cells(nr, 5) = re.Offset(0, 11)
            End If
            ....

Suffirait peut-être?

Merci pour cette proposition.

Alors pour le rajout de la condition, ca prend maintenant en effet simplement en compte les nouveaux fichiers dans le dossier, par contre ca semble remplacer les fichiers existants dans les lignes, ca ne les ajoute pas à la suite:

DS-516-macro2

le fichier "BC-20-3532-02" aurait dû s'incrémenter après le "BC-18-3532-01".

Pour les 3 recherches de moyenne en effet ca semble assez logique, mais étant incapable de programmer le VBA j'ai pris ce qu'on m'a donné

J'ai essayé et ca marche pareil oui, merci

Bonjour,

Remplace la ligne nr = nr +1 par cette ligne, pour calculer la première ligne vide :

nr = cws.Cells(Rows.Count, "A").End(xlUp).Row + 1 'calcul de la première ligne vide

Peut-être?

Mais on dirait que c'est parfait tout ca !

Ca fonctionne bien, je vais gagner un peu de temps, un grand merci à toi !

Rechercher des sujets similaires à "petite modif macro existante"