IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

retour recordset colonne vide ADO [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Business analyste sur une BDD
    Inscrit en
    Août 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Business analyste sur une BDD

    Informations forums :
    Inscription : Août 2017
    Messages : 13
    Par défaut retour recordset colonne vide ADO
    Bonjour à tous.


    J'ai un problème avec un recordset sur une méthode ADO qui me retourne une colonne vide. C'est la 2e colonne

    Je soupçonne que cela vienne du fait que les valeurs de ce champ soient soit des entiers soit des chaînes de caractères.

    Après avoir regardé ces discussions :
    https://www.developpez.net/forums/d1...outes-donnees/
    https://www.developpez.net/forums/d8...recordset-ado/

    Je ne trouve pas le problème.
    J'ai bien mis le IMEX = 1 (j'ai essayé 0,1 et 2) et le HDR à No (j'ai essayé yes aussi sans plus de résultat).

    L'exécution du recordset est ur la ligne 54 et la création de la connexion ligne 13

    Si vous avez des idées ...

    Merci d'avance pour vos réponses




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Sub Prepaimport()
    Dim i, j, k, m, yeari, monthi, dayi, yearj, monthj, dayj, lastline, test As Integer
    Dim Dati, Datj As Date
    Dim Lignememematr() As Variant
    Dim Cn As ADODB.Connection
    Dim FichierCSV, Dossier, datstr As String
    Dim NomFeuille As String, text_SQL As String
    Dim Rst As ADODB.Recordset
    'On Error GoTo ADO_ERROR
     
    Dossier = "C:\Users\2018_et_2019\" 'penser à terminer par un \
     
    Set Cn = New ADODB.Connection 'connexion au dossier considéré comme base de données
                        Cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Dossier & "; Extended Properties = ""text; HDR = No; IMEX =1""" '; FMT=Delimited"" ;Persist Security Info=False"
                        Cn.ConnectionTimeout = 40
                        Cn.Open
     
    creationfichiershemaini 'Création du fichier ini
    m = 2 'mise à jour
     
    'Faire un tri adapté : matricule croissant, date entrée croissante, date sortie croissante
    For i = 1 To Sheets("Feuil1").Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'boucle sur les lignes
    j = i + 1
     
    If i = 10 Or i = 830 Or i = 1000 Or i = 2000 Or i = 5000 Or i = 7000 Or i = 10000 Or i = 12000 Then
        Debug.Print (i)
        ThisWorkbook.Save
    End If
     
        While Sheets("Feuil1").Cells(j, 1).Value = Sheets("Feuil1").Cells(i, 1).Value    'Boucle sur matricule, isoler les lignes avec matricule
            If Sheets("Feuil1").Cells(j - 1, 7).Value < Sheets("Feuil1").Cells(j, 6).Value Then 'vérifier trous d'affectation, si trou :
            With Sheets("Feuil1")
                yearj = Val(Left(.Cells(j, 6), 4))        'Extraction de l'année, mois et date
                monthj = Val(Mid(.Cells(j, 6), 6, 2))
                dayj = Val(Mid(.Cells(j, 6), 9, 2))
                Datj = CDate(monthj & "/" & dayj & "/" & yearj) 'Val(yearj & Format(monthj, "00") & Format(dayj, "00"))
                yeari = Val(Left(.Cells(j - 1, 7), 4))      'Extraction de l'année, mois et date
                monthi = Val(Mid(.Cells(j - 1, 7), 6, 2))
                dayi = Val(Mid(.Cells(j - 1, 7), 9, 2))
                Dati = CDate(monthi & "/" & dayi & "/" & yeari) 'Val(yeari & Format(monthi, "00") & Format(dayi, "00"))
            End With
     
                For k = Dati To Datj                  'boucle sur date, attention
                        datstr = year(k) & month(k) & day(k)
                        FichierCSV = Dir(Dossier & datstr & "*" & ".csv")                                'recherche du fichier
                        If FichierCSV <> "" Then
     
                        '-----------------
                        text_SQL = "SELECT * FROM [" & FichierCSV & "]  WHERE [cRefExt] LIKE " & Sheets("Feuil1").Cells(j, 1).Value & " ;"  'création de la requête avec vérif présence matricule
     
                        'Set Rst = New ADODB.Recordset 'Exécution de la requête
                        'Debug.Print (text_SQL)
     
                        Set Rst = Cn.Execute(text_SQL)
     
                         'mise à la ligne 2 pour ne pas avoir les en-têtes
     
                        'lastline = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
                        Sheets("import").Cells(m, 2).CopyFromRecordset Rst 'Copie du recordset dans la première cellule videVariable() = Rst.Fields(0)
                        Sheets("import").Cells(m, 1) = k
                        m = m + 1
     
                        'Copie de tout le recordset, si il y a quelque chose, la ligne sera copié, si il n'y a rien, il n'y a pas besoin d'importer vu que la personne n'est pas dans les fichiers ce jour là
     
     
                        Rst.Close 'fermeture du recordset
                        Set Rst = Nothing
     
                        End If
     
                        'si présent : vérifier affectation
                            'si affectation bonne : ajouter à l'import
                            'si affectation différente : ajouter à l'import avec affectation différente
                Next    'fin boucle date
            End If      'fin si trou
            j = j + 1
        Wend            'fin boucle matricule
    i = j - 1             ' remise à jour du numéro de ligne
    Next                'fin boucle While Cells(j, 1).Value = Cells(i, 1).Value
    'ADO_ERROR:
    'If Err <> 0 Then
     '       Debug.Assert (Err = 0)
      '      MsgBox (Err.Description)
       '     Resume Next
        'End If
    Cn.Close 'fermeture du fichier
        Set Cn = Nothing
    End Sub

  2. #2
    Membre averti
    Homme Profil pro
    Business analyste sur une BDD
    Inscrit en
    Août 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Business analyste sur une BDD

    Informations forums :
    Inscription : Août 2017
    Messages : 13
    Par défaut
    J'ai résolu le problème en changeant mon fichier schema.ini :

    J'ai utilisé la propriété MaxScanRows=0 pour chaque fichier afin qu'il scanne l'entiereté de la colonne avant de définir le type de data. Cela permet donc de le définir en tant que Text. J'imagine que le IMEX = 1 dans ma chaine de caractère de connexion ADO doit aider aussi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB & SQL] Recordset reste vide apres SELECT
    Par ZeGuizmo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/06/2006, 09h04
  2. Réponses: 10
    Dernier message: 01/12/2005, 09h47
  3. Colonne vide, affichage impossible
    Par uloaccess dans le forum Access
    Réponses: 7
    Dernier message: 23/11/2005, 17h07
  4. [excel]comment supprimer une colonne vide...
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/10/2005, 13h10
  5. comment savoir si un recordset est vide ?
    Par alkmehd dans le forum Access
    Réponses: 6
    Dernier message: 15/09/2005, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo