Bonjour,

je suis à cours d'idées depuis hier. J'ai cherché dans tous les sens et je commence à croire qu'il n'y a pas d'espoir .

J'ai extrait des données d'un fichier Excel avec TransferSpreadsheet. Je les ai enregistré dans une table temporaire (TBLGARANTIEEXCEL) spécialement crée à cet effet parce que la lecture directe et l'insertion dans la table de destination (TBLGARANTIE) me posait des problèmes.

J'ai réussi à enregistrer toutes les données dans la table temporaire (TBLGARANTIEEXCEL), maintenant, je veux les utiliser et je n'y arrive pas.

Le principe est que je dois maintenant m'assurer que les champs de la table temporaire (TBLGARANTIEEXCEL) n'existe pas dans la table de destination (TBLGARANTIE) avant de les enregistrer après avoir bien sûr trouvé les correspondances entre les clés étrangères et les clés primaires (mais ça c'est une autre histoire=.

Comment donc pourvoir lire chaque ligne de ma table?

C'est là mon besoin pour le moment.

Merci

Mon code:
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
 Dim xlApp As Excel.Application
    'Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook
    Dim nbrelignes As Long
    Dim nbrecolonnes As Long
    Dim i As Long 'compteur lignes
    Dim j As Long 'compteur colonnes
    Dim plagecellulesexcel As String 'contient la plage de cellule à copier
    Dim indicecolonnemontant As Long ' indice de la colonne montant
    Dim donneesvalides As Byte 'indique si la dernière cellule du fichier Excel contient des données valides
    
    Dim marequete As String 'définition d''une requête
    Dim critereDcount As String
    
    Dim Nbre As Long 'retourne le nombre d'occurence trouvé lors d'une recherche
    
    
    Dim qdf_garantie As DAO.QueryDef
    Dim qdf_compteclient As DAO.QueryDef
    Dim qdf_notaire As DAO.QueryDef
    Dim qdf_operation As DAO.QueryDef
    Dim qdf_devise As DAO.QueryDef
    Dim qdf_nature As DAO.QueryDef
    Dim qdf_marche As DAO.QueryDef
    
    Dim temp_compte As String
    Dim temp_nomnotaire As String
    Dim temp_operation As String
    Dim temp_devise As String
    Dim temp_nature As String
    Dim temp_typemarche As String
    
    Dim liregarantieexcel As DAO.Recordset
    
    'initialisation des variables qui indiquent le nombre
    'de fichiers ajoutés ou non à la base de données
    fichierajoute = 0
    fichiernonajoute = 0
    
    
'On Error GoTo Err_PiloterExcelDepuisAccess_Click

    'J'initialise mes variables
    Set xlApp = New Excel.Application
    
    Set xlBook = xlApp.Workbooks.Open(fileexcel)

    'je récupère le nombre de lignes du fichier Excel
    nbrelignes = xlApp.Workbooks(1).Sheets(1).UsedRange.Rows.Count
    'cette instruction drvrait marcher mais ne fonctionne pas correctement
    nbrecolonnes = xlApp.Workbooks(1).Sheets(1).Range("A1").End(xlToRight).Column
    
    'tester si la dernière ligne contient des données valables
    Do
        donneesvalides = 0
        For j = 1 To nbrecolonnes
            If Len(xlApp.Workbooks(1).Sheets(1).Cells(nbrelignes, j).Value) > 1 Then donneesvalides = donneesvalides + 1
        Next j
        'Si on n'a pas de données valables dans la dernière ligne alors on indice les lignes à la ligne
        'précédente car la première récupération nous donne la dernière ligne remplie
        'On suppose qu'une ligne est remplie si on a au moins deux champs correctement renseignés
        If donneesvalides < 2 Then nbrelignes = nbrelignes - 1
    Loop Until donneesvalides > 1
    
        
    Form_FRMCONNEXION.Caption = "Importation en cours ..."
    
    
    
    'Déterminer la plage de cellules à copier depuis le fichier Excel
    plagecellulesexcel = "A1:" & IIf(Cells(1, nbrecolonnes).Column > 26, Chr(64 + Cells(1, nbrecolonnes).Column \ 26) & Chr(64 + Cells(1, nbrecolonnes).Column Mod 26), Chr(64 + Cells(1, nbrecolonnes).Column)) & nbrelignes
        
    'Code de fermeture
    xlBook.Close SaveChanges:=True
    
    xlApp.Quit
    
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
            
    'Importation des données dans la base
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "TBLGARANTIEEXCEL", fileexcel, True, plagecellulesexcel
    
    Form_FRMCONNEXION.Caption = "Fin de l'importation"
            
    'Transfert des données de TBLGARANTIEEXCEL vers TBLGARANTIE
    
    'Test de chaque élément pour s'assurer qu''il  n''est pas déjà enregistré dans la base de données
    
    marequete = "SELECT TBLGARANTIEEXCEL.N°GARANTIE, TBLGARANTIEEXCEL.N°CLIENT, TBLGARANTIEEXCEL.NOMCLIENT, " & _
    "TBLGARANTIEEXCEL.COMPTE, TBLGARANTIEEXCEL.NOMNOTAIRE, TBLGARANTIEEXCEL.OPERATIONS, TBLGARANTIEEXCEL.MONTANT, " & _
    "TBLGARANTIEEXCEL.DEVISES, TBLGARANTIEEXCEL.DATES, TBLGARANTIEEXCEL.GARANTIES, TBLGARANTIEEXCEL.DESIGNATIONS, " & _
    "TBLGARANTIEEXCEL.VALIDITE, TBLGARANTIEEXCEL.CIH, TBLGARANTIEEXCEL.MARCHE, TBLGARANTIEEXCEL.GARANT " & _
    "FROM TBLGARANTIEEXCEL"
    
    'ici on récupère tous les enregistrements de la table TBLGARANTIEEXCEL
    
    Set liregarantieexcel = CurrentDb.OpenRecordset(marequete, dbOpenForwardOnly, dbReadOnly)
    
    'A ce niveau, je veux pouvoir lire chaque ligne de la table
    'En faisant ce affichage, je pensais pouvoir afficher l'item 0
    MsgBox liregarantieexcel.Fields(0).Value
        
    'fermeture
    qdf_garantie.Close
    
    'libération de la référence
    Set qdf_garantie = Nothing
    
    
Exit_PiloterExcelDepuisAccess_Click:
    MsgBox "Lignes ajoutées: " & fichierajoute & vbLf & "Lignes rejetées: " & fichiernonajoute
    
    Exit Sub

Err_PiloterExcelDepuisAccess_Click:
    MsgBox "Erreur interne lors de l'extraction du fichier excel"