Duplication de feuilles selon onglet precedent
Bonjour à tous,
j'ai un petit souci sur mon fichier.
Je dois dupliquer en fin de mois la feuille pour commencer un autre mois avec les éléments du mois ( ex: dans le fichier 092018 doit être dupliquer en 102018)
J'ai réussi mais ce n'est pas dynamique puisque je nomme la feuille de départ qui est "092018" dans la macro.
pour dupliquer 102018 en 112018, ça ne marche pas.
De plus, les lignes du tableau peuvent varier selon le mois. donc les totaux du tableau ne seront plus sur la même ligne.
ci joint, le fichier d'exemple.
Merci d'avance à vous.
Ety
Bonjour,
Pour le nom automatique de la feuille, tu peux faire un truc du genre :
Sub Test()
Dim Annee As Integer
Dim Mois As Integer
Annee = Right(Sheets(Sheets.Count).Name, 4)
Mois = Left(Sheets(Sheets.Count).Name, 2) + 1
Sheets(Sheets.Count).Copy , Sheets(Sheets.Count)
ActiveSheet.Name = Mois & Annee
End SubMaintenant, pour le reste :
De plus, les lignes du tableau peuvent varier selon le mois. donc les totaux du tableau ne seront plus sur la même ligne.
Il faut un peu plus d'explications !
merci Theze pour cette solution qui marche comme je le souhaitais.
quand je duplique le mois suivant, je recopie la colonne O du mois précédent dans la colonne B du mois suivant
(ex : la colonne O de l'onglet 092018 est copié dans l'onglet 102018 colonne B)
Donc la duplication de 102018 pour l'onglet 112018, il recopie les données de 092018.
Pour la variation des lignes, aujourd'hui dans l'exemple, mes totaux sont en lignes 175 dans l'onglet 092018.
il se peut que je rajoute des lignes selon les mois dans la colonnes A pour l'onglet 102018. Donc, mes lignes varient et quand je supprime dans la macro ça ne correspond plus.
" Range("A6:N172").Select
Selection.ClearContents "
j’espère avoir été clair.
merci d'avance
ety
Avec le code ci-dessous (que j'ai un peu modifié par rapport au 1er) les valeurs situées en colonne O du mois précédent sont inscrites en colonne B du nouveau mois par contre, je ne sais pas ce qu'il faut faire des valeurs situées dans le nouveau mois pour les colonnes C à N ? Pour définir la plage contenant les valeurs à récupérer en colonne O et mettre en colonne B, il est impératif qu'une cellule soit vide entre la dernière cellule de solde et celle du total ! Testes pour voir et reviens :
Sub Macro1()
'utilisation de deux variables objet Worksheet pour plus de clarté et surtout pour éviter toute erreur
Dim Fe As Worksheet
Dim Fe_1 As Worksheet
Dim Plage As Range
Dim Annee As Integer
Dim Mois As Integer
Set Fe_1 = Sheets(Sheets.Count)
Annee = Right(Fe_1.Name, 4)
Mois = Left(Fe_1.Name, 2) + 1
Fe_1.Copy , Fe_1
Set Fe = ActiveSheet
Fe.Name = Mois & Annee
'défini la plage où doivent être recupérées les valeurs en évitant de prendre
'en compte la cellule du total (d'où le double "End(xlUp)")
'pour ça, il est impératif qu'au moins une cellule vide sépare la cellule du total de celle du dernier solde
With Fe_1: Set Plage = .Range(.Cells(6, 15), .Cells(Rows.Count, 15).End(xlUp).End(xlUp)): End With
'inscription des valeur en colonne B
With Fe: .Range(.Cells(6, 2), .Cells(Plage.Count + 5, 2)).Value = Plage.Value: End With
End Subbonjour Theze et merci pour le temps que tu consacres.
Super ça marche c'est ce qu'il me fallait. Ce sera parfait avec le point en suspens :
"par contre, je ne sais pas ce qu'il faut faire des valeurs situées dans le nouveau mois pour les colonnes C à N ?"
il faut supprimer les données de la colonne C à N du nouveau mois.
merci beaucoup.
ety
Bonjour,
Voici avec suppression des valeurs et commentaires :
Sub Macro1()
'utilisation de deux variables objet Worksheet pour plus de clarté et surtout pour éviter toute erreur
Dim Fe As Worksheet
Dim Fe_1 As Worksheet
Dim Plage As Range
Dim Annee As Integer
Dim Mois As Integer
Set Fe_1 = Sheets(Sheets.Count)
Annee = Right(Fe_1.Name, 4)
Mois = Left(Fe_1.Name, 2) + 1
Fe_1.Copy , Fe_1
Set Fe = ActiveSheet
Fe.Name = Mois & Annee
'défini la plage où doivent être recupérées les valeurs en évitant de prendre
'en compte la cellule du total (d'où le double "End(xlUp)")
'pour ça, il est impératif qu'au moins une cellule vide sépare la cellule du total de celle du dernier solde
With Fe_1: Set Plage = .Range(.Cells(6, 15), .Cells(Rows.Count, 15).End(xlUp).End(xlUp)): End With
With Fe
'inscription des valeur en colonne B
.Range(.Cells(6, 2), .Cells(Plage.Count + 5, 2)).Value = Plage.Value
'suppression des valeurs
.Range(.Cells(6, 3), .Cells(Plage.Count + 5, 14)).ClearContents
'suppressions des commentaires
.Range(.Cells(6, 3), .Cells(Plage.Count + 5, 14)).ClearComments
End With
End Sub