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

Microsoft 365 Base de donnée double

tabernake

XLDnaute Nouveau
Bonjour tous le monde,

Je bosse actuellement sur une macro vba, je resté bloqué sur un point, j'ai 2 bases de données représentant chacune une feuille du fichier (En pièce jointe)
Tbb = feuille "besoin"
Tbs = feuille "Session"

Selon l'OptionButton appuyé une action est effectué, si c'est le 2, alors on affiche que les sessions avec plus de 1 places et ceux qui sont après la date d'aujourd'hui.
Si c'est le bouton 1, alors j'aimerai qu'on vérifie les mêmes conditions qu'avant, avec aussi la condition que les stages affichés corresponde au nom inscrit dans le ComboBox1, comme ça dans le cas ici, ça affichera que les stages correspondant au manager ou service selectionné.

VB:
   For i = LBound(Tbs) To UBound(Tbs)

[COLOR=rgb(97, 189, 109)]    If OptionButton2.Value = True Then
     If Tbs(i, 3) <> "0" And Tbs(i, 2) > Date Then
            
                Me.ListBox1.AddItem Tbs(i, 1)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Left(Tbs(i, 2), 10)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Tbs(i, 3)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Tbs(i, 4)
     End If
    End If[/COLOR]
    'Stop
[COLOR=rgb(44, 130, 201)]    If OptionButton1.Value = True Then
      If Tbs(i, 3) <> "0" And Tbs(i, 2) > Date Then

               Me.ListBox1.AddItem Tbs(i, 1)
               Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Left(Tbs(i, 2), 10)
               Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Tbs(i, 3)
               Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Tbs(i, 4)

      End If
    End If[/COLOR]
Next i

(Code extrait du bloc "ComboBox1_Change()" La partie en verte est fonctionnelle (en haut), celle en bleu est celle à modifé selon moi(en bas))

Cependant je n'arrive pas à faire intervenir cette deuxième base de donnée, j'ai testé d'imbriquer des "For", pour mettre en place tbs et tbb, cependant cela ne fonctionnée pas, car cela m'affiche dans la listbox 5x les stages.

Mon idée serait de :
1) Dans le tbb, selectionné toutes lignes correspondant au manager / service selectionné dans le combobox1
2) Stocké ces lignes temporairement
3) Vérifier si un ligne correspond a un stage de la feuille session, si oui, on affiche la session dans la listbox1, si non passé a la ligne stocké suivante

Je n'arrive pas à mettre cette idée en place

Le but final etant :
Selectionner que les stages de la feuille session, qui corresponde au besoin du manager/service de la feuille besoin.

Je vous remercie d'avance,
Bien cordialement,
 

Pièces jointes

  • Forum.xlsm
    195.2 KB · Affichages: 27

i20100_

XLDnaute Nouveau
Bonjour,

j'ai ajouté une condition pour vérifier la présence du Stage sur l'onglet "Besoin"

VB:
   For i = LBound(Tbs) To UBound(Tbs)

    If OptionButton2.Value = True Then
     If Not IsError(Application.Match(Tbs(i, 1), Sheets("Besoin").Columns(3), 0)) Then a = 1'<---------------
     If Tbs(i, 3) <> "0" And Tbs(i, 2) > Date And a = 1 Then '<---------------
            
                Me.ListBox1.AddItem Tbs(i, 1)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Left(Tbs(i, 2), 10)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Tbs(i, 3)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Tbs(i, 4)
     End If
     a = 0  '<---------------
    End If
 

tabernake

XLDnaute Nouveau
Bonjour à vous,

Pour donner plus de précision :
La partie OptionButton 2 est fonctionnelle, car c'est la partie qui gère l'affichage de toute les sessions (les seules conditions étant celle de date et de places disponibles)
La partie OptionButton 1 est celle qui gère les mêmes conditions + la condition du besoin

Je vais faire une explication du userform :
1) On dit si on va choisir un manager ou un service
2) Par défaut, le bouton "Afficher tout" est coché
3) On sélectionne le manager ou le service
4) Ensuite cela affiche tout les sessions répondant au condition du Button 2

2 bis) On coche le bouton "Afficher les sessions avec un besoin"
3 bis) On sélectionne le manager ou le service
4 bis) Cela affiche tout les sessions répondant au condition du Button 1

- Comment peut-on répondre à "Afficher uniquement les sessions avec au moins un besoin émis et non utilisé?"
Dans la feuille besoin, la colonne 3 est un stage, la 4 et 5 est un manager et un service.
Lorsqu'on appuie sur l'OptionButton1, on souhaite que les stages affiché dans la ListBox1, corresponde au besoin du manager/service sélectionné dans la ComboBox1.

Je reste toujours disponible pour d'autres informations.
Je m'en vais essayer la solution que vous avez proposé i20100_

Merci d'avance
 

cp4

XLDnaute Barbatruc
Il est où le bouton "afficher tout".
Il me semble que le code de @i20100_ , Fonctionne. C'est à toi de nous dire s'il renvoie les résultats escomptés.

A+
 

tabernake

XLDnaute Nouveau

Le 1 est l'OptionButton2 correspond à "Afficher que les besoins"
Le 2 est l'OptionButton1 correspond à "Afficher tout"

- Afficher tout, on devrait avoir comme résultat (Cela est donc fonctionnelle) :

- Afficher que les besoins, on devrait avoir comme résultat (Ce qui n'est pas fonctionnelle) :

Car ce stage ne correspond pas à un besoin (Ci dessous exemple de besoin et de non besoin)

On dit que c'est un besoin car un Agent se trouve dans la ListBox2 pour le stage 2
On dit que c'est un non besoin car aucun Agent se trouve dans la ListBox2 pour le stage 3

Ainsi, dans cette exemple je souhaite (lorsqu'on sélectionne le Bouton 1) afficher que les stages 1 et 2 car ils correspondent à des besoins du manager A.
Besoin Session

(On affiche que le stage 1 et 2, car ce sont les seuls présent dans la feuille "Besoin" et dans la feuille "Session")

Malheureusement la solution proposée n'a pas fonctionné, je vais continuer à me pencher sur celle-ci.

Je vous remercie vivement pour votre implication
 

Pièces jointes

  • Besoin.JPG
    109.2 KB · Affichages: 19

cp4

XLDnaute Barbatruc
Je t'avoue que tu m'as beaucoup plus embrouillé.
Tu nous dis:
Code:
On dit que c'est un besoin car un Agent se trouve dans la ListBox2 pour le stage 2
On dit que c'est un non besoin car aucun Agent se trouve dans la ListBox2 pour le stage 3
Alors que Listbox2 et dépendante de Listbox3.

Si j'ai compris un petit chouia, les stages de la feuille 'session' ne doivent apparaitre que ceux dont la date est supérieure à la date du jour et ne doivent pas apparaitre ceux ceux dont le nombre de places est nul.
 

tabernake

XLDnaute Nouveau

La listbox 1 (notée 1) est celle affichant les sessions
La listbox2 (notée 2) est celle affichant les agents

Ainsi lorsqu'on clique sur un stage (dans la listbox1), cela nous montre les agents ayant le besoin de faire ce stage (dans la listbox2).

Donc je dis "afficher tout", cela doit me montrer tout les stages, même si parmi tout ces stages on aura pas un agent à chaque stage sur lequel on cliquera, car aucun besoin n'est présent dans la feuille besoin (Exemple pour stage 3).
L'affichage des agents se faire grâce au choix du service / manager (Car chaque agent est relié a eux)

Et quand je dis "Afficher les besoins", cela doit me montrer que les stages sur lesquels lorsqu'on cliquera, on verra un agent dans la listbox2.

Si j'ai compris un petit chouia, les stages de la feuille 'session' ne doivent apparaitre que ceux dont la date est supérieure à la date du jour et ne doivent pas apparaitre ceux ceux dont le nombre de places est nul.
C'est ça, dans la Listbox1, pour être afficher les stages doivent remplir cette condition, mais cela est réussie.

Mon seul problème, c'est comment faire intervenir la condition suivante pour l'option button 1 :
Afficher dans la ListBox1 seulement les stages qui correspondent a un besoin de la feuille "Besoin"

Exemple, si on reprend toute les conditions cité :
Pour le manager A, on doit m'afficher que 4 stages, soit les 2 sessions du stage 1 et les 2 sessions du stage 2.
Car elles sont supérieur à la date du jour, ont au minimum 1 place de disponible, et correspondent à un besoin du manager.

Mon problème est de faire intervenir cette condition.

J'espère vous avoir éclairé sur le sujet.

Merci vivement !
 

Pièces jointes

  • forum 1 et 2.JPG
    97.5 KB · Affichages: 17

cp4

XLDnaute Barbatruc
En réadaptant ce que t'as donnée @i20100_ , je pense que ça répond à tes attentes.
VB:
Private Sub ComboBox1_Change()
   Dim i As Integer, j As Integer, k As Integer
   If Me.ComboBox1.ListIndex = -1 Then Exit Sub
   Me.ListBox1.Clear
   Me.ListBox2.Clear

   Selectio = Me.ComboBox1

   For i = LBound(Tbs) To UBound(Tbs)
 
   If OptionButton2.Value = True Then
      If Tbs(i, 3) <> 0 And Tbs(i, 2) > Date Then
               Me.ListBox1.AddItem Tbs(i, 1)
               Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Left(Tbs(i, 2), 10)
               Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Tbs(i, 3)
               Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Tbs(i, 4)
      End If
Else
If OptionButton1.Value = True Then
     If Not IsError(Application.Match(Tbs(i, 1), Sheets("Besoin").Columns(3), 0)) Then a = 1 '<---------------
     If Tbs(i, 3) <> 0 And Tbs(i, 2) > Date And a = 1 Then '<---------------
                Me.ListBox1.AddItem Tbs(i, 1)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Left(Tbs(i, 2), 10)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Tbs(i, 3)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Tbs(i, 4)
     End If
     a = 0  '<---------------
    End If
  End If

Next i

   Application.ScreenUpdating = True
   USF1.Hide
   SendKeys ("{TAB}"), True
       USF1.Show

End Sub
à tester
 

tabernake

XLDnaute Nouveau
Bonsoir,

Votre solution est très intéressante mais elle prend pas en compte la sélection du manager / service.
Vous comparer juste l'existence du stage dans la feuille session, et dans la feuille besoin.

J'ai donc essayé d'adapter comme ceci, mais cela ne fonctionne pas, une idée de comment le résoudre ?
VB:
    If OptionButton1.Value = True Then
     If Not IsError(Application.Match(Me.ComboBox1, Sheets("Besoin").Columns(Col), 0)) Then a = 1 'Mon ajout
      If Not IsError(Application.Match(Tbs(i, 1), Sheets("Besoin").Columns(3), 0)) Then b = 1 'Votre modification
       If Tbs(i, 3) <> "0" And Tbs(i, 2) > Date And a = 1 And b = 1 Then

                Me.ListBox1.AddItem Tbs(i, 1)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Left(Tbs(i, 2), 10)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Tbs(i, 3)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Tbs(i, 4)

       End If
      b = 0 'Votre modification
     a = 0 'Mon ajout
    End If

Merci d'avance
 

cp4

XLDnaute Barbatruc
Désolé de ne pouvoir aider sans compréhension du problème. En effet, vu le nombre de participant à ton fil, démontre que ce n'est pas du tout clair. C'est ce que font tous les demandeurs (moi inclus) . Ce qui est évident pour nous ne l'est pour l'autre.
Il semble que tu connais exactement le résultat escompté.
Tu as peu de données et quelques combinaisons de choix (boutons et combo). Fais-nous un tableau des résultats attendus. Essaie de faire clair et court. Je t'avoue que j'ai lu tes longs messages en obliques.

edit: je n'ai jamais écrit
If Tbs(i, 3) <> "0" And Tbs(i, 2) > Date And a = 1 And b = 1 Then

A+
 
Dernière édition:

tabernake

XLDnaute Nouveau
C'est moi qui m'en excuse, je pensais être complet et clair mais c'est plutôt brouillon, je vais essayé à l'aide d'exemples de montrer le résultat que j’attends :

(Feuille "besoin" à gauche, Feuille "session" à droite)

Pour l'option button 1, les conditions sont les suivants :
- La date de la session doit être supérieur à celle d'aujourd'hui (Paramètre fonctionnelle)
- Le nombre de places disponibles dans la session doit être supérieur à 0 (Paramètre fonctionnelle)
- La session doit correspondre à un besoin du manager ou service sélectionné (Paramètre à mettre en place)

Exemple Manager A
Si on a sélectionné le manager A dans la ComboBox1, on doit nous afficher dans la listbox1 alors :
Stage 1 10/02/2021
Stage 1 11/02/2021
Stage 2 12/02/2021
Stage 2 15/02/2021

Exemple Manager B
Si on a sélectionné le manager B dans la ComboBox1, on doit nous afficher dans la listbox1 alors :
Stage 1 10/02/2021
Stage 1 11/02/2021

Exemple Manager E
Si on a sélectionné le manager E dans la ComboBox1, on doit nous afficher dans la listbox1 alors :
Stage 2 12/02/2021
Stage 2 15/02/2021

Exemple Service 1
Si on a sélectionné le service 1 dans la ComboBox1, on doit nous afficher dans la listbox1 alors :
Stage 1 10/02/2021
Stage 1 11/02/2021
Stage 2 12/02/2021
Stage 2 15/02/2021

Exemple Service 2
Si on a sélectionné le service 2 dans la ComboBox1, on doit nous afficher dans la listbox1 alors :
Stage 1 10/02/2021
Stage 1 11/02/2021

J'ai donnée un exemple pour chaque possibilité, dite moi s'il vous faut plus de détails

Merci d'avance, bonne journée à vous
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour,

Je viens de voir ton message. Je te joins le fichier que je viens de terminer sans avoir pris en compte les résultats attendus de ton dernier post. Vois si c'est bon!
 

Pièces jointes

  • tabernake_cp4.xlsm
    187.2 KB · Affichages: 7

tabernake

XLDnaute Nouveau
Bonjour,

Tout d'abord un grand merci, votre fichier m'aide à comprendre beaucoup de chose.

Cependant je ne comprend pas pourquoi (Je ne sais pas si ça vient de mon coté) mais la listbox2 ne fonctionne plus, lorsque je change de manager / service.

C'est à dire que la listbox ne m'affiche plus d'agent.

Pourtant la listbox1 affiche les stages qui devrait être affiché quelque soit l'option button appuyé.

Avez vous une idée du pourquoi ?

Je vous remercie encore !
 

cp4

XLDnaute Barbatruc
Il manquait une ligne de code (effacer par inadvertance).
VB:
Private Sub ListBox1_Click()
    Dim i As Long, sel As Variant
    If Me.ListBox1.ListIndex = -1 Then Exit Sub
    ListBox2.Clear

    sel = ListBox1.List(ListBox1.ListIndex, 0) '***cette ligne'
    For i = LBound(Tbb) To UBound(Tbb)
        If Tbb(i, Col) = Me.ComboBox1 And Tbb(i, 3) = sel Then Me.ListBox2.AddItem Tbb(i, 2)
    Next i

    Label13.Caption = IIf(IsNull(ListBox1.List(ListBox1.ListIndex, 3)), " ", ListBox1.List(ListBox1.ListIndex, 3))
End Sub

Bon courage.
 

Discussions similaires

Réponses
4
Affichages
416
Réponses
4
Affichages
450
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…