Importation de données spécifiques d'une Table Access avec ADO
#1
Débutant XLPages

Inscription: 05/12/2010

Messages: 14

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007,2010
Posté le : 04-01-2011 12h38
Bonjour à tous,

je sollicite votre aide car je bloque.

J'arrive à importer toutes les infos d'une table Access, mais pas à importer uniquement certaines lignes de la table Access dont je spécifie l'information dans des cellules Excel.

J'aimerais donc écrire, par exemple dans le fichier joint, les informations concernant uniquement 3 noms_client dans les cellules A2:A5.

Private Sub Choix_Change()
  rep = ThisWorkbook.Path
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & rep & "\Access.mdb"
  Sql = "SELECT * FROM Client WHERE nom_client='" & plage & "'"
  'plage est la plage de cellule de A2:A27
  Set rs = cnn.Execute(Sql)
  Me.Ville = rs!Ville
  Me.Salaire = rs!Salaire
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
End Sub

Merci de votre aide.

Pièce jointe:
zip manwe24.zip   [ Taille: 35.89 Ko - Téléchargements: 400 ]
Hors Ligne
Rapport   Haut 

Re: Importation de données spécifiques d'une Table Access avec ADO
#2
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 04-01-2011 22h11
Bonsoir à tous, bonsoir manwe24,

Une petite tentative avec ce code:
Private Sub Choix_Change()
Dim Derlig As Long, x As Long, i As Long
Dim b As String, rep As String
Dim rs As New ADODB.Recordset

rep = ThisWorkbook.Path
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & rep & "\Access.mdb"
rs.Open "client", cnn


With Sheets("Feuil1")

    Derlig = .Cells(Rows.Count, 1).End(xlUp).Row
    .Range("A1:F" & Derlig).ClearContents
   
    For x = 0 To rs.Fields.Count - 1
        Cells(1, x + 1).Value = rs.Fields(x).Name
    Next x
   
    Derlig = .Cells(Rows.Count, 12).End(xlUp).Row
    If .Cells(Derlig, 12) = "" Then Exit Sub
    If Derlig = 1 Then
       b = Chr(39) & .Cells(Derlig, 12).Value & Chr(39)
            y = Len(b)
            b = Mid(b, 1, y)
    Else
        For i = 1 To Derlig
           b = b & Chr(39) & .Cells(i, 12) & Chr(39) & ", "
        Next i
            y = Len(b)
            b = Mid(b, 1, y - 2)
    End If


    Sql = "SELECT * FROM Client WHERE Nom_Client IN (" & b & ")" & ""
    Set rs = cnn.Execute(Sql)
    .Range("A2").CopyFromRecordset rs
   
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
   
End With

End Sub

 


Je n'ai pas intégré de Userform, et j'ai considéré que les noms à importer se trouvaient en colonne L (afin que l'importation n'écrase pas les noms saisis)

En attendant mieux vois si cela peut t'aider,

Très bonne soirée,

Mth
Pièce jointe:
zip Essai import client2.zip   [ Taille: 35.80 Ko - Téléchargements: 431 ]
Hors Ligne
Rapport   Haut 

Re: Importation de données spécifiques d'une Table Access avec ADO
#3
Débutant XLPages

Inscription: 05/12/2010

Messages: 14

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007,2010
Posté le : 05-01-2011 09h20
Bonjour,

Formidable !

C'est précisément ce que je souhaitais !

J'ai modifié le code pour bien prendre les noms_client en colonne A, et tout fonctionne parfaitement.

Private Sub Choix_Change2()
Dim Derlig As Long, x As Long, i As Long
Dim b As String, rep As String
Dim rs As New ADODB.Recordset

rep = ThisWorkbook.Path
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & rep & "\Access.mdb"
rs.Open "client", cnn


With Sheets("Feuil1")

    Derlig = .Cells(Rows.Count, 1).End(xlUp).Row
    .Range("B1:F" & Derlig).ClearContents
   
    For x = 0 To rs.Fields.Count - 1
        Cells(1, x + 1).Value = rs.Fields(x).Name
    Next x
   
    Derlig = .Cells(Rows.Count, 1).End(xlUp).Row
    If .Cells(Derlig, 1) = "" Then Exit Sub
    If Derlig = 1 Then
       b = Chr(39) & .Cells(Derlig, 1).Value & Chr(39)
            y = Len(b)
            b = Mid(b, 1, y)
    Else
        For i = 1 To Derlig
           b = b & Chr(39) & .Cells(i, 1) & Chr(39) & ", "
        Next i
            y = Len(b)
            b = Mid(b, 1, y - 2)
    End If


    Sql = "SELECT * FROM Client WHERE Nom_Client IN (" & b & ")" & ""
    Set rs = cnn.Execute(Sql)
    .Range("A2").CopyFromRecordset rs
   
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
   
End With

End Sub
 

Merci infiniment de ton aide.

J'ai une question subsidiaire : après l'import, les noms_client sont re-classés automatiquement par ordre alphabétique ? (ou dans l'ordre de la table Access?). Saurais-tu comment éviter cela ?


Hors Ligne
Rapport   Haut 

Re: Importation de données spécifiques d'une Table Access avec ADO
#4
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 05-01-2011 10h41
Bonjour manwe24,

Effectivement les enregistrements sont importés en suivant l'ordre de la table Access, si tu souhaites un tri particulier il faut l'intégrer dans la macro.
Très bonne journée à toi et @ +

Mth
Hors Ligne
Rapport   Haut 

Re: Importation de données spécifiques d'une Table Access avec ADO
#5
Débutant XLPages

Inscription: 05/12/2010

Messages: 14

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007,2010
Posté le : 05-01-2011 11h13
Ok. Je vais étudier la question, car je ne voudrais justement aucun tri.

Merci pour ta réponse et bonne journée !
Hors Ligne
Rapport   Haut 

Re: Importation de données spécifiques d'une Table Access avec ADO
#6
Débutant XLPages

Inscription: 05/12/2010

Messages: 14

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007,2010
Posté le : 06-01-2011 13h56
Bonjour à tous,

j'ai réalisé quelques recherches et effectivement Access applique un filtre automatique non désactivable (où en tout cas je n'ai pas trouvé comment) sur toutes les tables exportées dans Excel.

J'ai étudié la piste du codage SQL, et avec la clause ORDER BY, la seule à ma connaissance pouvant désactiver l'auto-tri d'Access, mais malheureusement elle applique forcément un tri alors que je souhaite garder l'ordre de saisie.

Si vous avez une idée....

Bonne journée.


Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes