Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Alimenter une combobox selon critère après avoir double cliqué sur une feuille

ndjobbo

XLDnaute Nouveau
Voila ma problématique:
J'ai une feuille "Sem Impaire" qui représente la répartition hebdomadaire des personnels dans un bloc opératoire sur plusieurs salles. J'ai pu codé ceci: Lorsque je double clic sur une cellule devant accueillir le nom de l'agent affecté à cette salle, un formulaire s'ouvre... il comporte une combobox et 2 boutons (enregistrer et annuler). La combobox doit afficher la liste déroulante des agents pouvant exercer dans ladite salle (cela dépend de la spécialisation des agents). Ex: les agents pouvant être affectés à la salle n°3 doivent être spécialisés en obstétrique. Donc quand je double clic sur la salle 3, le formulaire qui s'ouvre doit afficher uniquement la liste des agents spécialisés en obstétrique... Ces informations sont stockées dans un tableau structuré dans la feuille "équipe".

Aujourd’hui, ma combobox reste vide même quand je code un form_initialize comportant une boucle combobox.additem = range("tableau").value tenant compte du critère obstétrique=true.

Avez vous une idée pour solutionner mon problème?
En PJ le fichier.

Merci d'avance.
 

Pièces jointes

  • Feuille Semaine V3.4 Vidé.xlsm
    641.6 KB · Affichages: 7

ndjobbo

XLDnaute Nouveau
Oups!
Corrige cette ligne dans mon module

If Not flag Is Nothing And flag.Address <> cel.Address Then
Ça marche nickel... Merci pour ton aide.

Et sinon, juste pour ma culture personnelle, c'était pas possibe de charger une combobox selon critere et de passer le choix à la cellule d'appel de la feuille? Parce que j'ai essayé plein de variantes et rein à faire, la combobox est toujours vide quand le formulaire s'affiche...
 

sousou

XLDnaute Barbatruc
Pas bien compris !
Ce que j'avais fait, ( première version) était bien de gérer le validations en fonction du critère de spécialités,
mais le problème est de savoir quel agent à cette spécialité voir message précédent.
en utilisant ma première version, il faudrait avoir un tableau ( feuille équipe) avec tout les agents en ligne, toutes les spécialités en colonne et indiquer vrai ou faux aux intersections ligne colonnes
il resterai à gérer la double affectation
 

ndjobbo

XLDnaute Nouveau
Oui je pensais faire des tests en partant de tes 2 premières versions du fichier. En tout cas merci beaucoup pour ton aide.
 

ndjobbo

XLDnaute Nouveau
Encore une petite question quant à la ligne:

Set flag = Columns(cel.Column).Rows.Find(cel.Value))

que jai transformée en:

Set flag = Columns(cel.Column).Rows.Find(cel.Value, , , , , xlNext) pour voir.

Si je remplis ma feuille en commençant par le haut, ça fonctionne super... Mais si je veux re-modifier un choix en amont de ma sélection actuelle (d’où ma modification pour voir), ça ne fonctionne pas...
J'ai bien vu que la méthode Find comportait plein de paramètres optionnels dont le xlNext et le xlPrevious.
J'ai tenté un:

Set flag2 = Columns(cel.Column).Rows.Find(cel.Value, , , , , xlPrevious)

Dont le code complet donne:




Sub interdire(cel)

Set flag = Columns(cel.Column).Rows.Find(cel.Value, , , , , xlNext)
Set flag2 = Columns(cel.Column).Rows.Find(cel.Value, , , , , xlPrevious)

If Not flag Is Nothing And flag.Address <> cel.Address Then
MsgBox cel & " est déjà affecté dans la salle " & flag.Parent.Cells(flag.Row - 1, 3) & " (" & flag.Parent.Cells(flag.Row - 1, flag.Column) & ")"
cel = ""
ElseIf Not flag2 Is Nothing And flag2.adress <> cel.adress Then
MsgBox cel & " est déjà affecté dans la salle " & flag2.Parent.Cells(flag2.Row - 1, 3) & " (" & flag2.Parent.Cells(flag2.Row - 1, flag2.Column) & ")"
cel = ""
End If

End Sub



et j'obtiens une erreur 438: Propriété ou méthode non gérée par cet objet.
Le débogage m'envoie à la ligne

ElseIf Not flag2 Is Nothing And flag2.adress <> cel.adress Then

Je m'y suis mal pris mais je sais pas ou ça pèche.
 

sousou

XLDnaute Barbatruc
bonjour
essaie ainsi
Set flag = Columns(cel.Column).Rows.Find(cel.Value, cel.Parent.Cells(1, cel.Column))
l'argument after, précise par quelle cellule on commence à chercher, ainsi on commence par la ligne 1
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…