Microsoft 365 Test si existe sur 3 Valeurs

eric72

XLDnaute Accro
Bonjour à tous,
Je fais une nouvelle fois appel à votre savoir.
J'ai un userform (usfAjoutPlanning)qui me permet d'ajouter de nouveaux chantiers (de Bdd) à un planning(Hebdo), lorsque j'ajoute un chantier j'aimerais avoir message si toutefois un des poseurs a déjà été affecté à un autre chantier le même jour dans la même tranche horaire, est-ce possible avec quelque chose du genre vlookup d'une application.match, si oui avez-vous une idée pour le formaliser? (ça n'est peut être pas la bonne piste!!!)
Merci une nouvelle fois pour votre aide ô combien précieuse...
Eric
 

Pièces jointes

  • My Planning TEST.xlsm
    273.1 KB · Affichages: 9

eric72

XLDnaute Accro
Bonjour à tous,
Oh la la je suis vraiment nul, voilà après quelques heures de réflexion une solution:
Z2 = Application.IfError(Application.Match(TxtDateDebut, .Range.Columns(39), 0), 0) And _
Application.IfError(Application.Match(CbPoseur, .Range.Columns(2), 0), 0) And _
Application.IfError(Application.Match(TxtHeure, .Range.Columns(40), 0), 0)
If Z2 <> 0 Then MsgBox "ATTENTION" & " " & CbPoseur & " " & "est déjà affecté à un chantier" & " " & "le" & " " & "à" & TxtHeure & " " & "veuillez modifier la date et/ou heure": Vidange: Exit Sub
Bonne journée à tous les passionnés (et aux autres aussi)
 

Dranreb

XLDnaute Barbatruc
Bonjour
Ça ne me semble pas bon: ça va combiner bit à bit les numéros de lignes, pouvant être différents, où auront été trouvées les 1ères occurrences de chacun des 3 critères, mais ça peut par hasard correspondre à quelque chose de différent de 0.
Personnellement je ne fais pas de recherche dans les bases à mettre à jour par UserForm. J'utilise des ComboBox gérées automatiquement par un objet ComboBoxLiées. Je propose de nombreux exemples d'utilisation des modules de service définissant cet objet. Si la combinaison des ComboBox qu'on lui a confié existe, ça oriente automatiquement, au lieu d'un ajout, vers une modification de ligne existante, dont l'objet fournit le numéro de ligne à l'UserForm via un évènement. Mais de toute façon votre problème me semble plus compliqué parce que le poseur peut être occupé ailleurs plusieurs jours commençant plus tôt …
 

eric72

XLDnaute Accro
Bonjour Dranreb,
Merci pour votre réponse, en effet cela fonctionne quand le tableau est quasiment vide, ensuite il ne fait référence qu'à la premiere ligne du poseur trouvé, et donc ça ne fonctionne pas.
J'enlève donc le "Résolu" au cas ou quelqu'un ait une idée.
Bien complique comme problème!!!
Merci
Eric
 

Dranreb

XLDnaute Barbatruc
Il pourrait être intéressant, pour détecter ces doublons, de travailler plutôt avec une base ayant une ligne pour chaque matin et après midi de chaque poseur, quitte à pouvoir en tirer des rapports par poseurs et par chantiers avec date/heure début et fin.
 

Dranreb

XLDnaute Barbatruc
Il n'y a pas à les déchiffrer, juste connaître ses évènements, méthodes et propriétés. Il y a une page d'aide qui les décrit tous dans le classeur CBxLCtlA.xslm disponible en téléchargement et précurseur d'un .xlam autoinstallable.
Cette fonction pourrait vous intéresser :
VB:
Function TLgnPériode(ByVal DatHDébut As Date, ByVal DatHFin As Date) As Long()
   Dim TDon(), L As Long, TLgn() As Long, N As Long
   TDon = Feuil2.ListObjects(1).DataBodyRange.Resize(, 5).Value
   ReDim TLgn(1 To UBound(TDon, 1))
   For L = 1 To UBound(TDon, 1)
      If TDon(L, 3) <= DatHFin And TDon(L, 5) >= DatHDébut Then N = N + 1: TLgn(N) = L
      Next L
   If N > 0 Then ReDim Preserve TLgn(1 To N) Else ReDim TLgn(0 To 0)
   TLgnPériode = TLgn
   End Function
Elle devrait donner la liste des numéros des lignes dont la période mordrait sur une période spécifiée. Or un ComboBoxLiées est muni d'une méthode FiltrerLignes qui admet justement en argument une telle liste de numéros de lignes. Méthode AfficherTout pour la désactiver.
 

eric72

XLDnaute Accro
Comme je l'ai dit précédemment je suis inexpérimenté et je n'arriverais pas à adapter ce que vous me proposez, je progresse au faire et à mesure du temps mais je suis encore à des années lumière de comprendre ce que vous me proposez
 

Dranreb

XLDnaute Barbatruc
Procédez par étapes en commençant par acquérir les bases qui vous manquent.
Posez moi les questions dans l'ordre où vous rencontrez mes éléments de propos que vous ne comprenez pas.
Ce n'est quand même pas difficile: 99% du besoin se définit dans la Sub UserForm_Initialize, tout le reste ne sont que des procédure généralement petites qui l'exploitent à fond. Si vous ne saurez comment écrire certaines je vous les ferai, pas de problème.
 

eric72

XLDnaute Accro
En fait j'arrive à comprendre à "peu près" la methode pour alimenter avec la base avec les combobox plutôt que de passer par des listbox, ce que je n'arrive pas à visualiser c'est la manière pour tester si un poseur à déjà été affecté à un autre chantier avec cette méthode, je vous remercie beaucoup mais je crois que je pars de trop loin!!!
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin