Macro VBA sélectionner plage entre deux dates

Bonjour à tous,

Je me permets de vous solliciter car je suis bloqué avec un code VBA ce qui me cause beaucoup d'arrachements de cheveux !

Je souhaite copier des lignes d'une base de données vers une autre.

La première base est filtrée en fonction de codes comptables, et j'aimerai créer un autre filtre permettant de sélectionner les lignes apparues entre une date (affichée dans une cellule sur le document devant recevoir ces nouvelles lignes) et aujourd'hui.

Est-ce possible ?

Par ailleurs, je ne parviens pas à faire de sorte que les lignes soit copiées automatiquement sur la première ligne vide de la base (à la suite de toutes les autres). Si quelqu'un a des idées je suis preneur !

Voici le code que j'ai créé pour le moment :

Sub copierversbase()

    Windows("EDI_EXTRACT_CDG_DIVERSIFICATION.xls").Activate
    ActiveSheet.Range("$A$1:$AB$2704").AutoFilter Field:=22, Criteria1:= _
        xlFilterYesterday, Operator:=xlFilterDynamic
    ActiveSheet.Range("$A$1:$AB$2704").AutoFilter Field:=14, Criteria1:= _
        "=PJECST6", Operator:=xlOr, Criteria2:="=PJEINTP"
    Sheets("EDI-EXTRACT-CDG-DIVERSIFICATION").Range("$A$2:$AB$2704").SpecialCells(xlVisible).Copy
    Windows("Base 2-macro.xlsm").Activate
    Sheets("Base").Select
    Dim LngLastRow As Long
    LngLastRow = Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

Mille mercis d'avance pour votre aide,

arochab

Bonjour,

Ta méthode copie effectivement les lignes visibles, mais elle les collera à leur rang... A toi de retrier tes données collées pour repousser les lignes vides en fin.

Bonjour

Ce serait bien de savoir dans quel fichier se trouve ce code.

Sinon sans voir le fichier, code à essayer

Sub copierversbase()
Dim LngLastRow As Long

LngLastRow = Workbook("Base 2-macro.xlsm").Sheets("Base").Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1

Workbook("EDI_EXTRACT_CDG_DIVERSIFICATION.xls").Activate

With Sheets("EDI-EXTRACT-CDG-DIVERSIFICATION").Range("$A$1:$AB$2704")
    .AutoFilter Field:=22, Criteria1:=xlFilterYesterday, Operator:=xlFilterDynamic
    .AutoFilter Field:=14, Criteria1:="=PJECST6", Operator:=xlOr, Criteria2:="=PJEINTP"
    .SpecialCells(xlVisible).Copy
End With

Workbook("Base 2-macro.xlsm").Sheets("Base").Range("A" & LngLastRow).PasteSpecial Paste:=xlPasteValues
End Sub

Les deux fichiers sont supposé être ouverts

Si ok, lors de votre réponse, merci de cloturer le fil en cochant la case à cocher verte à coté du bouton Editer.

Crdlt

Bonjour Mferrand, bonjour Dan,

Dan merci pour ton aide, mais ta macro ne fonctionne pas, elle affiche un problème de Sub ou de Function, je ne connais pas LngLastRow mais cela ne semble pas fonctionner. :s

Par ailleurs je ne vois pas de code me permettant de filtrer mes données entre une date antérieure (que j'aurai sur la cellule A10 de l'onglet check de la base 2-macro.xlsm) et aujourd'hui. C'est ce que je souhaite faire surtout.

Merci encore

re

elle affiche un problème de Sub ou de Fonction,je ne connais pas LngLastRow

??? LngLastrow --> c'est dans votre macro d'origine de votre premier post

Par ailleurs je ne vois pas de code me permettant de filtrer mes données

Je n'ai pas enlevé d'instruction. J'ai juste adapté. le filtrage était dans votre premier post et est resté dans celui proposé

Mettez un fichier en ligne ce sera plus simple

Cordialement

Hello Dan,

Merci pour ton retour !

Effectivement le Lng Last Row était déjà présent dans la macro, je m'en excuse !

Tu trouveras ci-joint les deux fichiers (des données confidentielles ont été supprimées).

1. L'idée est de faire deux fitlres sur le fichier appelé "EDI_EXTRACT_CDG_DIVERSIFICATION" sur

  • les codes (colonne N) PJEINTP et PJECST6
  • sur la date (colonne V) pour filtrer entre la date située sur la cellule A11 de l'onglet "Check" du fichier "Base (envoiforum)-macro" et la date du jour

2. Puis copier ces lignes filtrées vers l'onglet "Base" du fichier "Base (envoiforum)-macro" à la suite de toutes les autres.

La macro que j'ai essayé de faire développer est nommée 'Test19092016II" mais elle fonctionne vraiment mal...

Si jamais tu peux m'aider là dessus ce serait vraiment génial et je te devrais une fière chandelle ! Honnêtement c'est génial de voir la solidarité s'exercer.

arochab

re

Essaie avec ce code

Sub test()
Dim date1
Dim dlg As Long

date1 = Format(ThisWorkbook.Sheets("Check").Range("A11"), "mm/dd/yyyy")
dlg = ThisWorkbook.Sheets("base").Range("A" & ThisWorkbook.Sheets("base").Rows.Count).End(xlUp).Row + 1
With Workbooks("EDI_EXTRACT_CDG_DIVERSIFICATION.xls").Sheets("EDI-EXTRACT-CDG-DIVERSIFICATION")
    .Activate
    On Error Resume Next
    .ShowAllData
    On Error GoTo 0
    .Range("$A$1:$AB$" & .Range("A" & .Rows.Count).End(xlUp).Row).AutoFilter Field:=14, Criteria1:="=PJECST6", Operator:=xlOr, Criteria2:="=PJEINTP"
    .Range("$A$1:$AB$" & .Range("A" & .Rows.Count).End(xlUp).Row).AutoFilter Field:=22, Criteria1:=">=" & date1 ', Operator:=xlAnd, Criteria2:="<=" & Format(Now, "mm/dd/yyyy")
    .Range("$A$2:$AB$" & .Range("A" & .Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy
End With
ThisWorkbook.Sheets("Base").Range("A" & dlg).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub

Code à placer dans le fichier Base(envoi...)

Dans le filtre, je n'ai pas considéré la date d'aujourd'hui puisque le premier critère est d'être supérieur à la date en A11

Cordialement

Rechercher des sujets similaires à "macro vba selectionner plage entre deux dates"