Microsoft 365 Lorsque la case passe au statut Terminé alors dans une autre case la date apparait. Puis la ligne se déplace à la fin.

oceanepla

XLDnaute Junior
Bonjour,


Captureexcel.JPG

Voici mon fichier, j'aimerais que lorsque la colonne F passe en statut Terminé, la colonne I se remplisse en mettant la date du jour (jour où la modification de la case à été faite). Puis que la ligne 1 passe en position 5 (après les lignes complétés).


Je sais que cela est possible grâce aux macros mais je n'arrive pas à bien coder pour obtenir ce que je souhaite. Le résultat que je souhaite serais que les lignes 1-2-4 se déplacent, donc les deux lignes 3 et 5 se retrouveraient en position 1 et 2

Merci d'avance,



Pouvez-vous m'aider ?
 

soan

XLDnaute Barbatruc
Inactif
oui, ce serait mieux ; pour cela, tu peux utiliser le bouton « Joindre un fichier » ;
tu le verras en bas à gauche de ton post en cours d'édition.

attention : ton fichier doit être sans données confidentielles.

soan
 

soan

XLDnaute Barbatruc
Inactif
@oceanepla

ton fichier en retour, version v1. :)

attention : dans cette version, j'ai fait seulement la 1ère partie.

* note bien que J10 est vide ; en G10, il y a déjà : "En cours"

* sélectionne le 3ème item "Terminé" ➯ en J10 : 06/05/21
* en G10, efface "Terminé" (touche Suppression)J10 : vide

* sélectionne le 3ème item "Terminé" ➯ en J10 : 06/05/21
* en G10, sélectionne un autre item, par exemple "En cours"
ou "En attente" ➯ J10 : vide

ça marche pareil pour toutes les lignes en dessous.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim cel As Range
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 7 Then Exit Sub
    If .Row < 10 Then Exit Sub
    Set cel = .Offset(, 3)
    If .Value = "Terminé" Then cel = Date _
      Else cel.ClearContents
  End With
End Sub

soan
 

Pièces jointes

  • Plan d'actions Proposition 3 v1.xlsm
    377.4 KB · Affichages: 3
Dernière édition:

oceanepla

XLDnaute Junior
@oceanepla

ton fichier en retour, version v1. :)

attention : dans cette version, j'ai fait seulement la 1ère partie.

* note bien que J10 est vide ; en G10, il y a déjà : "En cours"

* sélectionne le 3ème item "Terminé" ➯ en J10 : 06/05/21
* en G10, efface "Terminé" (touche Suppression)J10 : vide

* sélectionne le 3ème item "Terminé" ➯ en J10 : 06/05/21
* en G10, sélectionne un autre item, par exemple "En cours"
ou "En attente" ➯ J10 : vide

ça marche pareil pour toutes les lignes en dessous.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim cel As Range
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 7 Then Exit Sub
    If .Row < 10 Then Exit Sub
    Set cel = .Offset(, 3)
    If .Value = "Terminé" Then cel = Date _
      Else cel.ClearContents
  End With
End Sub

soan
Merci beaucoup pour ton aide, c'est vraiment gentil. J'ai juste une macro Workbook qui a l'air de ne plus fonctionner, il s'agit d'une macro qui lors de l'ouverture ouvre sur la feuille 01.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Oceane,

j'avais désactivé la ligne de la sub Workbook_Open() pour cette raison : quand la ligne est active, la feuille à l'ouverture du fichier est "Accueil" ; il faut donc sélectionner la feuille "PA Général" pour travailler dessus, et cela à chaque ouverture du fichier ; je voulais éviter ça, donc comme on travaille de nouveau sur "PA Général", j'ai de nouveau désactivé la ligne ' Feuil01.Select ; ce sera à toi de la réactiver quand tout sera ok, et tu sais maintenant comment faire : il suffit d'enlever l'apostrophe qui est en début de ligne.​



voici la 2ème version du fichier, et le déplacement n'est pas fait.

c'est pour cette nouvelle formule en i10 (déjà tirée vers le bas jusqu'en i33) :​

=SI(H10="";"";SI(G10="Terminé";G10;JOURS360(MAINTENANT();H10)))

avantage n° 1 : quand c'est vide en colonne H (car tu n'as pas saisi de Date prévisionnelle), ça n'affiche plus, comme c'était le cas avant, 0 en colonne i ; car avant, y'avait des 0 inutiles en i19 et en i22:i33.

avantage n° 2 : j'ai corrigé l'erreur de ta formule initiale, qui faisait que "Terminé" était affiché en i21 ; en effet, tu as saisi le texte "A commencer" en G21 (même s'il ne fait pas partie de ta liste de validation : c'est ni "En cours", ni "En attente", ni "Terminé") ; or c'est évident que si la tâche est "A commencer", ça ne peut pas être "Terminé" ! avec ma nouvelle formule, en i21, il y a : -33 ; c'est plus correct, n'est-ce pas ? 😁 😜 et comme j'ai changé aucune MFC, ton -33 est en blanc sur fond rouge.​



voyons la suite de la nouvelle formule, en prenant pour exemple la ligne 10 ; et selon ce que j'ai écrit plus haut, H10 ne peut pas être vide : tu as saisi une Date prévisionnelle en H10 ; si en G10 tu as choisi "Terminé", alors en i10 on affiche G10 (donc "Terminé") ; dans tous les autres cas, on affiche le nombre de jours (base 360) entre MAINTENANT() et H10 :
JOURS360(MAINTENANT();H10)

ainsi, plus besoin de ton test initial sur 2 valeurs :

SI(OU(G10="En attente";G10="En cours");...



alors, c'est pas mieux comme ça ? que penses-tu de ces changements ? 😉

soan
 

Pièces jointes

  • Plan d'actions Proposition 3 v2.xlsm
    377.4 KB · Affichages: 6

oceanepla

XLDnaute Junior
Bonjour Oceane,

j'avais désactivé la ligne de la sub Workbook_Open() pour cette raison : quand la ligne est active, la feuille à l'ouverture du fichier est "Accueil" ; il faut donc sélectionner la feuille "PA Général" pour travailler dessus, et cela à chaque ouverture du fichier ; je voulais éviter ça, donc comme on travaille de nouveau sur "PA Général", j'ai de nouveau désactivé la ligne ' Feuil01.Select ; ce sera à toi de la réactiver quand tout sera ok, et tu sais maintenant comment faire : il suffit d'enlever l'apostrophe qui est en début de ligne.​



voici la 2ème version du fichier, et le déplacement n'est pas fait.

c'est pour cette nouvelle formule en i10 (déjà tirée vers le bas jusqu'en i33) :​

=SI(H10="";"";SI(G10="Terminé";G10;JOURS360(MAINTENANT();H10)))

avantage n° 1 : quand c'est vide en colonne H (car tu n'as pas saisi de Date prévisionnelle), ça n'affiche plus, comme c'était le cas avant, 0 en colonne i ; car avant, y'avait des 0 inutiles en i19 et en i22:i33.

avantage n° 2 : j'ai corrigé l'erreur de ta formule initiale, qui faisait que "Terminé" était affiché en i21 ; en effet, tu as saisi le texte "A commencer" en G21 (même s'il ne fait pas partie de ta liste de validation : c'est ni "En cours", ni "En attente", ni "Terminé") ; or c'est évident que si la tâche est "A commencer", ça ne peut pas être "Terminé" ! avec ma nouvelle formule, en i21, il y a : -33 ; c'est plus correct, n'est-ce pas ? 😁 😜 et comme j'ai changé aucune MFC, ton -33 est en blanc sur fond rouge.​



voyons la suite de la nouvelle formule, en prenant pour exemple la ligne 10 ; et selon ce que j'ai écrit plus haut, H10 ne peut pas être vide : tu as saisi une Date prévisionnelle en H10 ; si en G10 tu as choisi "Terminé", alors en i10 on affiche G10 (donc "Terminé") ; dans tous les autres cas, on affiche le nombre de jours (base 360) entre MAINTENANT() et H10 :
JOURS360(MAINTENANT();H10)

ainsi, plus besoin de ton test initial sur 2 valeurs :

SI(OU(G10="En attente";G10="En cours");...



alors, c'est pas mieux comme ça ? que penses-tu de ces changements ? 😉

soan
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Oceane,

voici la 3ème version, avec les modifs précédentes que tu as déjà aimées + le déplacement en fin de tableau des lignes avec "Terminé" ; j'ai utilisé une méthode vraiment très pratique qui n'utilise ni l'insertion d'une ligne, ni le couper/coller d'une ligne. 😊 à toi de faire les essais, puis de me donner ton avis. 😉

VB:
Option Explicit: Option Compare Text

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim cel As Range, lg1&, lg2&
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 7 Then Exit Sub
    lg1 = .Row: If lg1 < 10 Then Exit Sub
    Set cel = .Offset(, 3): Application.ScreenUpdating = 0
    If .Value <> "Terminé" Then cel.ClearContents: Exit Sub
  End With
  cel = Date: lg2 = Cells(Rows.count, 7).End(3).Row + 1
  With Cells(lg1, 1).Resize(, 12)
    .Copy Cells(lg2, 1): .Delete 3
  End With
End Sub

soan
 

Pièces jointes

  • Plan d'actions Proposition 3 v3.xlsm
    378.1 KB · Affichages: 3

oceanepla

XLDnaute Junior
Bonjour Oceane,

voici la 3ème version, avec les modifs précédentes que tu as déjà aimées + le déplacement en fin de tableau des lignes avec "Terminé" ; j'ai utilisé une méthode vraiment très pratique qui n'utilise ni l'insertion d'une ligne, ni le couper/coller d'une ligne. 😊 à toi de faire les essais, puis de me donner ton avis. 😉

VB:
Option Explicit: Option Compare Text

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim cel As Range, lg1&, lg2&
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 7 Then Exit Sub
    lg1 = .Row: If lg1 < 10 Then Exit Sub
    Set cel = .Offset(, 3): Application.ScreenUpdating = 0
    If .Value <> "Terminé" Then cel.ClearContents: Exit Sub
  End With
  cel = Date: lg2 = Cells(Rows.count, 7).End(3).Row + 1
  With Cells(lg1, 1).Resize(, 12)
    .Copy Cells(lg2, 1): .Delete 3
  End With
End Sub

soan
En effet, c'est vraiment bien, mais sais-tu comment faire pour que si le statut repasse à En cours ou en attente la ligne remonte au dessus des terminés ?

Merci d'avance
 

soan

XLDnaute Barbatruc
Inactif
oulah ! c'est une nouvelle demande, ça ! en plus, elle ne m'a pas l'air si simple que ça à faire ! j'vais y réfléchir, pour essayer de trouver une solution, mais j'peux rien te garantir ; de plus, j'suis déjà débordé actuellement avec d'autres exos et des affaires persos.​

soan
 

Discussions similaires

Statistiques des forums

Discussions
312 189
Messages
2 086 033
Membres
103 102
dernier inscrit
nath34490