Cellule à liste déroulante conditionnée par cellule suivante Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
S
SimonB73
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 19 mars 2014
Version d'Excel : 2010FR

Message par SimonB73 » 19 mars 2014, 12:05

Bonjour à tous,

Je cherche à créer un tableau de service qui doit donner les présences "P", contre-visites "CV" et gardes "G" et doit pouvoir être partagé entre différents praticiens et modifié plusieurs fois par mois.

J'ai donc créé le-dit tableau (ci-joint) avec des listes déroulantes où chacun rentre son emploi du temps et mis des conditions :

Si le praticien est de garde "G", alors il est automatiquement de contre-visite le soir de sa garde ("CV" sur la case précédente) et automatiquement en repos de sécurité ("RS" le lendemain, case suivante). Avant la validation définitive du tableau de service, chaque praticien peut entrer ses disponibilités pour la contre-visite (CV) via le menu déroulant, par les items "OUI" ou "NON".

Donc, les cellules "CV" ont une double entrée : soit via le menu déroulant, soit conditionnée par la valeur de la case suivante.


Le problème survient quand il y a une modification :
Si une case CV est modifiée à partir du menu déroulant, la formule conditionnée par la garde de la case suivante est perdue : la formule type =SI(E22 ="G";"CV";"") est écrasée par la valeur rentrée via le menu déroulant.

J'ai donc 2 questions pour lesquelles, après avoir appelé des amis, supplié les secrétaires et parcourus plusieurs forums je ne trouve pas de solutions :

Est-il possible de créer dans la case CV : Une condition "Forte" : si la valeur de la case suivante est "G", alors cette case est automatiquement "CV", si la valeur est vide, alors un choix via le menu déroulant est possible avec les items "CV", "OUI" et "NON".

Comment faire pour que la formule rentrée (=SI(E22 ="G";"CV";"")) ne soit pas écrasée si on rentre une valeur via un menu déroulant et sous à nouveau conditionnée par la valeur de la case suivante si la case "CV" contient à nouveau une valeur "nulle" via le menu déroulant.

Désolé pour ces explications un peu laborieuses, j'espère que vous saurez y voir clair et m'aider !

Merci d'avance
Copie de Tableau de service.xls
(141.5 Kio) Téléchargé 41 fois
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'683
Appréciations reçues : 343
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 20 mars 2014, 11:27

Bonjour et bienvenues sur le forum

J’ai, je crois, résolu ton problème avec des macros événementielles mais il y a un « hic »
Ma solution ne marche qu’avec Excel 2003 (mon ancienne version). Avec Excel 2013, Excel décroche et se ferme. Va savoir pourquoi !
Avec Excel 2010, ta version d’après l’indication du forum, je ne sais pas mais je crains fort que ce soit comme avec 2013.
En revanche, si cela peut te convenir, vu que tu n’as apparemment pas eu d’autres propositions, j’ai fait une version où il te faudra valider ta feuille en cliquant sur un bouton quand l’opérateur aura modifié le planning.
Hélas, ce serait mieux avec une validation automatique après chaque saisie…
Ci-joint donc les 3 versions à tester :
*V Excel 2003
*V Excel 2013 à tester avec Excel 2010
*V Bouton
Merci de me dire si l’une d’entre elles te convient.
Bye !
Tableau de service Vbouton.xlsm
(53.43 Kio) Téléchargé 36 fois
Tableau de service V Excel 2003.xls
(189.5 Kio) Téléchargé 14 fois
Tableau de service V Excel 2013.xlsm
(49.55 Kio) Téléchargé 27 fois
Avatar du membre
leakim
Membre impliqué
Membre impliqué
Messages : 1'805
Appréciations reçues : 12
Inscrit le : 11 décembre 2012
Version d'Excel : 2010 - 2016 FR
Téléchargements : Mes applications

Message par leakim » 20 mars 2014, 13:13

Bonjour,
Beau boulot !!!
Je te confirme en 2010 il y a un bug lorsque l'on choisit "vide" et que la macro se lance pour remettre la formule.
Ta version bouton est extra !

Chapeau bas !

Leakim
On apprend par des essais/erreurs. L'erreur, serait de ne pas en faire... :noel:
Image
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'683
Appréciations reçues : 343
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 20 mars 2014, 13:29

Bonjour le forum
Bonjour leakim

Merci leakim ! Je n'en demandais pas tant !
Et si tu as ne serait-ce qu'un début d'explication sur le bug , cela m'intéresse .
Merci encore !
S
SimonB73
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 19 mars 2014
Version d'Excel : 2010FR

Message par SimonB73 » 21 mars 2014, 13:30

Bonjour Gmb,

Merci beaucoup pour tes propositions.

Comme tu le pressentais, les versions 2003 et 2013 ne fonctionnent malheureusement pas avec 2010, je n'ai donc pas pu les tester.

Je te remercie néanmoins pour le temps que tu as passé dessus.

Pour la version "Bouton" par contre, je ne comprends pas bien le système et sur ma version, je ne vois pas de changement : la formule SI est écrasée après une entrée via le menu déroulant. Du coup, je ne comprends pas bien l'effet de la case "Valider". Est-ce que tu peux me donner plus d'infos ?

Merci encore pour ton aide
Avatar du membre
Banzai64
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'721
Appréciations reçues : 4
Inscrit le : 21 novembre 2010
Version d'Excel : 2003 FR (learning 2010 - 2013)

Message par Banzai64 » 21 mars 2014, 14:03

Bonjour

@ gmb

As tu essayé d'encadrer ta macro par la suppression/remise des événements ?

Private Sub Worksheet_Change(ByVal Target As Range)

[surligner]Application.EnableEvents = False[/surligner]
    Set Sel = Range("D6")
    For t = 0 To 22 Step 16
        For k = 0 To 38 Step 19
            For i = 6 To 16 Step 2
                For j = 4 To 16 Step 3
                    Set Sel = Union(Sel, Cells(i + t, j + k))
                Next j
            Next i
        Next k
    Next t

    If Not Intersect(Target.Offset(0, -1), Sel) Is Nothing Then
        If Target.Value = "G" Then
            Target.Offset(0, -1).Value = "CV"
        End If
    ElseIf Not Intersect(Target, Sel) Is Nothing Then
            If Target.Offset(0, 1).Value = "" And Target.Value = "" Then
                Target.Value = "=IF(RC[1] =""G"",""CV"","""")"
            ElseIf Target.Offset(0, 1).Value = "G" Then
                Target.Value = "CV"
            End If
    End If
    Set Sel = Nothing
    [surligner]Application.EnableEvents = True[/surligner]
End Sub
Image
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'683
Appréciations reçues : 343
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 21 mars 2014, 14:47

Bonjour

@Banzaï :
Je viens d'essayer et cela a l'air de marcher. Je te remercie infiniment car j'ai eu plusieurs fois ce problème sans pouvoir le résoudre. Grace à toi, c'est maintenant fait. Merci encore.

@Simon
Dans la version « Bouton », bien sûr la formule est écrasée quand tu entres une formule. Mais le rôle du bouton « Valider » est justement de la remettre partout où une saisie l’a enlevée.
Mais, grâce à Banzaï, la nouvelle version que je te joins te fera les modifications au fur et à mesure de tes saisies, comme tu le souhaites.
Tableau de service.xlsm
(51.19 Kio) Téléchargé 42 fois
S
SimonB73
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 19 mars 2014
Version d'Excel : 2010FR

Message par SimonB73 » 21 mars 2014, 16:33

Wow ! Génial !

Merci à tous les 2, vous êtes des pros, nous allons gagner énormément de temps, nous et les secrétaires grâce à votre expertise !
S
SimonB73
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 19 mars 2014
Version d'Excel : 2010FR

Message par SimonB73 » 22 mars 2014, 12:55

Hum ! Désolé pour la question de néophyte qui va suivre....

J'ai voulu coller le mois de janvier pour faire Février et les suivants, mais je perds la macro magique que vous avez développée. Je fouille le forum et l'aide en ligne, mais rien ne ressort.

Comment faire une copie en gardant la macro d'une feuille à une autre ?

Merci d'avance !
S
SimonB73
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 19 mars 2014
Version d'Excel : 2010FR

Message par SimonB73 » 22 mars 2014, 13:33

Que c'est compliqué Excel quand on n'a jamais eu de formation !

Quitte à abuser, je voudrais pouvoir appliquer la même macro sur le tableau sur une autre cellule :

La case activité de jour "J" est liée à l'activité de nuit "N". J'ai donc rentré la formule =SI(E6="G";"RS";"P"). Mais j'ai le même problème que pour la case CV liée à la case G : Si on fait une entrée via le menu déroulant, la formule s'efface.

J'ai bien essayé de décrypter la macro sus mentionnée, mais vraiment, mais alors, vraiment, c'est au délà de toutes mes compétences. Malheureusement, l'hôpital ou je travaille ne nous fournira pas d'aide pour développer notre tableau de service, aussi je me permet de faire à nouveau appel aux passionnés.

Très humblement et avec (à nouveau) tous mes remerciements !
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message