Autres positionner une valeur selon 2 listes déroulantes

Sirberthoult

XLDnaute Occasionnel
Bonjour le forum,

aprés recherche je ne trouve pas de solution...

j'ai une liste qui varie entre 2 valeurs (alpha, bravo ) ou 3 valeurs (alpha, bravo, charlie)
et j'ai 2 cellules distincte avec menu déroulant qui ont en source tout les 2 cette même liste.

je souhaiterai qu'en selectionnant une valeur dans le premier menu déroulant, le deuxieme menu déroulant prenne la valeur restante dans le cas ou la liste n'a que 2 valeurs.
Tout en gardant la possibilité de modifier tout de même la valeur du deuxieme menu déroulant. dans ce cas c'est à son tour le premier menu déroulant qui change de valeur. bref jamais les 2 menus déroulants ont la même valeur.

dans le cas ou la liste contient 3 valeurs, alors le fait d'en choisir une dans le premier menu déroulant, ne change rien dans le deuxieme menu déroulant ( puisqu'il reste 2 valeurs possible)

merci d'avance pour votre aide.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :),

Pour ce que j'en ai compris :
  • la liste de validation des deux cellules est la même
  • cette liste comporte 2 ou 3 éléments

Si la liste comporte 2 éléments :
  • si on change la valeur d'une cellule, l'autre cellule prend l'autre valeur
  • si on efface la valeur d'une cellule, la valeur de l'autre cellule reste inchangée

La liste de validation peut-être en ligne, en colonne ou bien littérale.

Le code est dans le module de la feuille "Feuil1" :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim un As Range, deux As Range, form1, xrg As Range, x, n&, s(0 To 1), v
   On Error GoTo FIN:
   If Target.Count > 1 Then Exit Sub
   If Target.Address <> [c2].Address And Target.Address <> [e2].Address Then Exit Sub
   If Target.Address = [c2].Address Then Set un = [c2]: Set deux = [e2]
   If Target.Address = [e2].Address Then Set un = [e2]: Set deux = [c2]
   If un.Value = "" Then Exit Sub
   form1 = Target.Validation.Formula1
   If Left(form1, 1) = "=" Then
      Set xrg = Range(Mid(form1, 2))
      If xrg.Count <> 2 Then Exit Sub
      For Each x In xrg.Value: s(n) = x: n = n + 1: Next
   Else
      v = Split(form1, Application.International(xlListSeparator))
      If UBound(v) - LBound(v) + 1 <> 2 Then Exit Sub
      s(0) = v(0): s(1) = v(1)
   End If
   Application.EnableEvents = False: deux.Value = IIf(un.Value = s(0), s(1), s(0))
FIN:
   Application.EnableEvents = True
End Sub
 

Pièces jointes

  • Sirberthoult- liste validation exclusive- v1.xlsm
    18.5 KB · Affichages: 4

Sirberthoult

XLDnaute Occasionnel
Bonjour le forum, sylvanu, mapomme,

merci de votre intérêt à mon problème...

mapomme, merci pour ta contribution, tu as bien compris mes explications.
j'ai testé dans mon fichier et cela fonctionne très bien !
seul hic, je ne pensais pas que cela soit si copieux à reproduire, et j'ai besoin que cela s'applique sur plusieurs colonnes...

je joint mon fichier:
cela ce passe dans l'onglet "sectorisation"
je souhaite que cela fonctionne entre les menus déroulants des colonnes "matin" des secteur rouge et bleu.
et de aussi entre les colonnes "après midi" des 2 secteur également...pour chaque jours !

merci d'avance pour ce nouveau coup de pouce...
 

Pièces jointes

  • Planning_exemple 5.xlsm
    36.4 KB · Affichages: 3

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

En espérant avoir bien compris,
je souhaite que cela fonctionne entre les menus déroulants des colonnes "matin" des secteur rouge et bleu.
et de aussi entre les colonnes "après midi" des 2 secteur également...pour chaque jours !
voir le fichier joint.
 

Pièces jointes

  • Sirberthoult- liste validation exclusive- v2.xlsm
    36.4 KB · Affichages: 6

Sirberthoult

XLDnaute Occasionnel
Bonjour le forum, Bonjour ma pomme

je me permet de revenir pour une demande d'évolution...

le code de mapomme est nikel notamment quand j'ai 2 agents dispo pour un poste lors d'une journée donnée. (exemple: d'apres midi de n'importe quel journée: je choisi 1 agent en secteur bleu et l'autre se met tout seul en secteur rouge) fichier joint.

mais voila que parfois, j'ai 3 agents (souvent le matin), j'ai donc rajouté une troisiéme colonne (du matin) appelé volant.

pourrais t'on faire evoluer le code pour que :

- si je choisi 1 agent en secteur bleu, puis 1 autre agent en secteur rouge, alors le troisiéme se met seul en secteur volant .

- si finalement je veux modifier, si par exemple je remplace l'agent du secteur rouge par celui en secteur bleu, alors les 2 agents concernés s'inverse.

- que la version précédente avec 2 agents fonctionne toujours de la même facon.


merci d'avance.
 

Pièces jointes

  • Sectorisation 2 (1).xlsm
    39.4 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 213
Messages
2 086 307
Membres
103 174
dernier inscrit
OBUTT