Créer un tableau avec des conditions dont accès à un menu déroulant
Bonjour à tous
je cherche à créer un tableau dans lequel, en fonction du diplôme détenu par le candidat avant d'entrer en formation certaines cases vont se remplir automatiquement ou devront être "remplies" à l'aide d'un menu déroulant. les diplômes ne se cumulent pas.
Dans le fichier joint j'ai indiqué ce que je souhaite obtenir (ceci est un exemple bien sûr car c'est parfois un peu plus subtil que ça):
si diplômes = sapat alors
->la case B4, C4 et I4 doivent permettre d'accéder au menu déroulant "oui" ou "non".
->D4 doit se remplir automatiquement
>avec "oui" si B4 et C4 sont "oui"
>avec "non" si B4 ou C4 ou les 2 sont "non"
->les cases E4 à H4 contiennent le mot dispense
J'ai déjà réussi à créer la condition pour le assp : si diplômes =assp alors les cases B4 à I4 contiennent le mot équivalence.
Je vous remercie par avance de vos précieux conseils
Bien à vous
Alexandra
Bonjour,
Essayez ceci:
Cdlt
Merci beaucoup !
Pourriez vous m'expliquer ce que vous avez fait afin que je puisse le reproduire dans mon fichier final ?
Concernant le remplissage automatique des cases E4 à H4 cela doit se faire sans conditions pour le diplôme sapat. Dans votre fichier cela ne se remplit (automatiquement) QUE si la case D4 contient un oui.
Merci d'avance
Bonjour,
Vu ce que vous avez demandé, il faut passer par du VBA pour créer une macro évènementielle (qui réagit aux changements de valeurs dans les colonnes A à C)
Pour voir le code faire la combinaison des touches "ALT" + "F11"
Le code :
Option Compare Text 'permet de ne pas faire de distintion avec les valeurs en minuscules ou en majuscules
Private Sub Worksheet_Change(ByVal Target As Range) 'macro évènementielle qui réagit aux changements de valeurs dans la feuille
Dim DerLig As Long 'création d'une variable pour désigner la dernière ligne du tableau
On Error GoTo Sortie ' en cas d'erre'permet au ur, on se dirige vers la sortie
Application.EnableEvents = False 'empêche l'exécution de tout autre évènement pendant le déroulement de la macro
Application.ScreenUpdating = False 'désactive l'actualisation de l'affichage et augmente la vitesse d'exécution de la macro
DerLig = Range("A" & Rows.Count).End(xlUp).Row 'Recherche de la dernière ligne du tableau
If Not Intersect(Target, Range("A1:A" & DerLig)) Is Nothing Then 'si la cellule modifiée est en colonne A
If Target.Value = "assp" Then 'si sa valeur est égale à "assp"
Range(Cells(Target.Row, "B"), Cells(Target.Row, "I")).Value = "équivalence" 'incription de "équivalence" en colonne B à I
Cells(Target.Row, "B").Validation.Delete 'supprime la dernière validation de données de la colonne B
Cells(Target.Row, "C").Validation.Delete 'supprime la dernière validation de données de la colonne C
Cells(Target.Row, "D").Validation.Delete 'supprime la dernière validation de données de la colonne D
Cells(Target.Row, "I").Validation.Delete 'supprime la dernière validation de données de la colonne I
ElseIf Target.Value = "sapat" Then 'si la cellule en A est égale à "sapat"
Range(Cells(Target.Row, "B"), Cells(Target.Row, "I")).ClearContents 'on efface toutes les valeurs des colonnes B à I
Range(Cells(Target.Row, "E"), Cells(Target.Row, "H")).Value = "Dispense" 'écriture du mot "Dispensee" sur la ligne sélectionnée en colonne "E à H"
'création des listes déroulantes (validations de données) pour OUI ou NON
With Cells(Target.Row, "B").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
With Cells(Target.Row, "C").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
With Cells(Target.Row, "I").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
Else
'Code à créer si autres propositions que "sapat" zt "assp"
End If
ElseIf Not Intersect(Target, Range("B1:B" & DerLig)) Is Nothing Then 'si la cellelue modifiée est en colonne B
If Cells(Target.Row, "A") = "sapat" Then 'si la cellule en A est égale à "sapat"
If Target.Value = "Oui" And Cells(Target.Row, "C") = "Oui" Then 'si le choix est "OUI" en colonne B et en colonne C
Cells(Target.Row, "D") = "Oui" 'alors, om met OUi dans la cellule de la colonne D
Else
Cells(Target.Row, "D") = "Non" 'sinon, on met "NON"
End If
End If
ElseIf Not Intersect(Target, Range("C1:C" & DerLig)) Is Nothing Then 'si la cellelue modifiée est en colonne C
If Cells(Target.Row, "A") = "sapat" Then 'si la cellule en A est égale à "sapat"
If Target.Value = "Oui" And Cells(Target.Row, "B") = "Oui" Then 'si le choix est "OUI" en colonne B et en colonne C
Cells(Target.Row, "D") = "Oui" 'alors, om met OUi dans la cellule de la colonne D
Range(Cells(Target.Row, "E"), Cells(Target.Row, "H")).Value = "Dispense" 'incription de "Dispense' en colonne E à H
Else
Cells(Target.Row, "D") = "Non" 'sinon, on met "NON"
End If
End If
End If
Sortie:
Application.EnableEvents = True 'autorise l'exécution de tous les évènements
End SubSi vous souhaitez reproduire tout cela sur un autre fichier, il faut copier tout ce code et le coller dans le module VBA dans la partie droite de la feuille, comme ci-dessous (ici la feuille se nomme "Feuil1")
le fichier
Si cela répond à vos attentes, veuillez passer le sujet en "RESOLU", merci.
Cdlt
Bonjour
merci pour l'explication des macros. Je vais prendre le temps de bien le relire à tête reposée et de tester l'ajout de nouvelles conditions pour voir si j'ai bien compris.
pourriez vous me préciser le code si jamais je veux écrire le mot "dispense" dans la colonne E et G seulement ? merci d'avance
Bonjour à tous,
Rechercher cette ligne dans la procédure.
Range(Cells(Target.Row, "E"), Cells(Target.Row, "H")).Value = "Dispense" 'écriture du mot "Dispensee" sur la ligne sélectionnée en colonne "E à H"Puis vous la remplacer par ceci :
Range(Cells(Target.Row, "E")).Value = "Dispense" 'écriture du mot "Dispensee" sur la ligne sélectionnée en colonne "E à H"
Range(Cells(Target.Row, "G")).Value = "Dispense" 'écriture du mot "Dispensee" sur la ligne sélectionnée en colonne "E à H"Le début de la procédure comporte des exemples pour d'autres cellules...
merci beaucoup !
Concernant le code suivant : Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non"
utilisé pour créer le menu déroulant me permettant d'avoir accès à "oui" ou "non"...qu'elle manipulation dois-je faire dans ma feuille de listes...merci d'avance
Re,
Désolé, je n'ai pas compris votre demande... soyez plus explicite.
toutes mes excuses.
Je souhaite réaliser les actions suivantes
si diplômes = sapat alors
->les cases E4 à H4 contiennent le mot dispense
->la case B4, C4 et I4 doivent permettre d'accéder au menu déroulant "oui" ou "non".
->D4 doit se remplir automatiquement
>avec "oui" si B4 et C4 sont "oui"
>avec "non" si B4 ou C4 ou les 2 sont "non"
le code suivant, qu'Arturo83 a écrit dans le document qu'il m'a envoyé, me permet d'avoir le menu déroulant.
With Cells(Target.Row, "B").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non"
.ShowInput = True
.ShowError = False
End With
Dans ce document il y a 2 feuilles: celle avec le tableau et l'autre contenant les listes (oui, non / dispense, équivalence, acquis promo antérieure / etc...)
Lorsque je recopie ce code dans mon document final cela ne me propose pas le menu déroulant. Y a t'il une étape à réaliser avec la feuille "listes"?
J'espère être plus claire. Merci d'avance
Dans la feuille "Liste", il faut créer les zones de noms:
Pour OUI/NON:
Sélectionnez la plage de cellules A1:A2, puis dans la zone de noms, à gauche de la zone de formule, saisissez "Oui_Non" et validez avec la touche "ENTREE"
Pour les compétences:
Sélectionnez la plage de cellules B1:B3, puis dans la zone de noms, à gauche de la zone de formule, saisissez "Competences" et validez avec la touche "ENTREE"
pour les diplômes:
Sélectionnez la plage de cellules C1:C4, puis dans la zone de noms, à gauche de la zone de formule, saisissez "Dip̂lomes" et validez avec la touche "ENTREE"
Ne mettez pas d'accents dans les noms que vous donnerez.
Merci beaucoup à vous deux
j'ai réussi à élaborer le code pour plusieurs configurations. Je vais continuer de tester et de l'agrémenter, je reviendrais si je me retrouve bloquée.
Bonsoir
je me permet de revenir vers vous car je rencontre une difficultés pour exploiter le codage de la situation suivante :
->E doit se remplir automatiquement
>avec "oui" si B, C et D sont "oui"
>avec "non" si au moins l'une des 3 cases précédentes est non.
- J'ai le codage suivant (réalisé par Arturo83, merci beaucoup encore pour la traduction du codage, cela m'a grandement aidé) lorsqu'il n'y avait que 2 cases (B et C) à faire rentrer dans la décision (qui se trouvait alors en colonne D) mais maintenant avec 3 cases je n'y arrive pas.
- ElseIf Not Intersect(Target, Range("B1:B" & DerLig)) Is Nothing Then
- If Cells(Target.Row, "A") = "sapat" Then
- If Target.Value = "Oui" And Cells(Target.Row, "C") = "Oui" Then
- Cells(Target.Row, "D") = "Oui"
- Else
- Cells(Target.Row, "D") = "Non"
- End If
- End If
- ElseIf Not Intersect(Target, Range("C1:C" & DerLig)) Is Nothing Then
- If Cells(Target.Row, "A") = "sapat" Then
- If Target.Value = "Oui" And Cells(Target.Row, "B") = "Oui" Then
- Cells(Target.Row, "D") = "Oui"
- Else
- Cells(Target.Row, "D") = "Non"
- End If
- End If
- ElseIf Not Intersect(Target, Range("B1:B" & DerLig)) Is Nothing Then
Merci d'avance
Bonjour,
Un peu confus, on ne sait plus si en E on doit mettre "Dispense " ou "Oui/Non"
Alors j'ai fait ceci: lorsque vous sélectionnerez "sapat", E et G contiendront "Dispense", puis au fur et à mesure que vous sélectionnerez "Oui" ou "Non" dans B et C, D et E afficheront "Oui" ou "Non". Cela vous convient-il? Faites des essais avant de répondre.
Si vous ne souhaitez pas que s'affiche "Dispense" en E, mettez une apostrophe devant la ligne suivante, sinon laissez telle quelle.
Cells(Target.Row, "E").Value = "Dispense" 'écriture du mot "Dispense" sur la ligne sélectionnée en colonne "E"**********************************************************************************************
Le code complet:
Option Compare Text 'permet de ne pas faire de distinction avec les valeurs en minuscules ou en majuscules
Private Sub Worksheet_Change(ByVal Target As Range) 'macro évènementielle qui réagit aux changements de valeurs dans la feuille
Dim DerLig As Long 'création d'une variable pour désigner la dernière ligne du tableau
On Error GoTo Sortie ' en cas d'erreur, on se dirige vers la sortie
Application.EnableEvents = False 'empêche l'exécution de tout autre évènement pendant le déroulement de la macro
Application.ScreenUpdating = False 'désactive l'actualisation de l'affichage et augmente la vitesse d'exécution de la macro
DerLig = Range("A" & Rows.Count).End(xlUp).Row 'Recherche de la dernière ligne du tableau
If Not Intersect(Target, Range("A1:A" & DerLig)) Is Nothing Then 'si la cellule modifiée est en colonne A
If Target.Value = "assp" Then 'si sa valeur est égale à "assp"
Range(Cells(Target.Row, "B"), Cells(Target.Row, "I")).Value = "équivalence" 'inscription de "équivalence" en colonne B à I
Cells(Target.Row, "B").Validation.Delete 'supprime la dernière validation de données de la colonne B
Cells(Target.Row, "C").Validation.Delete 'supprime la dernière validation de données de la colonne C
Cells(Target.Row, "I").Validation.Delete 'supprime la dernière validation de données de la colonne I
ElseIf Target.Value = "sapat" Then 'si la cellule en A est égale à "sapat"
Range(Cells(Target.Row, "B"), Cells(Target.Row, "I")).ClearContents 'on efface toutes les valeurs des colonnes B à I
Cells(Target.Row, "E").Value = "Dispense" 'écriture du mot "Dispense" sur la ligne sélectionnée en colonne "E"
Cells(Target.Row, "G").Value = "Dispense" 'écriture du mot "Dispense" sur la ligne sélectionnée en colonne "G"
'création des listes déroulantes (validations de données) pour OUI ou NON sur les colonnes B, C et I
With Cells(Target.Row, "B").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
With Cells(Target.Row, "C").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
With Cells(Target.Row, "I").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
Else
'Code à créer si autres propositions que "sapat" et "assp"
End If
ElseIf Not Intersect(Target, Range("B1:B" & DerLig)) Is Nothing Then 'si la cellule modifiée est en colonne B
If Cells(Target.Row, "A") = "sapat" Then 'si la cellule en A est égale à "sapat"
If Target.Value = "Oui" And Cells(Target.Row, "C") = "Oui" Then 'si le choix est "OUI" en colonne B et en colonne C
Cells(Target.Row, "D") = "Oui" 'alors, on met OUI dans la cellule de la colonne D
Cells(Target.Row, "E") = "Oui" 'alors, on met OUI dans la cellule de la colonne E
Else
Cells(Target.Row, "D") = "Non" 'sinon, on met "NON"
Cells(Target.Row, "E") = "Non" 'sinon, on met "NON"
End If
End If
ElseIf Not Intersect(Target, Range("C1:C" & DerLig)) Is Nothing Then 'si la cellule modifiée est en colonne C
If Cells(Target.Row, "A") = "sapat" Then 'si la cellule en A est égale à "sapat"
If Target.Value = "Oui" And Cells(Target.Row, "B") = "Oui" Then 'si le choix est "OUI" en colonne B et en colonne C
Cells(Target.Row, "D") = "Oui" 'alors, on met OUI dans la cellule de la colonne D
Cells(Target.Row, "E").Value = "Oui" 'écriture du mot "Oui" sur la ligne sélectionnée en colonne "E"
Cells(Target.Row, "G").Value = "Dispense" 'écriture du mot "Dispense" sur la ligne sélectionnée en colonne "G"
Else
Cells(Target.Row, "D") = "Non" 'sinon, on met "NON"
Cells(Target.Row, "E") = "Non" 'sinon, on met "NON"
End If
End If
End If
Sortie:
Application.EnableEvents = True 'autorise l'exécution de tous les évènements
End SubCdlt
Bonjour
merci encore d'avoir pris le temps de me répondre.
Je comprends la confusion, mais je n'ai plus besoin de l'insertion du mot dispense.
J'ai testé le code et cela ne convient pas :
- B, C et D sont sélectionnée manuellement par l'utilisateur (qui choisit le oui ou le non). Il ne faut pas que D se remplisse automatiquement.
- Seule la colonne E se remplie seule (avec un oui si les 3 autres contiennent un oui / avec un non si au moins l'une des 3 cases est un non).
en gros il me faudrait l'équivalent de cette formule =SI(ET(B4="oui";C4="oui";D4="oui");"oui";"non") qui se trouve dans la colonne E.
->E doit se remplir automatiquement
>avec "oui" si B, C et D sont "oui"
>avec "non" si au moins l'une des 3 cases précédentes est non.
Merci encore. je continue de cherche de mon côté.
- B, C et D sont sélectionnée manuellement par l'utilisateur (qui choisit le oui ou le non). Il ne faut pas que D se remplisse automatiquement.
pourtant, vous aviez bien écrit:
->la case B4, C4 et I4 doivent permettre d'accéder au menu déroulant "oui" ou "non".
->D4 doit se remplir automatiquement
************************************************************************************************************************************
le nouveau code:
Option Compare Text 'permet de ne pas faire de distinction avec les valeurs en minuscules ou en majuscules
Private Sub Worksheet_Change(ByVal Target As Range) 'macro évènementielle qui réagit aux changements de valeurs dans la feuille
Dim DerLig As Long 'création d'une variable pour désigner la dernière ligne du tableau
On Error GoTo Sortie ' en cas d'erreur, on se dirige vers la sortie
Application.EnableEvents = False 'empêche l'exécution de tout autre évènement pendant le déroulement de la macro
Application.ScreenUpdating = False 'désactive l'actualisation de l'affichage et augmente la vitesse d'exécution de la macro
DerLig = Range("A" & Rows.Count).End(xlUp).Row 'Recherche de la dernière ligne du tableau
If Not Intersect(Target, Range("A1:A" & DerLig)) Is Nothing Then 'si la cellule modifiée est en colonne A
If Target.Value = "assp" Then 'si sa valeur est égale à "assp"
Range(Cells(Target.Row, "B"), Cells(Target.Row, "I")).Value = "équivalence" 'inscription de "équivalence" en colonne B à I
Cells(Target.Row, "B").Validation.Delete 'supprime la dernière validation de données de la colonne B
Cells(Target.Row, "C").Validation.Delete 'supprime la dernière validation de données de la colonne C
Cells(Target.Row, "I").Validation.Delete 'supprime la dernière validation de données de la colonne I
ElseIf Target.Value = "sapat" Then 'si la cellule en A est égale à "sapat"
Range(Cells(Target.Row, "B"), Cells(Target.Row, "I")).ClearContents 'on efface toutes les valeurs des colonnes B à I
Cells(Target.Row, "G").Value = "Dispense" 'écriture du mot "Dispense" sur la ligne sélectionnée en colonne "G"
'création des listes déroulantes (validations de données) pour OUI ou NON sur les colonnes B, C et I
With Cells(Target.Row, "B").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
With Cells(Target.Row, "C").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
With Cells(Target.Row, "D").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
With Cells(Target.Row, "I").Validation
.Delete 'supprime la dernière validation de données
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Oui_Non" 'ajoute la validation de données "OUI" et "NON"
.ShowError = False 'autorise les saisies autres que "oui" ou "Non"
End With
Else
'Code à créer si autres propositions que "sapat" et "assp"
End If
ElseIf Not Intersect(Target, Range("B1:B" & DerLig)) Is Nothing Then 'si la cellule modifiée est en colonne B
If Cells(Target.Row, "A") = "sapat" Then 'si la cellule en A est égale à "sapat"
If Target.Value = "Oui" And Cells(Target.Row, "C") = "Oui" And Cells(Target.Row, "D") = "Oui" Then 'si le choix est "OUI" en colonnes B, C et D
Cells(Target.Row, "E") = "Oui" ' alors on met "Oui" en colonne E
Else
Cells(Target.Row, "E") = "Non" 'sinon, on met "NON"
End If
End If
ElseIf Not Intersect(Target, Range("C1:C" & DerLig)) Is Nothing Then 'si la cellule modifiée est en colonne C
If Cells(Target.Row, "A") = "sapat" Then 'si la cellule en A est égale à "sapat"
If Target.Value = "Oui" And Cells(Target.Row, "B") = "Oui" And Cells(Target.Row, "D") = "Oui" Then 'si le choix est "OUI" en colonnes B, C et D
Cells(Target.Row, "E").Value = "Oui" 'écriture du mot "Oui" sur la ligne sélectionnée en colonne "E"
Else
Cells(Target.Row, "E") = "Non" 'sinon, on met "NON"
End If
End If
ElseIf Not Intersect(Target, Range("D1:D" & DerLig)) Is Nothing Then 'si la cellule modifiée est en colonne C
If Cells(Target.Row, "A") = "sapat" Then 'si la cellule en A est égale à "sapat"
If Target.Value = "Oui" And Cells(Target.Row, "B") = "Oui" And Cells(Target.Row, "C") = "Oui" Then 'si le choix est "OUI" en colonnes B, C et D
Cells(Target.Row, "E").Value = "Oui" 'écriture du mot "Oui" sur la ligne sélectionnée en colonne "E"
Else
Cells(Target.Row, "E") = "Non" 'sinon, on met "NON"
End If
End If
End If
Sortie:
Application.EnableEvents = True 'autorise l'exécution de tous les évènements
End SubCdlt
je comprends la confusion, le post envoyé hier était bien celui-ci...
->E doit se remplir automatiquement
>avec "oui" si B, C et D sont "oui"
>avec "non" si au moins l'une des 3 cases précédentes est non.
j'aurais dû préciser qu'il annulait le code précédant...désolée...
Cela fonctionne en tout cas, merci beaucoup.