XL 2016 MFC sur plusieurs critères

Lorenzini

XLDnaute Occasionnel
Bonjour,

N'ayant plus de solutions (vu mon niveau limité en vba car j'imagine qu'il va falloir passer par là...), je me tourne vers vous car je patauge.
Dans le petit tableau que j'ai joins à ce message, je souhaiterais que le statut d'une ligne prévale sur le(s) statut(s) d'une/des autre(s) ligne(s) ; je donne qq exemples pour illustrer :

1721845828931.png


En changeant le statut (j'ai fais une MFC) d' "en cours" à "prêt" de la ligne 24 p.ex., je cherche à ce que

- toutes les lignes précédentes du tableau (jusqu'à celles qui avaient le statut "prêt" ; c'est la limite, s'il y'en a) ayant le même n° de chariot (colonne G), prennent le même statut.

Concrètement, si clique dans la cellule K24 pour passer d'"en cours" à "prêt", je cherche à ce que les lignes encadrées en rouge (20 et 12 car n° de chariot identique à la ligne 24) se changent à leur tour en "prêt" (et prennent la même mise en forme, couleur).

Autre exemple (qui ajoute encore en difficultés, comme si ce n'était pas assez compliqué comme çà !) :

1721847182375.png


En changeant le statut "en cours" de la ligne 23, la ligne 18 (qui a le même n° de chariot) se changerait également.

Les difficultés supplémentaires sont que :

1) ici, pour cet exemple, la ligne 10 (qui a aussi un n° de chariot commun) NE DOIT PAS changer car elle a déjà le statut "prêt" !

2) plusieurs de mes collègues seront censés travailler avec ce tableau ; quid si un utilisateur va trop vite et réalise trop tard qu'il a changé le statut d'"en cours" à "prêt" ?
Comment refaire le chemin inverse SANS CHANGER les lignes précédentes qui avaient le même n° de chariot MAIS QUI AVAIT DEJA le statut "prêt" ? (comme la ligne 10)
Il ne faudrait pas qu'en repassant de "prêt" à "en cours", la ligne 10 se change elle aussi de "prêt" à "en cours" !...

Pfff, je ne sais pas si je suis assez clair mais qui que vous soyez, vous aurez déjà été assez courageux d'avoir lu tout ce que j'ai écrit jusqu'ici ! 😁

Je vous avoue très honnêtement que çà fait quelques jours que je creuse... je sors tout juste de m'être cassé la tête d'avoir résolu d'autres choses comme le fait qu'Excel ne me recalcule pas l'heure automatiquement... mais là, je ne sais plus !

Si vous pouviez m'aider, j'apprécierai grandement ! :)
 

Pièces jointes

  • JOKIMIO TEST 3.xlsm
    44.8 KB · Affichages: 6
Solution
pour les les ######## Il faut simplement élargir la colonne
en pj, nouveau fichier avec le message de confirmation plus petit correctif
VB:
Sub MajStatut(pTarget As Range)
Dim Ligne As Long, nbLigRetour As Long
Dim NouveauStatut
Dim MemoDateMaj As Date
Dim Reponse As Integer
Dim Message As String
Dim LigneEnCours As Boolean

    Application.EnableEvents = False
    MemoDateMaj = Now
    NouveauStatut = pTarget.Value
    Ligne = pTarget.Row - ActiveSheet.Range("Tableau3").Row + 1
    If NouveauStatut = "en cours" Then
        ' on compte le nombre de lignes éventuellemnt concernées pour un retour arrière pour éventuellemnt afficher un message
        nbLigRetour = 0
        For i = 1 To Ligne - 1
            ' on compte les lignes...

TooFatBoy

XLDnaute Barbatruc
Pourquoi la cellule se remplit par une date lorsqu'on choisit 'non' !?!
Probablement parce qu'il y a ceci dans la macro Worksheet_SelectionChange :
VB:
        If MsgBox("Nouvel encodage ?", vbYesNo + vbQuestion, "Demande de confirmation") = vbYes Then
...
        Else
            ActiveCell.Offset(0, 8).Value = ""
        End If
alors qu'il faudrait ceci :
VB:
        If MsgBox("Nouvel encodage ?", vbYesNo + vbQuestion, "Demande de confirmation") = vbYes Then
...
        Else
            Exit Sub
        End If
 

Lorenzini

XLDnaute Occasionnel
Probablement parce qu'il y a ceci dans la macro Worksheet_SelectionChange :
VB:
        If MsgBox("Nouvel encodage ?", vbYesNo + vbQuestion, "Demande de confirmation") = vbYes Then
...
        Else
            ActiveCell.Offset(0, 8).Value = ""
        End If
alors qu'il faudrait ceci :
VB:
        If MsgBox("Nouvel encodage ?", vbYesNo + vbQuestion, "Demande de confirmation") = vbYes Then
...
        Else
            Exit Sub
        End If
je suis d'accord.
Comme on sait déjà qu'il y'en a de certains groupes qui iront trop vite, se tromperont, ...) ; tu comprends :rolleyes:, l'idée était de dire : si on clique sur 'non', la date (et l'heure) qui se sont affichées en colonne J doivent s'enlever... c'est ce qui explique le :
Else
ActiveCell.Offset(0, 8).Value = ""
 

TooFatBoy

XLDnaute Barbatruc
Comme on sait déjà qu'il y'en a de certains groupes qui iront trop vite, se tromperont, ...) ; tu comprends :rolleyes:, l'idée était de dire : si on clique sur 'non', la date (et l'heure) qui se sont affichées en colonne J doivent s'enlever..
Je comprends parfaitement, d'où ma réponse qui consiste à ne pas inscrire la date (ça évite de devoir l'effacer) et sortir tout de suite de la macro. ;)
 

TooFatBoy

XLDnaute Barbatruc
J'ai un peu modifié ton fichier de #48, en ce qui concerne le traitement des colonnes B à M de la feuille "Feuil1".

J'ai aussi un peu modifié le code des deux UserForm.
J'ai en particulier revu le fonctionnement du UserFrom2 et de la validation du mot de passe.



Enrichi (BBcode):
Private Sub UserForm_Activate()
'
Dim W#, Tim

    If clignote Then
        Do While clignote = True
            Image1.Visible = Not Image1.Visible
            W = 0.3: Tim = Timer
            Do While Timer < Tim + W
                DoEvents
            Loop
            If clignote = False Then Exit Do
        Loop
    End If

End Sub
Pardon, mais c'est un pneu du portninwak ton code là.
Certes il fonctionne, mais tu sais quand tu as un maillot de bain qui tient déjà très bien avec son élastique autour de la taille, pas besoin de lui ajouter une ceinture et des bretelles ! 😅
 

Pièces jointes

  • JOKIMIO HELP TOOFATBOY.xlsm
    407.6 KB · Affichages: 2

Lorenzini

XLDnaute Occasionnel
J'ai un peu modifié ton fichier de #48, en ce qui concerne le traitement des colonnes B à M de la feuille "Feuil1".

J'ai aussi un peu modifié le code des deux UserForm.
J'ai en particulier revu le fonctionnement du UserFrom2 et de la validation du mot de passe.



Enrichi (BBcode):
Private Sub UserForm_Activate()
'
Dim W#, Tim

    If clignote Then
        Do While clignote = True
            Image1.Visible = Not Image1.Visible
            W = 0.3: Tim = Timer
            Do While Timer < Tim + W
                DoEvents
            Loop
            If clignote = False Then Exit Do
        Loop
    End If

End Sub
Pardon, mais c'est un pneu du portninwak ton code là.
Certes il fonctionne, mais tu sais quand tu as un maillot de bain qui tient déjà très bien avec son élastique autour de la taille, pas besoin de lui ajouter une ceinture et des bretelles ! 😅
😂
Je comprends.
Je vais voir cette nouvelle version. 👍;)
 

Discussions similaires

Réponses
9
Affichages
775

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba