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

Microsoft 365 VBA ADODB RECSET : écrire le résultats dans deux cellules.

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

J'ai fait une requête ADODB Recordset qui marche bien. Cette requête retourne deux enregistrements pour un numéro.
Je me demande comment écrire le deuxième résultat dans une cellule adjacente (cellule "D").

Voici mon code :

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

Je me demande comment écrire le résultat dans les cellules "C" et "D" :

Code:
            If Not RECSET.EOF Then
                .Cells(I, "C").Value = RECSET.Fields("D_NAISSANCE").Value
                .Cells(I, "D").Value = RECSET.Fields("D_NAISSANCE").Value
            Else
                .Cells(I, "C").Value.Value = "Inconnu"
                .Cells(I, "D").Value.Value = "Inconnu"
            End If

Merci pour votre aide !
 
Solution
Bonjour,

Un objet Recordset est lu Enregistrement par Enregistrement (ligne par ligne) il faut donc que vous déplaciez le curseur après le traitement du premier enregistrement

VB:
 If Not RECSET.EOF Then
                .Cells(I, "C").Value = RECSET.Fields("D_NAISSANCE").Value
                ' Faire avancer le curseur de lecture d'un enregistrement plus loin
                RECSET.MoveNext
            ' Vérifier qu' il y a bien un enregistrement (la fin n'est pas atteinte)   
            If Not RECSET.OEF Then .Cells(I, "D").Value = RECSET.Fields("D_NAISSANCE").Value
            Else
                .Cells(I, "C").Value.Value = "Inconnu"
                .Cells(I, "D").Value.Value = "Inconnu"
            End If


bonne Soirée

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Un objet Recordset est lu Enregistrement par Enregistrement (ligne par ligne) il faut donc que vous déplaciez le curseur après le traitement du premier enregistrement

VB:
 If Not RECSET.EOF Then
                .Cells(I, "C").Value = RECSET.Fields("D_NAISSANCE").Value
                ' Faire avancer le curseur de lecture d'un enregistrement plus loin
                RECSET.MoveNext
            ' Vérifier qu' il y a bien un enregistrement (la fin n'est pas atteinte)   
            If Not RECSET.OEF Then .Cells(I, "D").Value = RECSET.Fields("D_NAISSANCE").Value
            Else
                .Cells(I, "C").Value.Value = "Inconnu"
                .Cells(I, "D").Value.Value = "Inconnu"
            End If


bonne Soirée
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Merci beaucoup !
Bonne soirée !
 

Discussions similaires

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