Microsoft 365 Valeur d'une liste dans la requête ADODB

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

J'ai une liste déroulante avec des valeurs. Je voudrais cliquer dans cette liste et afficher la valeur correspondante via une requête ADODB dans une autre cellule.
Mon code pour passer la valeur de la liste dans une variable que je vais utiliser dans la requête est:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(0, 0) = "E15" Then
GET_GROUPE Split(Target.Value, " - ")(1)
End If
End Sub


J'ai mis Split(Target.Value, " - ")(1) car mes variables se presente comme LMM - 55C, KPCF - 5577 , je dois récupérer les caractères après le tiret. Ce code ne marche pas :(
 
Dernière édition:

laurent950

XLDnaute Accro
Re,

ici Dim TabRes() As String
Paracerque Public Sub GET_GROUPE_GESTION_CIBLE(ByRef strQ As String)

Pour ByRef et ByVal : Poste #25 @Dranreb jusqu'au poste #30 (J'ai écrit quelques exemples)
Lien : Propriétés d"une classe | Page 2 | Excel-Downloads (excel-downloads.com)

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    If Not Intersect(Target, Range("C6")) Is Nothing Then
        Call CLICK_BTN_INFOS_CONTRAT
    End If

    Dim TabRes() As String
    If Target.Value = [E15].Value Then
        ReDim TabRes(0 To UBound(Split([Target], ",")))
        For i = LBound(TabRes) To UBound(TabRes)
            TabRes(i) = Split(Split([Target], ",")(i), "-")(1)
        Next i
    End If
    MsgBox TabRes(0)
    GET_GROUPE_GESTION_CIBLE TabRes(0)
End Sub

Public Sub GET_GROUPE_GESTION_CIBLE(ByRef strQ As String)
    Dim cnn_Pegase As ADODB.Connection 'Connexion Pegase
    Dim RECSET As New ADODB.Recordset
        Call CONNEXION_PEG("select", "test", "PEG")
    RECSET.Open "select serv.lb_long||' (AT: '||pers.s_nom||' '||pers.s_prenom||')' as groupecible from db_tiers as ti, dr_collaborateur_tiers cp,db_collaborateur col,db_personne pers,dr_service_collaborateur sc,db_service_compagnie serv" & _
                " where ti.CD_TIERS='" & strQ & "' ti.is_tiers=cp.is_tiers and cp.is_collaborateur = col.is_collaborateur and col.is_personne = pers.is_personne and col.is_collaborateur = sc.is_collaborateur and sc.is_service_compagnie = serv.is_service_compagnie", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic
    If Not RECSET.EOF Then
        Worksheets("1 - Feuille de Suivi Commercial").Range("GET_GROUPE_GESTION_CIBLE").Value = RECSET.Fields("groupecible").Value
    Else
        Worksheets("1 - Feuille de Suivi Commercial").Range("GET_GROUPE_GESTION_CIBLE").Value = "Inconnu"
    End If
    RECSET.Close
    Call DECONNEXION_PEG
End Sub
 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Re,

ici Dim TabRes() As String
Paracerque Public Sub GET_GROUPE_GESTION_CIBLE(ByRef strQ As String)

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    If Not Intersect(Target, Range("C6")) Is Nothing Then
        Call CLICK_BTN_INFOS_CONTRAT
    End If

    Dim TabRes() As String
    If Target.Value = [E15].Value Then
        ReDim TabRes(0 To UBound(Split([Target], ",")))
        For i = LBound(TabRes) To UBound(TabRes)
            TabRes(i) = Split(Split([Target], ",")(i), "-")(1)
        Next i
    End If
    MsgBox TabRes(0)
    GET_GROUPE_GESTION_CIBLE TabRes(0)
End Sub

Public Sub GET_GROUPE_GESTION_CIBLE(ByRef strQ As String)
    Dim cnn_Pegase As ADODB.Connection 'Connexion Pegase
    Dim RECSET As New ADODB.Recordset
        Call CONNEXION_PEG("select", "test", "PEG")
    RECSET.Open "select serv.lb_long||' (AT: '||pers.s_nom||' '||pers.s_prenom||')' as groupecible from db_tiers as ti, dr_collaborateur_tiers cp,db_collaborateur col,db_personne pers,dr_service_collaborateur sc,db_service_compagnie serv" & _
                " where ti.CD_TIERS='" & strQ & "' ti.is_tiers=cp.is_tiers and cp.is_collaborateur = col.is_collaborateur and col.is_personne = pers.is_personne and col.is_collaborateur = sc.is_collaborateur and sc.is_service_compagnie = serv.is_service_compagnie", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic
    If Not RECSET.EOF Then
        Worksheets("1 - Feuille de Suivi Commercial").Range("GET_GROUPE_GESTION_CIBLE").Value = RECSET.Fields("groupecible").Value
    Else
        Worksheets("1 - Feuille de Suivi Commercial").Range("GET_GROUPE_GESTION_CIBLE").Value = "Inconnu"
    End If
    RECSET.Close
    Call DECONNEXION_PEG
End Sub
Merci ! C'est beaucoup mieux maintenant! :) Par contre j'ai une erreur de connexion.
1610705534773.png
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Re,
Target c'est une variable Objet de Type Range (La valeur ou plage de valeur renvoyé)
On peut stocker le résultat dans une variable tableau comme l'exemple que j'ai posté
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TabRes() As Variant
If Target.Value = [E15].Value Then
    ReDim TabRes(0 To UBound(Split([Target], ",")))
        For i = LBound(TabRes) To UBound(TabRes)
            TabRes(i) = Split(Split([Target], ",")(i), "-")(1)
        Next i
End If
MsgBox TabRes(0)
MsgBox TabRes(1)
End Sub
cdt
Bonjour,
J’ai remarqué que je reçois un espace à droite dans la Tab_Res, par conséquent ma requête ne marche pas. Est-ce que vous connaissez une fonction VBA qui supprime des espaces ? Merci !
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 907
Membres
101 836
dernier inscrit
karmon