Microsoft 365 Importer ligne si Critère respecté

eric72

XLDnaute Impliqué
Bonjour à tous,
J'ai un fichier avec en feuil1 une échéance Mois,Trimestriel et une feuil2 avec un tableau dans lequel j'aimerais qu'à la première ouverture du mois les lignes viennent s'ajouter selon le critère.
Si c'est mois cela s'ajoute automatiquement (mais une seule fois par mois)
Si c'est trimestriel cela s'ajoute automatiquement en janvier, avril juillet et octobre
Je n'ai pas trouvé la solution dans les différents forums, mais vous savez à coup sur comment résoudre mon nouveau problème...
Merci à tous pour votre dévouement.
Eric
 

Pièces jointes

  • test excel.xlsm
    21.9 KB · Affichages: 13

eric72

XLDnaute Impliqué
Bonjour
Merci pour votre réponse, l'importation se fera le premier jour du mois ou le fichier est ouvert mais ca ce n'est pas trop un problème, mon problème c'est le code pour récupérer les lignes selon les critères mois, trimestre.
Merci
 

Wayki

XLDnaute Occasionnel
Bonjour,
Comme ça ne répond pas à ma question, voici le code.
VB:
Private Sub test()

If Format(s, "mm") = Format(Now, "mm") - 1 Then
    Dim fs, f, s, adresse
    Set fs = CreateObject("Scripting.FileSystemObject")
    adresse = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
    Set f = fs.GetFile("" & adresse & "")
    s = f.datecreated
    

        For Each cellule In Sheets("feuil1").Range("L2:L5")
        L = Sheets("feuil2").Range("L" & Rows.Count).End(xlUp).Row
            If cellule = "Mensuel" Then cellule.EntireRow.Copy Sheets("feuil2").Range("A" & L)
        Next cellule
        
End If

If Format(Now, "mm") = 1 Or Format(Now, "mm") = 4 Or Format(Now, "mm") = 7 Or Format(Now, "mm") = 10 Then
    Dim fs, f, s, adresse
    Set fs = CreateObject("Scripting.FileSystemObject")
    adresse = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
    Set f = fs.GetFile("" & adresse & "")
    s = f.datecreated
    

        For Each cellule In Sheets("feuil1").Range("L2:L5")
        L = Sheets("feuil2").Range("L" & Rows.Count).End(xlUp).Row
            If cellule = "trimestriel" Then cellule.EntireRow.Copy Sheets("feuil2").Range("A" & L)
        Next cellule
        
End If

    
End Sub
Associez cette macro à un bouton et elle copiera les lignes mensuelles si le mois en cours est le mois m+1 par rapport à la date de création du fichier.
Elle copiera les lignes trimestrielles si le mois en cours = 1,4,7 ou 10.
A +
 

Wayki

XLDnaute Occasionnel
Pardon erreur de copier coller :
Code:
Sub test()


    Dim fs, f, s, adresse
    Set fs = CreateObject("Scripting.FileSystemObject")
    adresse = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
    Set f = fs.GetFile("" & adresse & "")
    s = f.datecreated
If Format(s, "mm") = Format(Now, "mm") - 1 Then

        For Each cellule In Sheets("feuil1").Range("L2:L5")
        L = Sheets("feuil2").Range("L" & Rows.Count).End(xlUp).Row
            If cellule = "Mensuel" Then cellule.EntireRow.Copy Sheets("feuil2").Range("A" & L + 1)
        Next cellule
       
End If

If Format(Now, "mm") = 1 Or Format(Now, "mm") = 4 Or Format(Now, "mm") = 7 Or Format(Now, "mm") = 10 Then
   
        For Each cellule In Sheets("feuil1").Range("L2:L5")
        L = Sheets("feuil2").Range("L" & Rows.Count).End(xlUp).Row
            If cellule = "trimestriel" Then cellule.EntireRow.Copy Sheets("feuil2").Range("A" & L + 1)
        Next cellule
       
End If

   
End Sub
ça sert à rien de faire référence au tableau, l'ajout d'une ligne en dessous de celui ci l'étend tout seul.
La macro reste à adapter à vos besoin.
A +
 

Wayki

XLDnaute Occasionnel
Essayez ce code en désactivant les conditions :
VB:
Sub test()


    Dim fs, f, s, adresse
    Set fs = CreateObject("Scripting.FileSystemObject")
    adresse = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
    Set f = fs.GetFile("" & adresse & "")
    s = f.datecreated
If Format(s, "mm") = Format(Now, "mm") - 1 Then

        For Each cellule In Sheets("feuil1").Range("L2:L5")
        L = Sheets("feuil2").Range("L" & Rows.Count).End(xlUp).Row
            If cellule = "Mensuel" Then Range(Cells(cellule.Row, 1), Cells(cellule.Row, 11)).Copy Sheets("feuil2").Range("A" & L + 1)
        Next cellule
        
End If

If Format(Now, "mm") = 1 Or Format(Now, "mm") = 4 Or Format(Now, "mm") = 7 Or Format(Now, "mm") = 10 Then
    
        For Each cellule In Sheets("feuil1").Range("L2:L5")
        L = Sheets("feuil2").Range("L" & Rows.Count).End(xlUp).Row
            If cellule = "trimestriel" Then Range(Cells(cellule.Row, 1), Cells(cellule.Row, 11)).Copy Sheets("feuil2").Range("A" & L + 1)
        Next cellule
        
End If

End Sub
A +
 

eric72

XLDnaute Impliqué
C'est beaucoup mieux mais ça prend uniquement la ligne
Prêt cccc tata 3,00 € 1643 NON Prélèvement 31/12/27 10 3,00 €
pas la 1ère:
Assurances aaaa toto 1,00 € 6161 NON Prélèvement 31 1,00 €
alors que les 2 sont mensuel...
Mais ça avance.
Merci
 

eric72

XLDnaute Impliqué
Bonsoir à tous,
je me permets de relancer le sujet, j'aimerais que, à la première ouverture du mois (peu importe la date) lorsque dans le tableau de la feuille2 il y a "Mensuel" dans la colonne "Echéance", la ligne vienne directement alimenter le tableau de la feuille1, puis mettre la date du jour dans la colonne "Date du Jour" de la feuille1 et cela une seule fois dans le mois, est-ce possible?

Wayki m'a gentiment proposé une solution mais cela ne fonctionne pas!!!
Merci à tous
Eric
 

Pièces jointes

  • test excel.xlsm
    28.5 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
bosoir
@Wayki
ça sert à rien de faire référence au tableau, l'ajout d'une ligne en dessous de celui ci l'étend tout seul.
La macro reste à adapter à vos besoin.
1°ça c'est pas vrai pour toute les versions d'excel
2° l’utilisation de scripting filesytem object (lastaccesed ou datecreated ) c'est une erreur le fichier peut avoir été modifié sur autre chose
3° au contraire faire reference au tableau te simplifiera la tache

@eric72 nomme une plage ou même qu'une cellule quelque part ou sert toi d'un name tout simplement
mémorise y une date a l’intérieur par exemple le 01/10/2021
a l'ouverture si month(date)= month cdate(lename)+1 then et tu transferts tout les mensuel
et enfin tu change la date dans le name et tu y met celle de date

pour les trimestriel ben tu fait pareil avec un autre name sauf que c est mont(date)-3
ou tu peux test les mois en semi dur et là tu choisi ce que tu veux

pas tres compliqué a mettre en place
et c'est moins hasardeux qu'avec scripting
 

eric72

XLDnaute Impliqué
Bonsoir Patrick,
Je comprends bien mais je ne vois pas comment écrire le code d'autant plus que la copie de la ligne doit être copiée et collée dans la colonne B Avec la date du jour en colonne A, je bloque!!!
Et oui je suis perdu sans toi, lol!!!