Microsoft 365 VBA : requête liée à une liste de données

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Je récupère mes variable argstring3 et argstring4 via 2 liste déroulante (en cliquant sur ces liste) : argString3 = Me.Liste_Mandataire.Value , argString4 = Me.Liste_Depositaire.Value.
Les variables argString3 et argString4 ont bien des valeurs, j'ai testé.
Le code pour les récupérer se trouve dans :

1631897027820.png



Ensuite, je voudrais lancer une requête qui crée une liste déroulante sur la feuille 4. Ce code se trouve dans :
1631897121152.png

mais malheureusement ce code ne marche pas, car je ne sais pas comment écrire l'appel à ce code sur la feuille 1 : Call Sub_Liste(argString3,argString4) ne marche pas, la ligne se met en rouge.

VB:
Public Sub Liste_UT()
CONTRAT_VALID = False

    Dim RECSET As New ADODB.Recordset
 
  
    Call CONNEXION_PEGASE("xxxx", "xxx", "xxx")
    RECSET.Open "select distinct (rga.CD_RGA||' - '||rga.LB_LONG) as UT_RGA from DB_RGA rga, DB_DOSSIER sousc, DB_CTRAT_SUPPORT db_ctrat," & _
             " DB_PROTOCOLE  proto, DB_TIERS  tiers1," & _
             " DB_PERSONNE  personne1," & _
             " DB_PORTEFEUILLE  portef, DB_TIERS  tiers2, DB_PERSONNE  personne2," & _
             " DB_TIERS tiers3, DB_PERSONNE personne3" & _
             " where personne2.S_RAISONSOC='" & argString4 & "' and personne3.S_RAISONSOC='" & argString3 & "' and sousc.CD_DOSSIER in ('CHOP','CHOC') and sousc.LP_ETAT_DOSS not in ('ANNUL','A30','CLOSE')" & _
             " and sousc.IS_DOSSIER=db_ctrat.IS_DOSSIER" & _
             " and  sousc.is_protocole=proto.is_protocole" & _
             " and  sousc.is_tiers=tiers1.is_tiers" & _
             " and  tiers1.is_personne=personne1.is_personne" & _
             " and  (db_ctrat.ID_FAMILLE_PORTEF||' '||db_ctrat.ID_PORTEFEUILLE)=(portef.ID_FAMILLE_PORTEF||' '||portef.ID_PORTEFEUILLE)" & _
             " and  portef.is_tiers_depositaire=tiers2.IS_TIERS" & _
             " and  tiers2.is_personne=personne2.IS_PERSONNE" & _
             " and  sousc.IS_TIERS=tiers3.IS_TIERS" & _
             " and tiers3.is_personne=personne3.is_personne" & _
             " and db_ctrat.IS_RGA=rga.IS_RGA", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic
 
  
    While Not RECSET.EOF
    Worksheets(4).Liste_UT_RGA.AddItem RECSET!UT_RGA
    RECSET.MoveNext
    Wend
    RECSET.Close
    Call DECONNEXION_PEGASE
End Sub


Voici le code sur la feuille 4 :
1631897378169.png

VB:
Private Sub Liste_UT_RGA_Change()
If Not Worksheets(4).Liste_UT_RGA.MatchFound And Worksheets(4).Liste_UT_RGA <> "" Then
      MsgBox "Saisie impossible, cet UT cible n'existe pas ", , "Contrôle"
      Worksheets(4).Liste_UT_RGA = ""
     Else
      Worksheets(4).Cells(5, 25) = Worksheets(4).Liste_UT_RGA
      Liste_UT_RGA.BackColor = RGB(255, 0, 0)
   End If
End Sub


Merci beaucoup pour votre aide !
 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Debug.print écrit dans la fenêtre d'exécution pour ouvrir la fenêtre d'exécution il faut taper le raccourci [CTRL] + [g] au clavier
Merci, j'ai trouvé. En fait, quand je fais les choix dans ma liste, il n'y qu'une seule variable qui se propage dans ma requête.
1631998531220.png



L'anomalie est quelque part ici, dans les Call Liste_UT

VB:
Private Sub liste_Mandataire_Change()
    Dim argString3 As String
    If Not Worksheets("1 - Feuille de Suivi Commercial").Liste_Mandataire.MatchFound And Worksheets("1 - Feuille de Suivi Commercial").Liste_Mandataire <> "" Then
      MsgBox "Saisie impossible, ce mandataire cible n'existe pas ", , "Contrôle"
      Worksheets("1 - Feuille de Suivi Commercial").Liste_Mandataire = ""
      Worksheets(4).Range("Nouveau_gestionnaire").Value = ""
     Else
      Worksheets("1 - Feuille de Suivi Commercial").Cells(5, 24) = Worksheets("1 - Feuille de Suivi Commercial").Liste_Mandataire
      Liste_Mandataire.BackColor = RGB(255, 0, 0)
      Worksheets(4).Range("Nouveau_gestionnaire").Value = Me.Liste_Mandataire.Value
      argString3 = Me.Liste_Mandataire.Value
      Worksheets("1 - Feuille de Suivi Commercial").Range("G24") = argString3
      Call Liste_UT(argString4, argString3)
   End If
End Sub
Private Sub liste_Depositaire_Change()
 Dim argString4 As String
    If Not Worksheets("1 - Feuille de Suivi Commercial").Liste_Depositaire.MatchFound And Worksheets("1 - Feuille de Suivi Commercial").Liste_Depositaire <> "" Then
      MsgBox "Saisie impossible, ce dépositaire cible n'existe pas ", , "Contrôle"
      Worksheets("1 - Feuille de Suivi Commercial").Liste_Depositaire = ""
      Worksheets(4).Range("Nouveau_depositaire").Value = ""
     Else
      Worksheets("1 - Feuille de Suivi Commercial").Cells(5, 25) = Worksheets("1 - Feuille de Suivi Commercial").Liste_Depositaire
      Liste_Depositaire.BackColor = RGB(255, 0, 0)
      Worksheets(4).Range("Nouveau_depositaire").Value = Me.Liste_Depositaire.Value
      argString4 = Me.Liste_Depositaire.Value
      Worksheets("1 - Feuille de Suivi Commercial").Range("G25") = argString4
      Call Liste_UT(argString4, argString3)
   End If
End Sub
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Merci, j'ai trouvé. En fait, quand je fais les choix dans ma liste, il n'y qu'une seule variable qui se propage dans ma requête.
Regarde la pièce jointe 1115988


L'anomalie est quelque part ici, dans les Call Liste_UT

VB:
Private Sub liste_Mandataire_Change()
    Dim argString3 As String
    If Not Worksheets("1 - Feuille de Suivi Commercial").Liste_Mandataire.MatchFound And Worksheets("1 - Feuille de Suivi Commercial").Liste_Mandataire <> "" Then
      MsgBox "Saisie impossible, ce mandataire cible n'existe pas ", , "Contrôle"
      Worksheets("1 - Feuille de Suivi Commercial").Liste_Mandataire = ""
      Worksheets(4).Range("Nouveau_gestionnaire").Value = ""
     Else
      Worksheets("1 - Feuille de Suivi Commercial").Cells(5, 24) = Worksheets("1 - Feuille de Suivi Commercial").Liste_Mandataire
      Liste_Mandataire.BackColor = RGB(255, 0, 0)
      Worksheets(4).Range("Nouveau_gestionnaire").Value = Me.Liste_Mandataire.Value
      argString3 = Me.Liste_Mandataire.Value
      Worksheets("1 - Feuille de Suivi Commercial").Range("G24") = argString3
      Call Liste_UT(argString4, argString3)
   End If
End Sub
Private Sub liste_Depositaire_Change()
 Dim argString4 As String
    If Not Worksheets("1 - Feuille de Suivi Commercial").Liste_Depositaire.MatchFound And Worksheets("1 - Feuille de Suivi Commercial").Liste_Depositaire <> "" Then
      MsgBox "Saisie impossible, ce dépositaire cible n'existe pas ", , "Contrôle"
      Worksheets("1 - Feuille de Suivi Commercial").Liste_Depositaire = ""
      Worksheets(4).Range("Nouveau_depositaire").Value = ""
     Else
      Worksheets("1 - Feuille de Suivi Commercial").Cells(5, 25) = Worksheets("1 - Feuille de Suivi Commercial").Liste_Depositaire
      Liste_Depositaire.BackColor = RGB(255, 0, 0)
      Worksheets(4).Range("Nouveau_depositaire").Value = Me.Liste_Depositaire.Value
      argString4 = Me.Liste_Depositaire.Value
      Worksheets("1 - Feuille de Suivi Commercial").Range("G25") = argString4
      Call Liste_UT(argString4, argString3)
   End If
End Sub
Bonjour,

Finalement, je récupère les valeurs de mes listes dans des ranges, et j'exécute la requête Liste_UT avec 2 paramètres via Liste_UT2 :
1632049094659.png


1632049231380.png

1632049336433.png

Est-ce que vous savez si je peux, en VBA, rajouter dans ma liste, créée avec la Liste_UT, en dernière position, la ligne "La valeur n'est pas dans la liste".



Merci beaucoup !
 

Statistiques des forums

Discussions
311 720
Messages
2 081 899
Membres
101 834
dernier inscrit
Jeremy06510