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