VBA Copier Lignes sous conditions d'un fichier vers un autre

Bonjour,

Je me permets de solliciter votre aide sur ce forum car je suis bloqué. Tous les jours je reçois un fichier excel dans un répertoire sous le format ABCyyyymmdd correspondant à la date du jour. Je souhaiterais copier dans ce fichier certaines lignes sous conditions et les coller dans un autre fichier les unes à la suite des autres, puis envoyer ces données via messagerie Outlook tous les soirs. Je souhaite répéter la manipulation tous les jours et supprimer les données de la veille. Concernant l'envoi du mail j'ai un code qui fonctionne bien mais je bloque vraiment sur la récupération des données de manière automatique. Par exemple, dans les fichiers joints, je souhaite récupérer les données de toute la ligne si le portefeuille est égal à "A", les copier et les coller dans le fichier Envoi données. Je souhaite pouvoir répéter cette manipulation en écrasant les données de la veille et sachant que le nom de mon fichier source sera différent.

4abcyyyymmdd.xlsx (9.01 Ko)

Merci à tous

Bonjour,

A tester :

Bonjour Eric, bonjour le forum,

Merci de votre réponse et du travail passé. J'ai un problème dans votre code au moment de la recherche du dernier, la message box "Aucun fichier d jour dans le répertoire !" apparaît. J'ai bien modifié le chemin du fichier mais rien y fait. J'ai essayé de me créer un dossier nommé "Test" sur mon bureau, dans lequel j'ai crée des fichiers ABC20220419, ABC20220420 et ABC20220421, j'ai inscrit le chemin de ce dossier "Test" dans la cellule C6 mais j'ai toujours la message box. Une idée d'où peut venir le problème ? Merci

Bonjour,

Vous pourriez faire une capture d'écran des fichiers dans le répertoire ?

Bonjour Eric,

Merci de votre retour. Ci-dessous, le dossier dans lequel se trouvent mes fichiers

image

Avec un emplacement sous la forme : C:\Users\NOMPRENOM\Desktop\Test

Les fichiers n'ont pas d'extension .xlsx ?

Si, ce sont bien des feuilles de calcul excel xlsx

J'ai mis un Debug.print dans la fonction

Function FichierDuJour(ByVal CheminFichier As String) As Boolean

Dim Fso As Object

    Set Fso = CreateObject("Scripting.FileSystemObject")
    FichierDuJour = Fso.FileExists(CheminFichier)
    Debug.Print CheminFichier
    Set Fso = Nothing

End Function

Que donne le Debug.print dans la fenêtre exécution (Ctrl-G) dans l'éditeur VBA ?

Re Eric,

Merci beaucoup cela fonctionne ! Je vais essayer d'adapter ce code à mon code déjà existant, je me permets de revenir vers vous rapidement si jamais j'ai encore un petit souci. Vous m'avez bien aidé !

Qu'est ce qu'il y avait ?

Une macro envoi de mail et d'autres critères de sélection, je clos le sujet si c'est tout bon demain ! Merci

Bonjour Eric, bonjour le forum.

Merci encore pour votre aide. Pouvez-vous m'aider encore sur deux points ;

- J'ai un problème avec cette ligne de code : "Set TabPortefeuille = Sheets("Feuil1").ListObjects("t_Portefeuille")". Les valeur sont copiées sous la forme d'un tableau, avec des filtres et des couleurs différentes entre les lignes. Est-il possible de copier uniquement en valeur les données souhaitées ?

- Egalement, mes informations étaient partiellement complètes, je pensais pouvoir me débrouiller en utilisant la fonction UBound mais je n'y arrive pas. Dans mon fichier abcyyyymmdd j'ai rajouté deux colonnes, devise et durée, je souhaiterais pouvoir copier uniquement certaines colonnes toujours en fonction de mon critère portefeuille. Dans mon exemple, je souhaite copier les valeurs contenues dans les colonnes "Montant", "Taux", "Durée" en fonction de la valeur de mon portefeuille ("A" dans l'exemple). J'ai mis à jour le résultat attendu dans le fichier "envoi-données".

Merci à vous pour votre aide !

3abcyyyymmdd.xlsx (9.16 Ko)

Bonjour,

Il faut ajouter une colonne dans le tableau structuré.

Sub ImporterDonnees()

Dim I As Integer, DerniereLigne As Integer
Dim TabPortefeuille As ListObject
Dim LignePortefeuille As ListRow
Dim Chemin As String, Fichier As String
Dim WbSource As Workbook
Dim ShSource As Worksheet

    Application.ScreenUpdating = False

    Fichier = "ABC" & GroupeDate(Date) & ".xlsx"
    Chemin = Range("RepertoireFichier") & "\" & Fichier ' A adapter

    If FichierDuJour(Chemin) = False Then
       MsgBox "Aucun fichier du jour dans le répertoire !", vbCritical
       Exit Sub
    End If

    Set TabPortefeuille = Sheets("Feuil1").ListObjects("t_Portefeuille")
    With TabPortefeuille
         If .ListRows.Count > 0 Then
            .DataBodyRange.Delete
         End If
    End With
    Set WbSource = Workbooks.Open(Chemin)
    Set ShSource = WbSource.Sheets(1)
    With ShSource
         DerniereLigne = .Cells(.Rows.Count, 3).End(xlUp).Row
         For I = 2 To DerniereLigne
             If .Cells(I, 3) = "A" Then
                Set LignePortefeuille = TabPortefeuille.ListRows.Add
                .Range(.Cells(I, 1), .Cells(I, 3)).Copy Destination:=LignePortefeuille.Range(1, 1)
                LignePortefeuille.Range(1, 1) = .Cells(I, 1)
                LignePortefeuille.Range(1, 2) = .Cells(I, 2)
                LignePortefeuille.Range(1, 3) = .Cells(I, 5)
                LignePortefeuille.Range(1, 4) = .Cells(I, 3)
                LignePortefeuille.Range.Interior.ColorIndex = xlNone

                Set LignePortefeuille = Nothing
             End If
         Next I
    End With

    WbSource.Close savechanges:=False

    Range("DernierFichier") = Fichier

    Application.ScreenUpdating = True

    MsgBox "Fin de l'import !", vbInformation

    Set ShSource = Nothing
    Set WbSource = Nothing
    Set TabPortefeuille = Nothing

End Sub

Bonjour Eric, bonjour le forum,

Merci de votre retour rapide Eric. Après avoir regardé vos modifications, la ligne de code suivante "LignePortefeuille.Range.Interior.ColorIndex = xlNone" ne semble pas vouloir copier uniquement en valeur, confère la capture d'écran suivante après le lancement de la macro ;

image

Je me demande pourquoi vous passez par un tableau structuré avec des filtres ? Mes intitulés de colonnes dans mon fichier destination sont toujours les mêmes, ce qui m'intéresse ce sont les valeurs contenues dans le tableau. Y a t-il une solution pour contourner ce problème ?

Bien à vous

Merci

Bonjour Eric, bonjour le forum

Avez-vous pu étudier la question de ne pas passer par un tableau structuré Eric ? Merci et bon week end !

Bonjour,

Avez-vous les résultats escomptés ? Sinon, quel est le problème ?

Bonjour Eric, bonjour le forum,

Oui les résultats sont là ! C'est précisément ce que je voulais extraire. Je les envoie après par mail après et j'aurais souhaité les envoyer sans mise en forme dans un tableau "brut" en ne copiant uniquement les valeurs et non sous la forme d'un tableau structuré avec filtre et mise en forme. Est-il possible de faire ça ? Merci de votre retour et bonne journée

Bonjour Eric, bonjour le forum,

Est-il possible donc dans le code de modifier la copie des données en ne passant pas par un tableau structuré mais simplement avec un ActiveSheet.Paste ou autre chose ? Merci à vous

Bonjour,

Cela m'obligerait à refaire le code.

Bonjour Eric, bonjour le forum,

Merci de votre retour. Effectivement j'aurais peut être du être plus précis dans la formulation de ma requête et bien spécifier que je voulais un copier/coller en valeurs...

Avec mes connaissances basiques en vba pouvez-vous me donner quelques pistes pour arriver à faire cela ? Je suis vraiment désireux d'aller au bout de ce travail étant donné que vous aviez répondu à 99% de mon problème. Merci et bonne journée !

Rechercher des sujets similaires à "vba copier lignes conditions fichier"