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.

  • Initiateur de la discussion Initiateur de la discussion oceanepla
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 ?
 
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
 
@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

Dernière édition:
@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.
 
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

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
 
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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
582
Retour