Re : Copie de cellules en fonction de la date
Bonjour,
J'ai tenter de creer une macro
But : creer un planning a trois ligne :
la 1ere comportant le previsionnel (ce que le cadre prevoit un ou deux mois a l'avance) ;
la 2nd comportant le reel (ce qui est fait ar la personne) ;
La 3eme contenant les heures sup ou evenement non "indentifies).
Idée :
Quand on ouvre le classeur (on est le jour = J0)
Pour toutes les dates avant et J0 (c'est à dire J-1 ; J-2 ; ...) : La ligne previsionnelle et la ligne reel sont renseignées. Generalement, le reel se "claque" sur le previsionnel mais sil y a modification d'horraire ou de lieux le cadre modifie se qui est affiché sur la ligne réelle ;
Pour toutes les dates apres J0 : Vu qu'il n'y a pas de réel, le previsionnel, qui lui existe (travail du cadre) se retrouve automatiquement copié sur la ligne "réelle".
Avantage :
Quand on regarde les jours déja travaillés on peut voir si il y a eu une difference entre le "previsionnel" et le "réel", d'une part ;
D'autre part, vu que le previsionnel est recopié sur la ligne réel, le cadre a peu de travail de resaissi car il est bien rare que que tout le monde fait, tous les jours des heures sup. Cela doit arriver "occasionnellement" autrement c'est que le cadre fait mal sont travail.
Gorfeal m'a proposé une solution mais cela ne fonctionne pas. quelqu'un aurait-il une autre idée.
Le code que j'ai mis est accessible dans la femetre VB du fichier (c'est le meme pour chaqu'une des 12 feuilles).
En voici une copie :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Col_Deb As Integer
Dim Lig As Long
'Si ce n'est pas la feuille du mois courant, on sort
If Not (IsDate(Range("F2"))) Then Exit Sub
If Month(Range("D7")) <> Month(Date) Then Exit Sub
'si on a déjà copié aujourd'hui, on sort
If Int(Range("F2")) = Int(Range("F3")) Then Exit Sub
'Recheche de la colonne de début
For Col_Deb = 4 To 64
'dés que la date de la colonne est supérieur à la date du jour on sort
If Int(Cells(7, Col_Deb)) > Int(Range("F2")) Then Exit For
Next Col_Deb
'col_deb n'ayant pas été remise à zéro, contient la colonne du jour supérieur
'à aujourd'hui.
'pour toutes les lignes non-vide de A : les cellules fusionnées sont vides à l'exception de
'celle du coin supérieur gauche
For Lig = 8 To Range("A65536").End(xlUp).Row
'Colonne A <>"" correspond à 1re ligne
If Range("A" & Lig) <> "" Then
'on copy de col_deb à la fin
Range(Cells(Lig, Col_Deb), Cells(Lig, 63)).Copy
'uniquement les valeurs sur la ligne suivante
Range(Cells(Lig + 1, Col_Deb), Cells(Lig + 1, 63)).PasteSpecial xlPasteValues
End If
Next Lig
'on met à jour la date masquée en F3
Range("F3") = Int(Range("F2"))
'End With
End Sub
voici un lien vers mon fichier :
http://cjoint.com/?jnlRF5PEMZ
SVP - Merci pour vos conseils et/ou remarques.
Raphaël