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

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 :




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

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 :

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
Merci pour votre aide !

En faite, j'ai deux liste déroulante (sur la feuille 1) :



En choisissant les données dans ces listes, je souhaite rafraichir à chaque fois la liste de données sur la feuille 4 :



Pour cela j'ai fait une requête (Liste_UT), où j'ai deux variables argString3 (par exemple, dans notre cas, cela représente CACEIS OFIVALMO) et argString4 (FLINVEST, dans notre cas précis). Ces deux variables représentent les choix dans nos listes.

Je n'arrive pas à déclencher ma requête avec deux variables (je n'ai jamais codé cela auparavant).

Où je dois mettre l'appel à ma requête, sur la feuille 1 ?
Quand j'écris Liste_UT( argString3 , argString4) je reçois une erreur :




Merci !
 

Pièces jointes

  • 1631954722283.png
    47.2 KB · Affichages: 21
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
En fait, j'ai amélioré mon code comme cela, mais la liste sur la feuille 4 ne se met pas à jour quand je change des choix dans les liste sur la feuille 1



Ma requête :

VB:
Public Sub Liste_UT(strQ1 As String, strQ2 As String)

CONTRAT_VALID = False

    Dim RECSET As New ADODB.Recordset
  
    
    Call CONNEXION_PEGASE("selection", "verify", "PEG_DUP")
    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='" & strQ1 & "' and personne3.S_RAISONSOC='" & strQ2 & "' 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
 

dysorthographie

XLDnaute Accro
Bonsoir,
tu fais un .AddItem RECSET!UT_RGA sur la liste précédente donc tu entasse tu ne supprime jamais rien si aumois tu faisais au préalable un Clear de ta liste!

VB:
Public Sub Liste_UT(strQ1 As String, strQ2 As String)

CONTRAT_VALID = False

    Dim RECSET As New ADODB.Recordset
 
    
    Call CONNEXION_PEGASE("selection", "verify", "PEG_DUP")
    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='" & strQ1 & "' and personne3.S_RAISONSOC='" & strQ2 & "' 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
 
    
    
    Worksheets(4).Liste_UT_RGA.Column = RECSET.getrows
  
    Call DECONNEXION_PEGASE
End Sub
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Merci ! J'ai corrigé mes mon code, mais j'ai le même résultat :
VB:
Public Sub Liste_UT(strQ1 As String, strQ2 As String)

CONTRAT_VALID = False

    Dim RECSET As New ADODB.Recordset
  
    
    Call CONNEXION_PEGASE("selection", "verify", "PEG_DUP")
    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='" & strQ1 & "' and personne3.S_RAISONSOC='" & strQ2 & "' 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.Column = RECSET.GetRows
    RECSET.MoveNext
    Wend
    RECSET.Close
    Call DECONNEXION_PEGASE
End Sub


Peut-être le problème vient du code sur la feuille 4 :





En fait, je n'arrive pas à comprendre comment "liée" ma requête Liste_UT entre deux listes déroulantes sur la feuille 1 (les inputs) et la liste voulue sur la feuille 4. Je dois positionnée ma requête dans un module, n'est-ce pas ?

Merci !
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
J'ai enlevé quelques lignes du code, comme vous avez indiqué, mais je reçois une erreur :

 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
VB:
 Worksheets(4).Liste_UT_RGA.clear
if Not RECSET.EOF then
    Worksheets(4).Liste_UT_RGA.Column = RECSET.GetRows
else
msgBox "pas d'enregistrement retournés !"
end if
Merci, mais la mise à jour ne se fait pas et je reçois toujours la message sur la première page, alors que les variables sont bien récupérées de mes listes déroulantes (test est souligné en jaune) :



Je pense qu'il y a un problème dans l'appel de ma requête Liste_UT à partir de la feuille 1 : je n'arrive pas à comprendre comment propager les deux choix dans la liste dans ma requête , est-ce que c'est un Call Liste_UT(argString3, argString4) ?

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(argString3, argString4)
   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(argString3, argString4)
   End If
End Sub
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Les variables sont déclarées en :

Public argString3 As String
Public argString4 As String
 

dysorthographie

XLDnaute Accro
ok donc ta requête ne retourne aucune valeur!
soit c'est ta close where qui déconne soit ce son tes paramètres!
VB:
Public Sub Liste_UT(strQ1 As String, strQ2 As String)
debug.print "'" & strQ1 & "'", "'" & strQ2 & "'"
regarde, dans la fenêtre dexécution ragourci clavier [Ctrl] + [g], si le résulta correspond à ce qu'il faut trouvé!
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Dois-je executer ce code ? J'obtiens aucune fenêtre avec Debug.

SI je remplace les strq1 et les strq2 par argString3 et argString4 et j'enlève (strQ1 As String, strQ2 As String) et j'écris juste Call Liste_UT sur la feuille 1 j'obtiens dans mes fenêtre espions les variables argString3 et argString4 à vide.

En fait je n'arrive pas à transmettre les choix dans la liste sur la première page dans ma requête dans le module.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…