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

XL 2019 SQL ADODB avec plusieurs lignes en input

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Joyeux Noël !!! 🙂

J'aurais une petite question. Je n'arrive pas à trouver comment indiquer dans le code plusieurs cellules de données en input pour une requête sql adodb.
Voici mon code :


VB:
'Date
Sub Ma_date()

    Dim RECSET As New ADODB.Recordset, numero_de_police
 
    Call CONNEXION_PE("xx", "xx", "xx")
 
    numero = Worksheets("Coûts").Range("A1").Value
 
    If Len(numero) > 0 Then
     
         RECSET.Open " select sousc.no_police as no_police  from dossier sousc,contractant cntr, personne pers" & _
            " where sousc.no_police = '" & numero & "'  and " & _
            " sousc.is_contractant = cntr.is_contractant and pers.is_personne=cntr.is_personne", cnn_Pe, adOpenDynamic, adLockBatchOptimistic
     
           With Worksheets("Coûts").range("C1")
            If Not RECSET.EOF Then
                .Value = RECSET.Fields("no_police").Value
            Else
                .Value = "Inconnu"
            End If
        End With
        RECSET.Close
    End If
Call DECONNEXION_PE
End Sub

En fait, j'aimerais bien prendre en input toutes les numéro dans la colonne A et écrire l'output dans la colonne C :



Pour l'instant, j'arrive à récupère juste le numéro dans la cellule A1, je ne sais pas comment "automatiser" ma requête sur toutes les lignes.

J'aurais aussi une deuxième question : si je récupère plusieurs dates de naissance (plusieurs adhérents par famille ) dans la colonne C, est-il possible d'insérer des colonnes supplémentaires après la colonne C pour récupérer ces dates ?

Merci pour votre aide !

Bon Réveillon !
 

Pièces jointes

  • 1671912069196.png
    6.6 KB · Affichages: 18
Dernière édition:
Bonjour,
Dans ton poste originel tu utilises cnn_Pe comme connexion de ton

Bonjour,
Dans ton poste originel tu utilises cnn_Pe comme connexion de ton recordset !
La connexion marche, merci ! En fait, je reçois ce genre d'erreur :

Pour cette ligne :


Voilà ma version du code qui marche, mais j'aimerais bien la réécrire avec une fonction comme vous avez fait :
VB:
Sub Date_de_Naissance()

    Dim RECSET As New ADODB.Recordset, numero_de_police
  
    With Sheets("Coûts").Range("A1").CurrentRegion
    Call CONNEXION_PE("xxx", "xxx", "xxx")
    For I = 2 To .Rows.Count
  
    numero = .Cells(I, "A").Value
  
   


    If Len(numero) > 0 Then

         RECSET.Open " select pers.D_NAISSANCE as D_NAISSANCE  from dossier sousc, contractant cntr, personne pers" & _
            " where sousc.no_police = '" & numero & "'  " & _
            "  and sousc.is_contractant = cntr.is_ctant_pere and pers.is_personne=cntr.is_personne", cnn_Pe, adOpenDynamic, adLockBatchOptimistic

        
            If Not RECSET.EOF Then
                .Cells(I, "C").Value = RECSET.Fields("D_NAISSANCE").Value
            Else
                .Cells(I, "C").Value.Value = "Inconnu"
            End If
 
        RECSET.Close
    End If
    Next
End With
Call DECONNEXION_PE
End Sub


Merci pour votre aide !
 
Dernière édition:
Re,
Essayez ce code :
VB:
Sub Ma_date_New()
   
    Call Connexion_Pe("xx", "xx", "xx")
   
    Dim Sel_Pol As String
    Nl = 3 ' nombre de lignes (polices)  à prendre en compte
    Nr = 2 ' numéro de ligne de début de données
    For Each Cel In Application.Transpose(Cells(Nr, "A").Resize(Nl))
        Sel_Pol = IIf(Sel_Pol = "", "'", Sel_Pol & ",'") & Cel & "'"
    Next

    Dim RECSET As Object
    Set RECSET = CreateObject("ADODB.recordset")
        RECSET.Open _
            " select sousc.no_police as no_police " & _
                " from dossier sousc,contractant cntr, personne pers " & _
                " where sousc.is_contractant = cntr.is_contractant   " & _
                "   and     pers.is_personne = cntr.is_personne      " & _
                "   and      sousc.no_police in (" & Sel_Pol & ")", _
            cnn_Pe, adOpenDynamic, adLockBatchOptimistic
   
            If Not RECSET.EOF Then
                Cells(Nr, "C").CopyFromRecordset RECSET
                With Cells(Nr, "D").Resize(RECSET.RecordCount)
                    .FormulaR1C1 = "=IF(RC[-1]="""","""",DATEDIF(RC[-1],TODAY(),""y""))"
                    .NumberFormat = "General"
                End With
            Else
                MsgBox "Pas d'enregistrements correspondants à" & vbLf & Sel_Pol
            End If

        RECSET.Close
    Set RECSET = Nothing
   
    Call Deconnexion_Pe
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…