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 :

problème de connexion à database Access .mdb [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2016
    Messages : 16
    Par défaut problème de connexion à database Access .mdb
    Bonjour à tous,

    je suis autodidacte et plutôt bricoleur en VBA

    Je tourne en rond depuis deux jours sans trouver la solution à mon problème.

    J'ai un fichier excel .xlm qui interroge une database access .mdb (version accdb aussi disponible).

    voici les références dans mon VBA

    Nom : excelréf.jpg
Affichages : 465
Taille : 92,2 Ko

    Je l'interroge pour remplir mes listes déroulantes d'excel, jusque là sans aucun soucis.

    A noter que je mets à Zéro systématiquement mon recordset après avoir rempli chaque liste déroulante (il y en a 14) et le ferme ainsi que ma connexion quand toutes mes listes déroulantes ont été remplies

    C'est ensuite lorsque que j'utilise mon fichier excel pour rapatrier des données sélectionnées selon plusieurs critères que j'ai des soucis.

    Il s'agit de requêtes imbriquées sur plusieurs niveaux

    J'ai testé mes requêtes issues de mon formulaire excel dans Access et elles fonctionnent impeccablement.

    Dans une version antérieure dudit fichier excel, avant office 365, dans mes requêtes sql pour interroger Access, je devais, pour je ne sais quelle raison, remplacer les guillemets chr(34) par un apostrophe chr(39) et l'étoile "*" chr(42) par un "%" chr(37)

    c'était bizarre mais cela avait le mérite de fonctionner.

    A l'heure de passer à Excel 365 j'ai fait migrer mon fichier .xls vers un .xlm et en ai profité pour le modifier notamment pour la chaîne de connexion

    mes variables sont définies comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public ADOConnection As ADODB.Connection
    Public adorecordset As ADODB.Recordset
    Public Str As String
    Public MonjeuEnregdécroissant As String
    ma chaîne de connexion est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Const ConnectString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\3804\Desktop\PLANO-EVO\plansdata.mdb;persist security info = false"
     
    "pour info :
    'ancienne ConnectString = "Provider=Microsoft.jet.oledb.4.0;Data source=" & scanpath & "\planotheque\plans\database\plansdata.mdb;persist security info = false"
    le contenu de mon SELECT contenu dans MonjeuEnregdécroissant est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT plans.*, archivesTYPEdoc.typededocument, archivesTYPEdoc.Date, archivesSCANS.lien, archivesSCANS.taillefichier, archivesSCANS.lienOK FROM ([atlas des routes de D142] INNER JOIN ((plans INNER JOIN archivesTYPEdoc ON plans.[code plan] = archivesTYPEdoc.[code plan]) INNER JOIN [communes des plans] ON plans.[code plan] = [communes des plans].[code plan]) ON [atlas des routes de D142].[code atlas] = [communes des plans].[code atlas]) LEFT JOIN archivesSCANS ON plans.[code plan] = archivesSCANS.[code plan] WHERE (([plans].[P t])=-1) And (([atlas des routes de D142].[n° route])="A15") And (([atlas des routes de D142].[code atlas])=385) And ((archivesTYPEdoc.typeDOCdfltSELECTED)=True) And (([plans].[Intitulé]) Not Like "*nouveau plan*") ORDER BY plans.sortkey1 DESC , plans.[n° plan compilé] DESC , plans.sortkey2 DESC , plans.[ancien n° plan compilé] DESC
    et il fonctionne parfaitement dans Access

    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
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    Sub extraction()
    'On Error GoTo errorHandler
    Dim PREVIOUScodeARCH As Long
     
    effacementliste
    nbenreg = 0
    If NbrArg = 0 And NbrARG2 = 0 Then
       MsgBox "aucun critère n'a été introduit ==> pas de recherche possible !"
       Worksheets("résultats").boutonimprimer.Enabled = False
       Exit Sub
    End If
     
    Worksheets("résultats").sqlVERIF = MonjeuEnregdécroissant
     
    Application.ScreenUpdating = False
     
    Set ADOConnection = New ADODB.Connection
    ADOConnection.Open ConnectString
     
    'La requete MySQL dans ta table
    Str = MonjeuEnregdécroissant
     
    k = 3
    Set adorecordset = New ADODB.Recordset
    adorecordset.Open Str, ADOConnection, adOpenKeyset, adLockOptimistic, adCmdText
     
    'si le nombre d'enregistrement sélectionné est supérieur à 1000 alors on demande de rendre la recherche plus restritive
    If adorecordset.RecordCount > 1000 Then
       MsgBox "vos critères ne sont pas assez rectrictif, " & adorecordset.RecordCount & " enregistrements ont été sélectionnés !" & Chr(13) & Chr(13) & "Veuillez affiner votre recherche SVP !"
     
       Worksheets("résultats").boutonimprimer.Enabled = False
       'Application.ScreenUpdating = True
       GoTo EXTRACTIONfin
    End If
    'On se place sur le 1er enegistrement
     
    If adorecordset.RecordCount = 0 Then 'pas d'enregistrement trouvé
       MsgBox "aucun enregistrement sélectionné !"
       Worksheets("résultats").boutonimprimer.Enabled = False
       GoTo EXTRACTIONfin
    Else ' il y a entre 1 et 1000 enregistrements trouvés
       adorecordset.MoveFirst
     
    'Début de la boucle pour extraire les résultats
       Do While Not adorecordset.EOF()
       If adorecordset![code plan] = PREVIOUScodeARCH Then GoTo extractionLIEN
       Select Case adorecordset![typededocument]
       Case 1
       Cells(k, 1) = "Autre"
       Case 2
       Cells(k, 1) = "Brochure technique"
       Case 3
       Cells(k, 1) = "Cahier spécial des charges"
       Case 4
       Cells(k, 1) = "Convention"
       Case 5
       Cells(k, 1) = "Croquis A4"
       Case 6
       Cells(k, 1) = "D.I.U."
       Case 7
       Cells(k, 1) = "Métré"
       Case 8
       Cells(k, 1) = "Note de calcul"
       Case 9
       Cells(k, 1) = "Photo"
       Case 10
       Cells(k, 1) = "Plan"
       Case 11
       Cells(k, 1) = "Rapport d'inspection"
       Case 12
       Cells(k, 1) = "Remise de prix"
       Case 13
       Cells(k, 1) = "Epreuve de pont"
       Case 14
       Cells(k, 1) = "Bordereau des aciers"
       Case 15
       Cells(k, 1) = "Dossier"
       Case 30
       Cells(k, 1) = "reprises/remises de voiries"
       End Select
       If adorecordset![présent dans clabo ?] = 0 Then
          Cells(k, 2) = "à vérifier"
       End If
       If adorecordset![présent dans clabo ?] = 1 Then
          Cells(k, 2) = "oui"
          Cells(k, 2).Font.ColorIndex = 2
          Cells(k, 2).Interior.ColorIndex = 50
       End If
       If adorecordset![présent dans clabo ?] = 2 Then
          Cells(k, 2) = "manquant"
          Cells(k, 2).Font.ColorIndex = 2
          Cells(k, 2).Interior.ColorIndex = 3
       End If
       If adorecordset![présent dans clabo ?] = 3 Then
          Cells(k, 2).Font.ColorIndex = 2
          Cells(k, 2).Interior.ColorIndex = 45
          Cells(k, 2) = "détruit"
       End If
       If adorecordset![présent dans clabo ?] = 4 Then
          Cells(k, 2).Font.ColorIndex = 2
          Cells(k, 2).Interior.ColorIndex = 37
          Cells(k, 2) = "virtuel"
       End If
       Cells(k, 3) = adorecordset![Date]
       Cells(k, 4) = adorecordset![n° plan compilé]
       Cells(k, 5) = adorecordset![ancien n° plan compilé]
       Cells(k, 6) = adorecordset![Intitulé]
       'Cells(k, 7) = adorecordset![classement]
       Cells(k, 8) = adorecordset![caractéristiques]
       Cells(k, 9) = adorecordset![commentaires]
     
       Dim hyperlien As String
     
    extractionLIEN:
       If adorecordset![lien] <> "" Then
          hyperlien = CStr(adorecordset![lien])
          hyperlien = scanpath & hyperlien
          With Worksheets(1)
            .Hyperlinks.Add Anchor:=.Cells(k, 10), _
            Address:=hyperlien, _
            ScreenTip:=hyperlien, _
            TextToDisplay:=hyperlien
          End With
       End If
       Cells(k, 11) = adorecordset![taillefichier]
    If adorecordset![code plan] = PREVIOUScodeARCH Then GoTo FORnextARCH
     
       Select Case adorecordset![conformitéduplaninsitu]
       Case 0
       Cells(k, 12) = "ND"
       Case 1
       Cells(k, 12) = "à vérifier"
       Case 2
       Cells(k, 12) = "partielle"
       Case 3
       Cells(k, 12) = "totale"
       Case 4
       Cells(k, 12) = "non réalisé"
       Case 5
       Cells(k, 12) = "vérification inutile"
       End Select
     
    FORnextARCH:
       PREVIOUScodeARCH = adorecordset![code plan]
       adorecordset.MoveNext
       k = k + 1
       Loop
    Worksheets("résultats").boutonimprimer.Enabled = True
    Worksheets("résultats").boutonexporter.Enabled = True
    Worksheets("résultats").boutonenvoyerparmail.Enabled = False
    'Fin de la boucle
    End If
    nbenreg = Val(adorecordset.RecordCount)
     
    MsgBox adorecordset.RecordCount & " enregistrement(s) trouvé(s)."
     
    'Fin de la connexion
     
    EXTRACTIONfin:
    Set ADOConnection = Nothing
    Set adorecordset = Nothing
    ADOConnection.Close
    Application.ScreenUpdating = True
     
    Exit Sub
     
    errorHandler:
        'indique le numéro et la description de l'erreur survenue
        MsgBox Err.Number & vbLf & Err.Description & Chr(13) & Chr(13) & "Veuillez noter le message d'erreur et le communiquer à votre administrateur - merci."
     
    End Sub
    Au final j'obtiens ce message d'erreur toujours au même endroit

    Nom : erreur.jpg
Affichages : 417
Taille : 23,9 KoNom : erreur2.jpg
Affichages : 417
Taille : 279,1 Ko

    Je ne parviens pas à déterminer si c'est ma connexion qui pose problème mais dans ce cas elle serait aussi problématique lorsque je remplis mes listes déroulantes lors de l'ouverture de mon fichier excel ou plus que probablement mon instruction SQL imbriquée ….


    Help, Help, Help

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 575
    Par défaut
    Bonsoir,
    Déjà le Like s'écrit comme ça.
    Pas besoin de Chr(34) le ' le replace avantageusement.
    Pour ta requête écris la dans access, passe en mode SQL, remplace les double quote ["] part des simple quote ['] ; et[*] du like par [%]

    Le Like avec * c'est pour DAO le Like avec % c'est pour ADO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    adorecordset.RecordCount 'pas d'intérêt !
    ' RecordCount ne fonctionnent pas comment tu le sous entan il faut faire un movelast avant.
    'pas de movefirst ou movelast sans savoir si eof=bof ce qui veut dire que la requête ne retourne aucun enregistrement !
    If not adorecordset.Eof then
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set adorecordset =ADOConnection.Execute(SQL)

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2016
    Messages : 16
    Par défaut
    Bonjour Thumbdown,

    Merci d'avoir pris le temps de me répondre.

    J'avais déjà fais les tests avec ' et % à la place de " et * mais rien n'y fait.

    ici par acquis de conscience, j'ai remodifié la construction de mon sql en fonction de tes remarques mais nada toujours le même soucis

    voici mon sql modifié pour mon SELECT ;

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT plans.*, archivesTYPEdoc.typededocument, archivesTYPEdoc.Date, archivesSCANS.lien, archivesSCANS.taillefichier, archivesSCANS.lienOK FROM ([atlas des routes de D142] INNER JOIN ((plans INNER JOIN archivesTYPEdoc ON plans.[code plan] = archivesTYPEdoc.[code plan]) INNER JOIN [communes des plans] ON plans.[code plan] = [communes des plans].[code plan]) ON [atlas des routes de D142].[code atlas] = [communes des plans].[code atlas]) LEFT JOIN archivesSCANS ON plans.[code plan] = archivesSCANS.[code plan] WHERE (([plans].[P t])=-1) And (([atlas des routes de D142].[n° route])='A15') And (([atlas des routes de D142].[code atlas])=385) And ((archivesTYPEdoc.typeDOCdfltSELECTED)=-1) And (([plans].[Intitulé]) Not Like '%nouveau plan%') ORDER BY plans.sortkey1 DESC , plans.[n° plan compilé] DESC , plans.sortkey2 DESC , plans.[ancien n° plan compilé] DESC

    voici l'erreur située au même endroit dans le code, avec toujours le message d'erreur d'excel :

    Nom : erreur.jpg
Affichages : 386
Taille : 304,6 Ko

    et voici ma routine modifiée

    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
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    Sub extraction()
    'On Error GoTo errorHandler
    Dim PREVIOUScodeARCH As Long, previousHYPERLINK As String, hyperlienTEXT As String
    Dim hyperlien As String, nbSCAN As Integer
    nbSCAN = 0
    effacementliste
    nbenreg = 0
    If NbrArg = 0 And NbrARG2 = 0 Then
       MsgBox "aucun critère n'a été introduit ==> pas de recherche possible !"
       Worksheets("résultats").boutonimprimer.Enabled = False
       Exit Sub
    End If
     
    Worksheets("résultats").sqlVERIF = MonjeuEnregdécroissant
    Application.ScreenUpdating = False
     
    Set ADOConnection = New ADODB.Connection
    ADOConnection.Open ConnectString
     
    'La requete MySQL dans ta table
    Str = MonjeuEnregdécroissant
     'Str = "SELECT DISTINCT plans.*, archivesTYPEdoc.typededocument, archivesTYPEdoc.Date, archivesSCANS.lien, archivesSCANS.taillefichier, archivesSCANS.lienOK FROM (((plans INNER JOIN archivesTYPEdoc ON plans.[code plan] = archivesTYPEdoc.[code plan]) INNER JOIN ("
     'Str = Str & "SELECT DISTINCT [signets des plans].[code plan] FROM [signets des plans]  WHERE (([signets des plans].[code signet])=" & Chr(39) & "54015980XI" & Chr(39) & ") ORDER BY [signets des plans].[code plan]"
     'Str = Str & ")  AS monSQL ON plans.[code plan] = monSQL.[code plan]) INNER JOIN ([atlas des routes de D142] INNER JOIN [communes des plans] ON [atlas des routes de D142].[code atlas] = [communes des plans].[code atlas]) ON monSQL.[code plan] = [communes des plans].[code plan]) LEFT JOIN archivesSCANS ON plans.[code plan] = archivesSCANS.[code plan] "
     'Str = Str & "WHERE (((archivesTYPEdoc.typeDOCdfltSELECTED)=True) AND ((plans.[ancien n° plan compilé])=" & Chr(39) & "Z16927" & Chr(39) & "))"
     
     
    k = 3
    Set adorecordset = ADOConnection.Execute(Str)
    'Set adorecordset = New ADODB.Recordset
    'adorecordset.Open Str, ADOConnection, adOpenKeyset, adLockOptimistic, adCmdText
     
    adorecordset.MoveLast
    If adorecordset.BOF = adorecordset.EOF Then GoTo EXTRACTIONfin
    'si le nombre d'enregistrement sélectionné est supérieur à 1000 alors on demande de rendre la recherche plus restritive
    If adorecordset.RecordCount > 1000 Then
       MsgBox "vos critères ne sont pas assez rectrictif, " & adorecordset.RecordCount & " enregistrements ont été sélectionnés !" & Chr(13) & Chr(13) & "Veuillez affiner votre recherche SVP !"
       Worksheets("résultats").boutonimprimer.Enabled = False
       GoTo EXTRACTIONfin
    End If
     
     
    If adorecordset.RecordCount = 0 Then 'pas d'enregistrement trouvé
       MsgBox "aucun enregistrement sélectionné !"
       Worksheets("résultats").boutonimprimer.Enabled = False
       GoTo EXTRACTIONfin
    Else ' il y a entre 1 et 1000 enregistrements trouvés
       'On se place sur le 1er enegistrement
       adorecordset.MoveFirst
    'Début de la boucle pour extraire les résultats
       Do While Not adorecordset.EOF()
       ' on vérifie si le lien hypertexte n'est pas identique au précédent
       If adorecordset![lien] = previousHYPERLINK Then GoTo EXITcurrentARCH
       If adorecordset![code plan] = PREVIOUScodeARCH Then
          GoTo extractionLIEN
       Else
          nbSCAN = 0
       End If
       If adorecordset![code plan] = PREVIOUScodeARCH Then GoTo extractionLIEN
       Select Case adorecordset![typededocument]
       Case 1
       Cells(k, 1) = "Autre"
       Case 2
       Cells(k, 1) = "Brochure technique"
       Case 3
       Cells(k, 1) = "Cahier spécial des charges"
       Case 4
       Cells(k, 1) = "Convention"
       Case 5
       Cells(k, 1) = "Croquis A4"
       Case 6
       Cells(k, 1) = "D.I.U."
       Case 7
       Cells(k, 1) = "Métré"
       Case 8
       Cells(k, 1) = "Note de calcul"
       Case 9
       Cells(k, 1) = "Photo"
       Case 10
       Cells(k, 1) = "Plan"
       Case 11
       Cells(k, 1) = "Rapport d'inspection"
       Case 12
       Cells(k, 1) = "Remise de prix"
       Case 13
       Cells(k, 1) = "Epreuve de pont"
       Case 14
       Cells(k, 1) = "Bordereau des aciers"
       Case 15
       Cells(k, 1) = "Dossier"
       Case 30
       Cells(k, 1) = "reprises/remises de voiries"
       End Select
       If adorecordset![présent dans clabo ?] = 0 Then
          Cells(k, 2) = "à vérifier"
       End If
       If adorecordset![présent dans clabo ?] = 1 Then
          Cells(k, 2) = "oui"
          Cells(k, 2).Font.ColorIndex = 2
          Cells(k, 2).Interior.ColorIndex = 50
       End If
       If adorecordset![présent dans clabo ?] = 2 Then
          Cells(k, 2) = "manquant"
          Cells(k, 2).Font.ColorIndex = 2
          Cells(k, 2).Interior.ColorIndex = 3
       End If
       If adorecordset![présent dans clabo ?] = 3 Then
          Cells(k, 2).Font.ColorIndex = 2
          Cells(k, 2).Interior.ColorIndex = 45
          Cells(k, 2) = "détruit"
       End If
       If adorecordset![présent dans clabo ?] = 4 Then
          Cells(k, 2).Font.ColorIndex = 2
          Cells(k, 2).Interior.ColorIndex = 37
          Cells(k, 2) = "virtuel"
       End If
       Cells(k, 3) = adorecordset![Date]
       Cells(k, 4) = adorecordset![n° plan compilé]
       Cells(k, 5) = adorecordset![ancien n° plan compilé]
       Cells(k, 6) = adorecordset![Intitulé]
       Cells(k, 7) = adorecordset![caractéristiques]
       Cells(k, 8) = adorecordset![commentaires]
     
    extractionLIEN:
       If adorecordset![lien] <> "" Then
          If adorecordset![lienOK] <> 1 Then 'le lien est réputé corrompu ou trop long pour être suivi
             If adorecordset![lienOK] = 0 Then hyperlienTEXT = "LIEN CORROMPU" '"corrompu";0;"OK";1;"trop long";2
             If adorecordset![lienOK] = 2 Then hyperlienTEXT = "LIEN trop long pour être suivi"
                Cells(k, 9).Value = hyperlienTEXT
                Cells(k, 9).Font.ColorIndex = 3 'on affiche le texte en rouge pour attirer l'attention
          Else
             nbSCAN = nbSCAN + 1
             hyperlienTEXT = "LIEN - " & nbSCAN
             hyperlien = CStr(adorecordset![lien])
             hyperlien = scanpath & hyperlien
             With Worksheets(1)
               .Hyperlinks.Add Anchor:=.Cells(k, 9), _
                Address:=hyperlien, _
                ScreenTip:=hyperlien, _
                TextToDisplay:=hyperlienTEXT
            End With
          End If
       End If
     
    ''extractionLIEN:
       ''If adorecordset![lien] <> "" Then
          ''hyperlien = CStr(adorecordset![lien])
          ''hyperlien = scanpath & hyperlien
          ''With Worksheets(1)
            ''.Hyperlinks.Add Anchor:=.Cells(k, 9), _
            ''Address:=hyperlien, _
            ''ScreenTip:=hyperlien, _
            ''TextToDisplay:=hyperlien
          ''End With
       ''End If
       Cells(k, 10) = adorecordset![taillefichier]
    If adorecordset![code plan] = PREVIOUScodeARCH Then GoTo FORnextARCH
     
       Select Case adorecordset![conformitéduplaninsitu]
       Case 0
       Cells(k, 11) = "ND"
       Case 1
       Cells(k, 11) = "à vérifier"
       Case 2
       Cells(k, 11) = "partielle"
       Case 3
       Cells(k, 11) = "totale"
       Case 4
       Cells(k, 11) = "non réalisé"
       Case 5
       Cells(k, 11) = "vérification inutile"
       End Select
    FORnextARCH:
       PREVIOUScodeARCH = adorecordset![code plan]
       previousHYPERLINK = adorecordset![lien]
       k = k + 1
    EXITcurrentARCH:
       adorecordset.MoveNext
       Loop
    Worksheets("résultats").boutonimprimer.Enabled = True
    Worksheets("résultats").boutonexporter.Enabled = True
    Worksheets("résultats").boutonenvoyerparmail.Enabled = False
    'Fin de la boucle
    End If
    nbenreg = Val(adorecordset.RecordCount)
    MsgBox adorecordset.RecordCount & " enregistrement(s) trouvé(s)."
    'Fin de la connexion
     
    EXTRACTIONfin:
    Set ADOConnection = Nothing
    Set adorecordset = Nothing
    ADOConnection.Close
    Application.ScreenUpdating = True
     
    Exit Sub
     
    errorHandler:
        'indique le numéro et la description de l'erreur survenue
        MsgBox Err.Number & vbLf & Err.Description & Chr(13) & Chr(13) & "Veuillez noter le message d'erreur et le communiquer à votre administrateur - merci."
     
    End Sub
    Le plus casse bonbon, c'est que mon sql fonctionne parfaitement dans Access que ce soit avec '% ou "* mais dans excel

    Ce que je ne comprends pas, c'est pourquoi l'interrogation de la database access fonctionne parfaitement pour remplir mes listes déroulantes en utilisant la même chaîne de connexion et des select avec des '% et que dès que je veux rapatrier mes enregistrements cela foire

    la longueur de l'instruction SQL ? le fait que ce soit des requêtes imbriquées ?

    Je suis en train de devenir:

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2016
    Messages : 16
    Par défaut
    Bon ben finalement j'ai fini par résoudre mon problème sans le résoudre

    J'ai simplement changé ma chaîne de connexion pour me connecter à la version ACCDB de ma base acces et là tout refonctionne normalement

    voici ma nouvelle chaîne de connection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const ConnectString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\3804\Desktop\PLANO-EVO\plansdata.accdb;persist security info = false"
    Je ne comprends pas pourquoi ce soucis alors que tout fonctionnait aussi normalement avec ma base MDB mais bon, de toute façon comme je comptais profiter de mon confinement pour upgrader ma database mdb vers accdb ben voilà qui est fait.

    Je reste cependant sur ma faim car je ne sais toujours pas pourquoi j'ai eu ces soucis

    En tout cas, merci pour vos interventions et conseils.

    Bonne journée à tous

    PS : si vous pouvez m'expliquer le pourquoi de mes soucis, je reste preneur.

  5. #5
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Perso, plutôt que de mettre des requêtes sql dans mon code Vba excel.

    Je fais ce qu'illustre le tuto ci-bas, c'est à dire appelerla query que je laisse de access, on peu même lui passer des paramètres sibonnle souhaite.

    Ça évite pas mal de souci de QUOTE, dbl QUOTE caractères spéciaux ou erreur de syntaxe.

    https://www.developpez.net/forums/bl...es-stockees-4/

    En fonction de ta version office, l'utilisation de power query pourrait elle aussi être une bonne solution import, modification de Bd access.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2016
    Messages : 16
    Par défaut
    merci pour le conseil, je vais m'y intéressé.

    pour information, le sql de recherche utilise une cinquantaine de critères différents au choix de l'utilisateur via un formulaire ad-hoc et porte sur un vingtaine de tables différentes via des requêyes imbriquées donc je ne sais pas si cela sera aussi facile que de construire soi-même les sql

    A +

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

Discussions similaires

  1. Problème de connexion excel access
    Par h_adil dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/07/2008, 21h21
  2. problème de connexion a access
    Par blanka6 dans le forum WinDev
    Réponses: 1
    Dernier message: 24/11/2007, 17h06
  3. problème de connexion base access
    Par garthalgar dans le forum ASP
    Réponses: 3
    Dernier message: 23/07/2007, 15h41
  4. Problème de connexion base Access
    Par Ricardo_Tubbs dans le forum ASP
    Réponses: 3
    Dernier message: 21/02/2006, 16h06
  5. problème de connexion à bd access
    Par fsesar dans le forum ASP
    Réponses: 1
    Dernier message: 12/10/2005, 15h12

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