Menu déroulant actualisé en fonction donnée saisie

Bonjour

en faisant un essai par recherche v et indirect equiv je n'arrive pas à mon besoin

une macro à mon sens s'impose mais échec , merci par avance à ceux qui pourront m'aider

voici mon besoin il est double

1er temps : création d'un menu déroulant actualisé

sous l'onglet "demande " un tableau de donnée ou figure les demandes d'un remplacement .

J'aimerais générer en colonne N un menu déroulant proposant les personnes disponibles pour la "date besoin" indiquée en colonne D

La disponibilité des personnes est incrémentée dans l'onglet "Planning " par la lettre N.

2 ieme temps saisie des données permettant d'avoir un menu déroulant actualisé

une fois que le choix a été fait dans le menu déroulant exemple en N2 = nom 03 que dans l'onglet "planning" nous ayons une mise à jour de la ligne correspondante à la date et le nom choisi que N soit Remplacé par la donnée contenu dans colonne I "service pour cette exemple avoir l'information en I2 incrémenté en D2 de l'onglet planning soit "AAA"

cela peut être à la fermeture du dossier

merci de votre aide

7nuit-test.xlsm (171.96 Ko)

Bonjour Ohua, bonjour le forum,

Une proposition pour le premier problème :

Public Sub Macro1()
Dim OD As Worksheet
Dim OP As Worksheet
Dim TVP As Variant
Dim TVD As Variant
Dim I As Integer
Dim J As Integer
Dim DA As Date
Dim DB As Date
Dim L As String

Set OD = Worksheets("demande")
Set OP = Worksheets(" Planning")
TVD = OD.Range("A1").CurrentRegion
TVP = OP.Range("A1").CurrentRegion
For I = 2 To UBound(TVD, 1)
    L = ""
    DA = DateSerial(Year(TVD(I, 4)), Month(TVD(I, 4)), Day(TVD(I, 4)))
    For J = 2 To UBound(TVP, 1)
      DB = DateSerial(Year(TVP(J, 2)), Month(TVP(J, 2)), Day(TVP(J, 2)))
      If DB = DA And UCase(TVP(J, 7)) = "OUI" Then L = IIf(L = "", TVP(J, 3), L & "," & TVP(J, 3))
    Next J
    If L <> "" Then
        With OD.Cells(I, "N").Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:=L
        End With
    End If
Next I
End Sub

Pour le second je n'ai pas compris : pour cette exemple avoir l'information en I2 incrémenté en D2 de l'onglet planning soit "AAA"

cela peut être à la fermeture du dossier.

J'attends des informations pour continuer...

merci Thau theme

merci pour cette aide précieuse c'est effectivement cela que je cherche .

le deuxième point je vais essayer d'être plus explicite , il est nécessaire d’avoir des données avant chaque saisie dans la colonne N , a savoir ne plus mobiliser une personne déjà indiquer dans la colonne N

pour Cela après réflexion c'est peut être au début de votre macro

peut on regarder dans onglet "Demande "si donnée existant dans la colonne N exemple N2 =nom 05.

sur la même ligne je connais la date D2 et le nom du service I2.

dans onglet "Planning"

mettre à jour la donnée correspondant à la date D 2 et au nom de la personne N2 donc en D 4 en remplaçant par le contenu de I2 N par "AAA"

ainsi au lancement de la macro1 nous n'aurons que le nom des personnes ne contenant par N n'ayant pas été mobilisé et nous saurons aussi sur ce tableau le nom du service ou la personne est mobilisé à une date donnée

peut on lancer l'ensemble de la macro complète suite à chaque donnée dans une cellule de la colonne N dans l'onglet demande pour ainsi avoir une donnée actualisée

par avance merci

7nuit-test-2.xlsm (175.02 Ko)

Re,

je n'ai pas ouvert le second fichier car il y a un problème... Pour le point 2, ce code événementiel à placer dans le composant de l'onglet demande :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DA As Date
Dim OP As Worksheet
Dim TVP As Variant
Dim S As String
Dim I As Integer
Dim DB As Date

If Target.Column <> 14 And Target.Row = 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub
DA = DateSerial(Year(Cells(Target.Row, 4)), Month(Cells(Target.Row, 4)), Day(Cells(Target.Row, 4)))
Set OP = Worksheets(" Planning")
TVP = OP.Range("A1").CurrentRegion
S = Cells(Target.Row, "I")
Set OP = Worksheets(" Planning")
TVP = OP.Range("A1").CurrentRegion
For I = 2 To UBound(TVP, 1)
    DB = DateSerial(Year(TVP(I, 2)), Month(TVP(I, 2)), Day(TVP(I, 2)))
    If TVP(I, 3) = Target.Value And DA = DB Then
        OP.Cells(I, "D").Value = S
        Exit Sub
    End If
Next I
End Sub

merci Thau thème de cette aide précieuse

1) en ce qui concerne la première macro , pour qu'elle soit automatisée

est ce exact de la positionner dans l'onglet planning et de commencer la macro par

Private Sub Worksheet_Change(ByVal Target As Range)

2) deuxieme macro génial , en testant je peux avoir une modification du nom dans l'onglet demande

est il possible de vérifier quand nous avons un nom et un clic sur la cellule avoir un message "attention êtes vous sur de vouloir changer de nom? la réponse oui aurait pour action (revenir à la donnée initiale) d'incrémenter N dans le planning en fonction du nom sélectionné et de la date correspondante de l'onglet demande et effacer le contenu de la cellule sélectionnée

merci sincèrement de votre aide

5nuit-test3.xlsm (186.80 Ko)

Re,

Après plusieurs essais infructueux j'abandonne... Je n'arrive pas à écrire un code cohérent et efficace. Désolé.

Doublon effacé...

merci Thau thème

je vais essayé d'aller de construire avec tout cela

ohua

Rechercher des sujets similaires à "menu deroulant actualise fonction donnee saisie"