Export Donnees Excel dans Access

tdaoui

XLDnaute Junior
Bonjour à tous,
Bonjour le forum,

Je reviens vers vous pour m'aider à mettre à jour mon code SVP

l'idée et de transférer toutes les lignes d'une feuille Excel vers ACCESS (BDD)

Le code est OK sauf dans le cas ou une ligne est vide, il s'arrête là!!

et moi je voudrais qu'il ne transfère que les lignes pleine

Est ce que quelqu'un peut m'aider SVP?

Merci d'avance

Cdt,
TD
 

Pièces jointes

  • Clients-MDB.zip
    11.2 KB · Affichages: 73
  • Clients-XLS.zip
    13.3 KB · Affichages: 84

Caillou

XLDnaute Impliqué
Re : Export Donnees Excel dans Access

Bonjour,

Il suffit de rajouter une condition à l'intérieur de la boucle pour tester les lignes vides dans Excel.
Par exemple le code suivant ne copie pas les lignes si la colonne 1 dans Excel est vide:
For I = 2 To Feuille.Range("A65536").End(-4162).Row
If Feuille.Cells(I, 1) <> "" Then ...
...
End If
Next I

A+

Caillou
 
G

Guest

Guest
Re : Export Donnees Excel dans Access

bonjour TDaoui,

J'ai quelque peu modifié la procédure d'ajout des clients dans la table.
J'ai commenté (rajouté un ' devant) certaines parcequ'elles sont inutiles lorsque la procédure est appelé depuis le classeur client. Les rétablir le cas échéant et commenter la ligne Set Classeur = ThisWorkbook pour retrouver l'état d'origine.

Code:
Private Sub AjoutDansTableAccess(NomTable As String)
     Dim ConnectBD As Object
     Dim Rs As Object
     Dim AppExcel As Object
     Dim Classeur As Object
     Dim Feuille As Object
     Dim I As Integer
     MyPath = ActiveWorkbook.Path
     Set Classeur = ThisWorkbook 'Ligne ajoutée par hasco
 
     Application.StatusBar = "Ouverture du classeur Excel contenant les données à exporter ..."
     ' Les deux lignes suivante sont inutiles puisque la procédure
     ' est appelé depuis le classeur Clients
     'Set AppExcel = CreateObject("Excel.Application")
     'Set Classeur = AppExcel.Workbooks.Open(MyPath & "\Clients.xls")
     Set Feuille = Classeur.Worksheets("Liste des clients")   'Adapter le nom de la feuille
     'Connection à la base Accesse
     ConnecterBase ConnectBD, Rs
     'Inscrit les valeurs de la feuille Excel dans la table ListeClients
     With Rs
          .CursorType = 1
          .LockType = 3
          .Open "SELECT * FROM " & NomTable, ConnectBD
          'Ajout des enregistrements situés à partir de
          ' la ligne 2 afin d'éviter les entêtes de colonnes
          Nbrecords = Feuille.Range("A65536").End(-4162).Row - 1
          MsgBox Nbrecords
          For I = 2 To Feuille.Range("A65536").End(-4162).Row
               'Application.StatusBar = "Ajout de l'enregistrement " & I - 1 & " sur " & Nbrecords & _
                         '" dans la table Clients ..."
 
               'Si la cellule 1 de la ligne n'est pas vide
               If Cells(I, 1).Text <> "" Then 
                   .AddNew
 
                   .Fields("Client") = Feuille.Cells(I, 1)
 
                   .Fields("Rue") = Feuille.Cells(I, 2)
 
                   .Fields("Adresse") = Feuille.Cells(I, 3)
 
                   .Fields("CPVille") = Feuille.Cells(I, 4)
 
                   .Fields("Pays") = Feuille.Cells(I, 5)
 
                   .Update
                End If
          Next I
     End With
     Application.StatusBar = ""
     ConnectBD.Close
     Classeur.Close
     AppExcel.Quit
     ' Met fin à l'association entre la variable et l'objet associé
     'Set AppExcel = Nothing 
     'Set Classeur = Nothing
     'Set Feuille = Nothing
     Set ConnectBD = Nothing
     Set Rs = Nothing
End Sub
Private Sub ConnecterBase(ConnectBD As Object, Rs As Object)
     MyPath = ActiveWorkbook.Path & "\"
     ' Déclaration de référence d'objet à une variable
     Set ConnectBD = CreateObject("ADODB.Connection")
     Set Rs = CreateObject("ADODB.Recordset")
     With ConnectBD
          .Provider = "Microsoft.Jet.OLEDB.4.0"
          'Ici le chemin et le nom de la base Access
          .ConnectionString = MyPath & "Clients.mdb"
          .Open
     End With
End Sub

Avec cette macro et les données exemple, 48 clients sont ajoutés à la base (64 lignes - les lignes vides)

A bientôt
 

tdaoui

XLDnaute Junior
Re : Export Donnees Excel dans Access

Bonjour à tous,

Toujours dans cet exemple
Je souhaite mettre à jour certaines données dans la même table

Est ce que vous pouvez m'aider à trouver un code à rajouter au code ci-dessus pour mettre à jour seulement la BDD (en fonction de la clé primaire)

Merci d'avance pour votre aide

Cdt,
Tarek
 

RENAUDER

Nous a quitté
Repose en paix
Re : Export Donnees Excel dans Access

Bonjour,
Je n'arrive pas à ouvrir ta base Access. je n'ai Access 2000.
Je te joins un exemple de mise à jour qui pourra t'inspirer.
Code:
Sub UpdateData_ADO()
    Dim Rs1 As ADODB.Recordset
    Set Rs1 = New ADODB.Recordset
    Nom = "Café Paris"
    Rs1.Open Source:="Distributeurs", _
             ActiveConnection:="DBQ=" & ThisWorkbook.Path & "\DataBaseName.MDB;" & _
                               "Driver={Microsoft Access Driver (*.mdb)};", _
             CursorType:=adOpenStatic, _
             LockType:=adLockOptimistic, _
             Options:=adCmdTable
    With Rs1
        .MoveFirst
        Do Until .EOF
            If .Fields("Distributor") = "Café Paris" Then
                !ContactName = "Eric"
                .Update
            End If
            .MoveNext
        Loop
    End With
    Rs1.Close
End Sub
 
C

Compte Supprimé 979

Guest
Re : Export Donnees Excel dans Access

Salut tout le monde,

Sur l'idée d'Eric, tu peux essayer d'utiliser ce code
Code:
Sub Test()
  MaJTableAccess "ListeClients", "Clien ND 18", "Adresse", "Rue des ESSAIS"
End Sub
 
' VSearch = valeur à chercher dans le champ 'Client' (par exemple)
' VChamp = Champ à modifier
' VModif = valeur à mettre
Private Sub MaJTableAccess(NomTable As String, VSearch, VChamp, VModif)
  Dim ConnectBD As Object
  Dim Rs As Object
  On Error GoTo Erreur
  ' Connection à la base Access
  ConnecterBase ConnectBD, Rs
  ' Avec le RecordSet, ouvrir celui qui nous intéresse
  With Rs
    .LockType = 3
    .Open "SELECT * FROM " & NomTable & " WHERE [Client]= '" & VSearch & "'", ConnectBD
    ' Modifié les informations
    .Fields(VChamp) = VModif
  End With
 
Exit_Erreur:
  Exit Sub
 
Erreur:
  MsgBox Err.Number & " - " & Err.Description
  ConnectBD.Close
  Set ConnectBD = Nothing
  Set Rs = Nothing
  GoTo Exit_Erreur
End Sub

Différence, je ne parcour pas tous les enregistrements pour modifier le bon.
Je filtre tout simplement l'enregistrement qui m'intéresse

Sinon en faisant une recherche avancée sur ce forum, tu dois pouvoir un tas de trucs intéressant sur la gestion d'une BdD Access via Excel

Et notamment la contribution de notre ami Wilfried_42, ICI

A+
 

Discussions similaires

Réponses
1
Affichages
234
  • Question
Microsoft 365 Excel vba
Réponses
5
Affichages
360

Statistiques des forums

Discussions
312 492
Messages
2 088 925
Membres
103 984
dernier inscrit
maliko67