Appliquer plusieurs conditions de saisies à une même cellule

Bonjour

Merci pour ce forum qui m'a déjà apporté des solutions au néophyte que je suis.

Je sollicite vos compétences car je ne sais comment faire pour appliquer plusieurs conditions de saisies à une cellule

En A1 B1 et C1 Les valeurs autorisées sont 0 et 1

B1 ne peut être rempli que 2 mois après A1 et seulement si A1 est rempli

C1 ne peut être rempli que 2 mois après B1 et seulement si B1 et A1 sont remplis

je connais la condition pour remplir B1 seulement si A1 est rempli

Je connais la condition pour limiter les valeurs des cellules A1, B1 et C1

je ne connais pas la condition pour remplir B1 deux mois après A1

et je ne sais pas comment cumuler toutes ces conditions.

Merci de vos idées, en sachant que je ne suis pas compétent en programmation.

Cordialement

pbpb76

Bonsoir,

Comme pas encore de réponse, je te livre une piste de travail (qui ne me satisfait pas vraiment) mais c'est une voie possible :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ok As Boolean
    If Not Intersect(Target, Range("A1:C1")) Is Nothing Then
        If Target.Count = 1 Then
            With Target
                Select Case .Column
                    Case 1
                        If .Offset(0, 1) = "" And (.Value = 0 Or .Value = 1) Then ok = True
                    Case 2
                        If .Offset(0, 1) = "" And .Offset(0, -1) <> "" And DateAdd("m", -2, Date) >= .Offset(1, -1) _
                         And (.Value = 0 Or .Value = 1) Then ok = True
                    Case 3
                        If .Offset(0, -1) <> "" And DateAdd("m", -2, Date) >= .Offset(1, -1) _
                         And (.Value = 0 Or .Value = 1) Then ok = True
                End Select
            End With
        End If
        Application.EnableEvents = False
            If ok Then
                If Target <> "" Then
                    Target.Offset(1, 0) = Date
                Else
                    Target.Offset(1, 0).ClearContents
                End If
            Else
                Application.Undo
            End If
        Application.EnableEvents = True
    End If
End Sub

Macro évènementielle à mettre dans le module de la feuille. Dans la mesure où le délai implique que l'on note les dates de saisie,

elle est notée ici ligne 2 automatiquement. Cela fonctionne sur les critères définis. Pour éviter des blocages et l'impossibilité de rectifier une erreur, 0 au lieu de 1 ou l'inverse. Une condition permet d'effacer (et je fais également effacer la date dans ce cas).

On peut donc tout effacer pour recommencer, mais cela ne rétablit pas les dates de premières saisies. Cela reste un peu bancal.

Tu auras peut-être d'autres propositions permettant de mieux couvrir tous les cas.

Cordialement.

Ferrand

Retour à une version verrouillée. On ne peut plus modifier une fois la saisie effectuée (en respectant les conditions).

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ok As Boolean
    If Not Intersect(Target, Range("A1:C1")) Is Nothing Then
        If Target.Count = 1 And Target.Value <> "" Then
            With Target
                Select Case .Column
                    Case 1
                        If .Offset(1, 0) = "" And (.Value = 0 Or .Value = 1) Then ok = True
                    Case 2
                        If .Offset(1, 0) = "" And .Offset(0, -1) <> "" And DateAdd("m", -2, Date) _
                         >= .Offset(1, -1) And (.Value = 0 Or .Value = 1) Then ok = True
                    Case 3
                        If .Offset(1, 0) = "" And .Offset(0, -1) <> "" And DateAdd("m", -2, Date) _
                         >= .Offset(1, -1) And (.Value = 0 Or .Value = 1) Then ok = True
                End Select
            End With
        End If
        Application.EnableEvents = False
            If ok Then
                Target.Offset(1, 0) = Date
            Else
                Application.Undo
            End If
        Application.EnableEvents = True
    End If
End Sub

Bonsoir

j'ai hâte d'essayer votre proposition mais il me manque une indication basique qui va vous faire sourire: comment intégrer ce code dans un module ?

Où vais je trouver cette fonction module?

Je suppose qu'ensuite je copie le code et ?? que dois je faire ensuite? Nommer le module? et comment faire en sorte que cette macro s'applique à certaines cellules du fichier et pas aux autres?

Cordialement

Les macro évènementielles fonctionnent exclusivement dans les modules spécifiques des objets Excel (ceux qui en possèdent) pour les évènements concernant ces objets...

Donc ici le module de la feuille concernée auquel tu peux accéder directement par : clic droit sur l'onglet et Visualiser le code.

Là tu colles la macro. Une seule ! Il ne peut y avoir qu'une seule procédure pour un même évènement.

Avec la seconde, tu ne peux plus effacer. Donc si tu es bloqué, tu mets une apostrophe devant la ligne / Application.Undo qui la rendra inopérante (c'est celle qui annule les actions).

Tu peux modifier les dates une fois mises par contre.

Je n'ai surement pas tout compris et mes manœuvres n'ont peut être pas été correctes mais je ne vois pas le résultat escompté s'afficher.

j'ai mis le fichier en question en pièce jointe

L'objectif est l'évaluation de la progression des internes de médecine générale durant leur stage et ce en trois temps

Les colonnes C,D,E sont concernées sur chaque onglet mais pas les groupes de cellules C11 à E12, C22 à E23, C38 à E39, C49 à E50 et ainsi de suite à chaque onglet ( mais ces cellules peuvent être déplacées si besoin)

Ainsi la colonne C doit être saisie en premier avec des valeurs 0 ou 1, puis D puis E et la colonne D 2 mois après la colonne C et la colonne E 2 mois après la colonne D

Sur le premier onglet j'ai recopié la première macro mais je n'obtiens pas le résultat escompté

Je pensais mettre la date de début de stage sur le premier onglet : Cursus de l'interne

Peut être que mes premières demandes n'étaient pas claires non plus, c'est pourquoi je vous ai mis le fichier

Merci de vos lumières

Cordialement

Tu m'étonnes ! En posant ton problème comme tu l'as fait, tu présentais une configuration positionnée un peu différemment de ce qu'elle est et que pour toute réponse, tu allais avoir à adapter tous les positionnements relatifs, soit à réécrire à peu près complètement la réponse !

On n'est pas très éloigné sur le principe de traitement, mais dans ce contexte il faut se positionner autrement. D'abord, on opère sur plusieurs feuilles, donc si le contrôle de la saisie incline à une action consécutive à l'évènement, on ne placera pas une procédure pour chaque feuille, mais une seule au niveau du classeur. Il faut donc adapter le système de reconnaissance des plages sur lesquelles il y aura à intervenir. Ensuite,si la nécessité d'enregistrer une date pour pouvoir mesurer le délai écoulé entre 2 saisies sur la même ligne, on ne peut le faire qu'à droite si c'est sur la ligne... mais je suppose que chaque ligne de chaque feuille n'a pas vocation à être saisie un jour différent des autres (cela durerait longtemps), il est donc bon de savoir si : à l'extrême la colonne C (et D et E par la suite), fait l'objet d'une saisie complète simultanément pour toutes les feuilles, et complètement pour chacune [on n'a alors à enregistrer qu'une seule date pour tout le classeur] ; de façon intermédiaire si une saisie simultanée est imposée par groupe de compétences évaluées ; ou si aucune règle n'étant imposée, il faut suivre l'évaluation compétence par compétence.

Dans ce cas, il est possible d'enregistrer une date à droite, en F (ou plus loin si tu préfères) et on peut la rendre non visible (soit en masquant la colonne, soit en mettant la couleur à blanc comme le fond.

Reste un point à confirmer ou non : faut-il empêcher de modifier C lorsque D a déjà été saisi ? Et s'il n'a pas encore été saisi, est-ce que la modification d'évaluation est licite ? (Et dans ce dernier cas la nouvelle date d'évaluation doit-elle remplacer la première, ou la première date demeure pour la suite ?)

Il faut me répondre très précisément, car des conditions forment un ensemble, certaines s'excluant mutuellement, d'autres pas, et tout changement oblige à revoir l'ensemble à chaque fois. Il me paraît souhaitable de démarrer sur un ensemble de règles stable et définitif.

A+

Bonjour

Voyant que le problème n'a pas l'air simple pour un programmeur, je n'imagine même pas pouvoir le résoudre par mes propres moyens. J'ai donc conversé avec mes collègues de travail sur ce projet et les intervalles de saisie entre chaque bilan est de 12 mois.

En recherchant un peu avec la fonction validation des données, j'ai réussi à limiter la saisie du bilan 2 si la cellule du bilan 1 n'est pas saisie pour des valeurs de 0 et 1 et idem pour la cellule du bilan 3. Sauf que cela ne me satisfait pas car je voudrais qu'aucune cellule de la colonne Bilan 2 puisse être remplie si l'ensemble des cellules de la colonne Bilan 1 ne sont pas remplies et idem pour la colonne Bilan 3 en fonction de la colonne Bilan 2

J'ai pensé masquer les colonnes si la précédente n'est pas entièrement remplie

Pour ce faire, j'ai fait compter en G1, H1, I1, le nombre de cellules remplies par colonnes Bilan 1, 2 et 3

j'ai trouvé une macro qui permet de masquer la colonne Bilan 2 si G1 est différent du nombre total de cellules qu'il est possible de remplir ( ici : 33 cellules); je ne l'ai testé avec succès que dans un autre fichier où je saisissais la valeur en G1 alors que là elle est dépendante d'une formule et cela ne fonctionne pas.

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("G1")) Is Nothing Then Exit Sub

If Target.Value = 33 Then Columns(4).Hidden = False

If Target.Value < 33 Then Columns(4).Hidden = True

End Sub

Voici ma question: peut-on masquer les colonnes D et E si la colonne C n'est pas entièrement remplie et idem pour la colonne E si la colonne D n'est pas totalement remplie et il faudrait idéalement que le bilan 1 soit saisi qu'entre 11 et 12 mois après la date de début du DES qui sera en C3 sur l'onglet cursus interne. Le bilan 2 sera à saisir entre 11 et 12 mois après la Bilan 1 et idem pour le Bilan 3

je vous remets le fichier que j'ai travaillé avec les mises sous conditions mais cela ne va peut-être pas pas avecce que je souhaite en dessous

Est ce qu'on peut combiner tout cela?

Merci de votre dévouement

Cordialement

Bonsoir,

Oui, on peut masquer les les colonnes C et D et les démasquer lorsque C sera entièrement servie. Peut-être les démasquer systématiquement au bout de 12 mois tout de même ? (en signalant éventuellement ce qui n'était pas servi).

Un changement de valeur dû à une formule résulte d'un recalcul et ne déclenche pas l'évènement Change.

Il faut arriver à te fixer sur un objectif car à force d'en changer on ne va plus savoir la situation finale qu'on veut.

Cordialement

Bonsoir

je comprends vos interrogations mais je rends compte en même temps à mes collaborateurs qui me donnent également leurs opinions ce qui modifient en retour les objectifs.

Objectifs : Pour tous les onglets sauf ceux du cursus et de synthèse

Ne saisir que des valeurs 0 ou 1

Remplir la colonne du bilan C entre 11 et 12 mois après la date de début du cursus, sinon interdire la saisie

Remplir la colonne du bilan D entre 23 et 24 mois après la date de début du cursus et si C est remplie, sinon interdire la saisie ou masquer la colonne

Remplir la colonne du bilan E entre 23 et 24 mois après la date de début du cursus et si D est remplie, sinon interdire la saisie ou masquer la colonne

Voilà. est-ce réalisable?

Cordialement

Est-ce que la date de début du cursus est celle qui figure en B11 (cursus interne) ?

On peut a-priori contrôler le masquage des colonnes avec SelectionChange dans la mesure ou pour démaquer il faut une sélection traversant ces colonnes. Elles seront démasquées automatiquement en fonction des dates. Peut-être faut-il un message indiquant le démaquage et le début de la possibilité d'évaluer ? Et un autre pour indiquer la fin de la période d'évaluation ?

Le verrouillage de saisie devient donc :

Pour C: blocage jusqu'au 11e mois, déblocage, et reblocage au delà du 12e mois.

Pour D et E : blocage jusqu'au 23e mois, déblocage, sous condition que C soit servie pour D, et Cet D pour E, blocage au-delà du 24e mois.

Donc si l'évaluation C est loupée, il n'y aura pas d'évaluation.

On peut faire selon ce schéma.

Bonsoir

deux journées de consultations intenses m'ont empêché de venir vers vous.

Pour simplifier :

L'année universitaire des étudiants en stage de médecine générale débute le 1 er novembre de chaque année

Le bilan 1 puis 2 puis 3 doivent avoir lieu entre la 15 aout et le 15 septembre de chaque année donc pas besoin de de intéresser à la date de début de cursus universitaire. Le fichier sert pour 3 ans et est distribué début novembre

Le remplissage de la colonne C ne doit intervenir qu'entre le 15 aout et le 15 septembre suivant , la colonne D entre le 15 aout et le 15 septembre de l'année suivante et la colonne E entre le 15 aout et le 15 septembre de l'année suivante

La colonne D du bilan 2 doit être déverrouillée que si La colonne C du Bilan 1 est entièrement remplie pour chaque onglet

La colonne E du bilan 3 doit être déverrouillée que si La colonne D du Bilan 2 est entièrement remplie pour chaque onglet

Les seules valeurs autorisées sont 0 et 1

Les cellules qui ne servent pas à la saisie doivent être verrouillées

Pas d'autres modifications ultérieures

Pensez vous que cela soit réalisable?

Merci de votre avis

Ça se précise !

Le problème n'est pas de savoir si ce qu'on veut faire est possible ou pas. Il le sera d'une façon ou d'une autre.

Il faut être sûr de ce qu'on veut mettre en place pour éviter de faire autre chose.

Là il ne manque plus comme information que de savoir où trouver dans le document l'indication de la première année du cursus, puisqu'elle à la source des disposition à mettre en place pour contrôler la régularité des évaluations.

Cordialement

Bonne soirée.

Bonsoir

Merci de votre attention, patience et ténacité.

La date de début sera en C3 sur l'onglet Cursus; seule l'année changera. Le jour et le mois seront toujours le premier novembre.

La saisie du bilan 1 pour la colonne C interviendrait entre les jours 288 et 319 après le premier novembre, 653 et 684 pour la colonne D et 1018 et 1049 pur la colonne E

Est ce qu'on peut se passer de la date si on considère que tous les ans le bilan se passe entre les jours 227 et 258 à compter du premier janvier et il suffit de rajouter 365 pour la colonne D et 730 pour la colonne E ? Mais c'est une vision de néophyte peut être inapplicable en programmation informatique..

Cordialement

Mais non ce n'est pas une vision que je qualifierai de néophyte ! C'est au contraire le début d'une recherche (d'"astuces" en quelque sorte) pour se simplifier les calculs, trouver celui qui permettra d'avoir un résultat significatif distinguant tous les cas traités. Cela n'a l'air de rien mais cela permet généralement de réduire le nombre de lignes à écrire, même si cela ne rend pas toujours le code plus efficace.

Je suis curieux de ce que vous pourrez me proposer et déjà admiratif!

Je suis pas mal pris aujourd'hui par des problèmes administratifs et juridiques. Je vois ça dès que je peux.

Cordialement

Ferrand

Pour te faire patienter... C'est écrit. Pas de quoi être admiratif. Je suis juste pas à pas les conditions.

Il me reste à tester (faut bricoler un peu les dates pour pouvoir le faire) mais j'évite les tests de nuit...!

A+

Bonjour,

Incomplètement testé, mais si cela peut attendre un peu, l'autre moitié des tests à partir du 16 septembre. Les tests se faisant sur la date, je ne tiens pas à modifier la date de mon ordi et j'ai la flemme de réécrire deux procédures en décalant les dates de la période d'évaluation uniquement pour tester...

Tout le code est concentré dans le module ThisWorkbook (module dévolu au classeur).

Trois procédures évènementielle sont utilisées :

Elles ne s'exécutent que si une date est saisie en C3 ("cursus interne")

_Open : à l'ouverture du classeur, active la feuille "cursus interne", lance la procédure de contrôle de la visibilité des colonnes d'évaluation.

_SelectionChange : déplacement du curseur, empêche une sélection sur plus de 2 colonnes, lance la même procédure que _Open.

_Change : modification de valeur, lance la procédure de contrôle de saisie.

Les feuilles "cursus interne" et "Synthèse" ne sont bien sûr pas affectées.

Visibilité ou affichage des colonnes :

  • En période d'évaluation, la colonne concernée est affichée (pour les 2e et 3e évaluations, à conditions que les précédentes aient été menées à terme), les colonnes d'évaluation antérieure restent affichées si menées à terme.
  • Hors période d'évaluation : les colonnes des évaluations antérieures restent affichées si elles ont été menées à terme.

Saisie : la saisie ne peut intervenir qu'en période d'évaluation. La saisie n'est autorisée que sur la colonne relative à l'évaluation en cours si les conditions en sont réunies (si donc elle est affichée). 0 et 1 sont les valeurs autorisées. Toute saisie autre que 0, si différente de 1 est ramenée automatiquement à 1.

Si une saisie est menée à terme, le nombre de valeurs dans la colonne concernée, sur l'ensemble des feuilles concernées, de la ligne 1 à la ligne 56 est de 281. Une formule le calcule pour chacune des colonne sur "Synthèse" (G1 à I1) [avant saisie, le nombre de valeurs (intitulés, formules) est de 69].

La structure a été rendue homogène (une seule ligne vide intermédiaire, les lignes inutilisées de la fin à 56 masquées).

Bien évidemment, il ne s'agit que d'un "verrouillage relatif". On voit qu'il suffit en effet d'effacer momentanément la date pour avoir les mains libres. Il sera donc sans doute judicieux de protéger les feuilles...

Cordialement

Ferrand

Déjà Merci pour cet énorme travail. J'ai regardé le code...... Je n'ai rien compris!

Pourquoi faut il modifier la date de l'ordi vu que la saisie de la premier bilan est entre le 15 aout et le 15 sept? on peut tester la colonne C ?

Pour tester la colonne D du bilan 2 et celle du bilan 3 sur la colonne E, est ce que, moi, je peux la tester en modifiant la date sur mon ordi car il faut que je le soumette vendredi prochain et le groupe de travail voudra surement une petite démonstration?

A vous lire

cordialement

Dr B

Rechercher des sujets similaires à "appliquer conditions saisies meme"