XL 2019 SQL ADODB avec plusieurs lignes en input

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 :

1671914221356.png


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
    1671912069196.png
    6.6 KB · Affichages: 9
Dernière édition:

fanch55

XLDnaute Barbatruc
Bonjour,
Le code fourni copie la colonne Numéro de police dans la colonne Naissance à partir de 3 tables qu'on ne connait pas ?
Je ne vois pas trop ce qu'il faut vraiment faire et à partir de quoi ...
Vos Bases sont-elles Excel, Access, Oracle,Mysql ou Sqlite ?
Pouvez-vous joindre un exemple anonymisé ?
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,
Le code fourni copie la colonne Numéro de police dans la colonne Naissance à partir de 3 tables qu'on ne connait pas ?
Je ne vois pas trop ce qu'il faut vraiment faire et à partir de quoi ...
Vos Bases sont-elles Excel, Access, Oracle,Mysql ou Sqlite ?
Pouvez-vous joindre un exemple anonymisé ?
Bonjour,
Non, à partir de la colonne Numéro de Police du fichier Excel, j'aimerais bien alimenter la colonne Naissance dans C3 à partir de la base de données.
La requête marche bien, mais je ne sais pas comment passer "ligne par ligne" les données de la colonne Numéro de Police dans ma requête (pour pouvoir lire tous les numéro de police dans la colonne A) et écrire le résultat dans la colonne C.

Merci pour votre aide !
 

fanch55

XLDnaute Barbatruc
Ef fait Marie à fait tout ce qui est nécessaire côté SQL.

Elle veut juste de l'aide pour parcourir de A1:A3
Code:
For i=2 to 4
numero = Worksheets("Coûts").cells(i,"A").Value
Next
[0code]
salut @dysorthographie ,
Pour moi, la requête ne renverra que le numéro de Police ...
sinon un simple copy de la colonnne A (données) en colonne C (données) suffira effectivement
🤔
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,
Ef fait Marie à fait tout ce qui est nécessaire côté SQL.

Elle veut juste de l'aide pour parcourir de A2:A4
Code:
For i=2 to Worksheets("Coûts").Range("A1").currenteregion.rows.count
numero = Worksheets("Coûts").cells(i,"A").Value
Next
Merci ! C’est-à-dire, si j’ai bien compris, je dois lancer la requête ADODB autant de fois que j’ai des enregistrements dans la colonne A ?
 

fanch55

XLDnaute Barbatruc
Dans les cellules de la colonne "Naissance"( à tirer vers le bas ) :
Si table structurée : =Ma_date([@Numéro])
sinon: =Ma_date($A1)

Et dans le code:
VB:
Function Ma_date(numero As String) As Variant

    Dim RECSET As New ADODB.Recordset
 
    If Len(numero) > 0 Then
        Call CONNEXION_PE("xx", "xx", "xx")
           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
        
               If Not RECSET.EOF Then
                   Ma_date = RECSET.Fields("no_police").Value
               Else
                   Ma_date = "Inconnu"
               End If
           RECSET.Close
        Call DECONNEXION_PE
    End If
End Function
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Pour ce qui est des champs de la requête il suffit d'énumérer les champs
Code:
"select champ1,Champ2 "etc
Ça je pense que Marie c'est gérer

Tu as here sousc.no_police = '" & numero & "
et vue que le numéro dépend de la ligne traité oui il faut requêter par

Pour ce qui est des champs de la requête il suffit d'énumérer les champs
Code:
"select champ1,Champ2 "etc
Ça je pense que Marie c'est gérer

Tu as here sousc.no_police = '" & numero & "
et vue que le numéro dépend de la ligne traité oui il faut requêter par ligne
Merci, c'est-à-dire, que je ne peux pas "transformer" la colonne "A" en "base de données" pour faire une jointure avec mes bases de données. En fait, je me demandais si c'était possible.
 

fanch55

XLDnaute Barbatruc
Merci, c'est-à-dire, que je ne peux pas "transformer" la colonne "A" en "base de données" pour faire une jointure avec mes bases de données. En fait, je me demandais si c'était possible.

En supposant que toutes vos bases sont Excel ( ce qui ne doit pas être le cas vu la requête .. )

SQL:
"  Left Join [Feuil1$A2:A4] as Local " & _
"       On (Local.Numéro=sousc.no_police) "
 

dysorthographie

XLDnaute Accro
Dans la mesure du possible il es préférable de ne pas ce connecter déconnecter à chaque requête !
VB:
Sub Ma_dates()
Dim I As Integer
Call CONNEXION_PE("xx", "xx", "xx")
With Sheets("Coûts").ranhe("A1").CurrentRegion
    For I = 2 To .Rows.Count
      If Trim("" & .Cells(I, "A")) <> "" Then .Cells(I, "C") = Ma_date(.Cells(I, "A"), cnn_Pe)
    next
End With
Call DECONNEXION_PE
End Sub

Function Ma_date(numero As String, cnn_Pe As Object) As Validation
With cnn_Pe.Execute(" 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")
     If Not .EOF Then
        Ma_date = .Fields("no_police").Value
     Else
       Ma_date = "Inconnu"
     End If
     .Close
 End With
End Function
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Dans la mesure du possible il es préférable de ne pas ce connecter déconnecter à chaque requête !
VB:
Sub Ma_dates()
Dim I As Integer
Call CONNEXION_PE("xx", "xx", "xx")
With Sheets("Coûts").ranhe("A1").CurrentRegion
    For I = 2 To .Rows.Count
      If Trim("" & .Cells(I, "A")) <> "" Then .Cells(I, "C") = Ma_date(.Cells(I, "A"), cnn_Pe)
    next
End With
Call DECONNEXION_PE
End Sub

Function Ma_date(numero As String, cnn_Pe As Object) As Validation
With cnn_Pe.Execute(" 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")
     If Not .EOF Then
        Ma_date = .Fields("no_police").Value
     Else
       Ma_date = "Inconnu"
     End If
     .Close
 End With
End Function
Merci beaucoup ! Si, par exemple, j’ai deux enregistrements des dates pour un numéro, est-il possible de faire un Insert pour écrire dans une cellule supplémentaire ?

Merci pour votre aide !
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Dans la mesure du possible il es préférable de ne pas ce connecter déconnecter à chaque requête !
VB:
Sub Ma_dates()
Dim I As Integer
Call CONNEXION_PE("xx", "xx", "xx")
With Sheets("Coûts").ranhe("A1").CurrentRegion
    For I = 2 To .Rows.Count
      If Trim("" & .Cells(I, "A")) <> "" Then .Cells(I, "C") = Ma_date(.Cells(I, "A"), cnn_Pe)
    next
End With
Call DECONNEXION_PE
End Sub

Function Ma_date(numero As String, cnn_Pe As Object) As Validation
With cnn_Pe.Execute(" 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")
     If Not .EOF Then
        Ma_date = .Fields("no_police").Value
     Else
       Ma_date = "Inconnu"
     End If
     .Close
 End With
End Function
Bonjour,
J'ai une erreur sur la ligne :
1672139431768.png

C'est surligné car

1672139407265.png


Je recherche pourquoi mais je ne trouve pas :(
Merci pour votre aide !