Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Selection - copie d'une plage en fonction de la date

Bulr6

XLDnaute Nouveau
Bonjour à tous,
Mon problème va surement vous sembler enfantin mais voila que je pêche dessus depuis ce WE.
Débutant sous VB, j'essaie de me former au fur et à mesure ... sauf que les impératifs professionnels impose un rythme plus rapide que celui de ma compréhension parfois lol ... bref j'avance via la méthode empirique je recherche je tests je bricole etc etc
En l'occurence, sur une feuille de plusieurs colonne dans la première j'ai la date d'une opération dd/mm/yyyy hh:ss
Ce que je cherche à faire c'est qu'à une date régulière (en l'occurrence le premier lundi du mois - ça peut être modifier) c'est sélectionner dans ma feuille toutes les lignes dont la date (en A) correspondrait au moirs précédent (toutes les lignes du mois de février si nous sommes en mars) et de les copier dans un nouveau classeur avec la date du mois et de l'année. Après diverses recherche voici ce que j'ai bricolé et mon problème se trouve au niveau de la copie :

Sub Test()
Dim newWbk As Workbook, feuilCal As Worksheet, pathMesDocuments As String, nomNewClasseur As String
Application.ScreenUpdating = False
'définir le chemin de MesDocuments
pathMesDocuments = "Z:\Yann"

'définir la feuille à copier
Set feuilCal = ThisWorkbook.Sheets("Prets")

'créer un nouveau classeur avec une seulle feuille
Set newWbk = Application.Workbooks.Add(xlWBATWorksheet)

For n = Range("A65536").End(xlUp).Row To 3 Step -1
If feuilCal.Range("A" & n) = CDate(Month(Now) - 1) Then
Cells(n).Copy
End If
Next n

' la commande de base de ce code était de copier toutes les cellules
'feuilCal.Cells.Copy


'coller les valeurs dans le nouveau classeur, puis les formats, puis les largeurs de colonnes
newWbk.Sheets(1).Range("A1").PasteSpecial xlPasteValues
newWbk.Sheets(1).Range("A1").PasteSpecial xlPasteFormats
newWbk.Sheets(1).Range("A1").PasteSpecial xlPasteColumnWidths
Application.CutCopyMode = False

'récupérer le nom à donner au nouveau classeur
1 nomNewClasseur = Format(Date, "mmm yyyy")
'InputBox ("Nom du nouveau classeur :")
'If nomNewClasseur <> "" Then
'sauvegarder le classeur et le fermer
On Error Resume Next
newWbk.SaveAs pathMesDocuments & "\" & nomNewClasseur & ".xls"
If Err Then GoTo 1 's'il y a des caractères interdits
'End If
newWbk.Close
Application.ScreenUpdating = True
End Sub

Je remercie par avance tous ceux qui pourrait m'aider à solutionner mon problème
 

Bulr6

XLDnaute Nouveau
J'ai réussi à résoudre mon problème ... à force de bricolage ... donc j'arrive à copier dans un autre classeur (dont le nom est celui du mois précédent en l'occurrence février 2017) une plage de données comprise durant cette période ... je dois encore ajouter un morceaux de code pour supprimer ces lignes et pour programmer l'action en debut de mois en cours ... et surtout rendre plus propre le module ;-) ... mais si ça peut aider

Sub save_lastmonth()

Dim newWbk As Workbook, feuilCal As Worksheet, pathMesDocuments As String, nomNewClasseur As String
Dim Cellule As Range
Dim BorneInferieure As Date, BorneSuperieure As Date
Dim Classeur As Workbook
Dim CelluleCible As Range
Dim CelluleCibleA1 As Range
Dim Feuille As Worksheet

Application.ScreenUpdating = False

BorneInferieure = CDate("1/" & Format(DateAdd("m", -1, Date), "mm/yyyy"))
BorneSuperieure = Format(CDate("1/" & Format(Date, "mm/yyyy")), "yyyy\-mm\-dd 00:00:00")
'définir le chemin de MesDocuments
pathMesDocuments = "Z:\****"

'définir la feuille à copier
Set Feuille = ThisWorkbook.Sheets("Prets")

'créer un nouveau classeur avec une seulle feuille
Set newWbk = Application.Workbooks.Add(xlWBATWorksheet)
Set CelluleCible = newWbk.Sheets(1).Range("A2")
Set CelluleCibleA1 = newWbk.Sheets(1).Range("A1")
Feuille.Rows(2).Copy
CelluleCibleA1.PasteSpecial xlPasteValues
CelluleCibleA1.PasteSpecial xlPasteFormats
CelluleCibleA1.PasteSpecial xlPasteColumnWidths
Feuille.Activate
For Each Cellule In Feuil1.Range("a2:a" & Feuil1.Cells(Feuil1.Rows.Count, 1).End(xlUp).Row)
If Cellule.Value > BorneInferieure And Cellule.Value < BorneSuperieure Then
Cellule.EntireRow.Copy Destination:=CelluleCible
Set CelluleCible = CelluleCible(2)
End If
Next Cellule
Application.CutCopyMode = False

'récupérer le nom à donner au nouveau classeur
1 nomNewClasseur = Format(DateSerial(Year(Date), Month(Date) - 1, 1), "mmmm yyyy")
'sauvegarder le classeur et le fermer
On Error Resume Next
newWbk.SaveAs pathMesDocuments & "\" & nomNewClasseur & ".xlsx"
If Err Then GoTo 1 's'il y a des caractères interdits
'End If
newWbk.Close

Application.ScreenUpdating = True

End Sub
 

Discussions similaires

Réponses
7
Affichages
591
Réponses
8
Affichages
402
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…