Incrémenter régulièrement un onglet Excel à partir d'une table ACCESS

Messieurs-dames bonjour !

En ce jour ensoleillé, j'essaie de finir un projet sur ACCESS et un coup de pouce serait le bienvenu si vous tomber sur mon topic..

En résumé:

- j'ai crée une base ACCESS qui me fourni tous les jours une table "RESULTATS_J" avec des données mise à jour --> ça, c'est OK.

--> je souhaite, via un bouton de mon formulaire ACCESS, ajouter ces données à un fichier excel "VENTES" déjà existant (onglet "RECAP"), sans supprimer les données présentes dans cet onglet.

C'est à dire, je cherche la 1ere ligne non vide de mon onglet excel existant, et je copie-colle mes données de la table access à la suite

J'ai trouvé la façon d'exporter mes données dans mon fichier excel, mais ça écrase les données à chaque fois, or je veux les incrémenter à la suite..

Ma première question:

  • Est ce réalisable sur le principe ?
  • Est ce que quelqu'un a des billes à me fournir ou un exemple existant dont je pourrai m'inspirer ?

Merci à bientôt

Bonjour Sidwel,

à tester,

Set wk = Workbooks("MonFichierExcel.xlsm") 'à adapter
Set sh = wk.Sheets("Feuil1")  'à adapter
LastRow = sh.Cells(Rows.Count, "A").End(xlUp).Row + 1 ' + 1 pour la première ligne vide

Bonjour i20100

Merci pour ton retour

Alors pour aller chercher la 1ere ligne non vide, je vois le code à utiliser. Mais ma question c'est plus sur comment incorporer ceci dans ma base existante ?

Je n'ai pas crée de module VBA directement dans ma base, j'ai utilisé la fonctionnalité "macro" via l'action "ImporterExporterFeuilleDeCalcul". Et en convertissant la macro en VB (fonctionnalité ACCESS qui me dépanne bien ), cela me sort le code suivant:

Function Export_VENTES()

End Function

--> Je me demande comment intégrer la notion de recherche de la 1ere ligne non vide de l'onglet excel où je déverse ma table access?

J'aurai dû commencer par fournir ces lignes de codes dans mon message initial, désolée !

re,

est ce que le fichier "VENTES.xlsx" est ouvert au moment du transfert ?

Re,

Non fermé quand je lance ma base Access !

et au moment de l'exécution de Function Export_VENTES() ?

re,

voici un exemple pour connaitre la première cellule vide de la colonne A

Sub Test_LastRow()
Dim Fichier As String, NomFeuille As String, texte_SQL As String
Dim cn As Object    'ADODB.Connection
Dim Rst As Object    'ADODB.Recordset

Fichier = "C:\Users\isabelle\Documents\test ADODB\Data_Demo_ADO.xlsx"  'à adapter
NomFeuille = "Donnees" 'à adapter

        Set cn = New ADODB.Connection
        With cn
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
            texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
            Set Rst = New ADODB.Recordset
            Rst.Open texte_SQL, cn, adOpenKeyset, adLockOptimistic
            Rst.MoveLast
            MsgBox Range("A" & Rst(0) + 2).Address
            .Close
        End With
End Sub

Merci pour ce retour

Mon fichier Excel est toujours fermé et c’est access qui l’ouvre pour copier coller les données.

Je regarde ce bout de code et je vous fais un retour dans la soirée, je vais essayer de joindre le fichier, ce sera plus parlant pour échanger.

re,

si le fichier excel a été ouvert au moment de l'exécution de Export_VENTES

il y a possibilité de faire plus simple,

as-tu attribue une référence d'objet à application excel et au fichier excel pour l'ouvrir ?

Re I20100,

Je ne peux pas te joindre ma base de données car le site ne prend pas l'extension

Sais tu comment je pourrai te la partager ? ça serait vraiment plus explicite. J'ai crée une base "fake" juste pour ne pas mettre les données professionnelles, mais le principe est exactement le même !

Je pense que oui, le fichier excel s'ouvre quand access lancer l'export, mais cela ne se voit pas (ou alors ça va très vite..).

De mon côté, j'ai "juste" utilisé une "action" disponible dans ACCESS pour exporter ma table "T_ResultatsNew" et le bout de code que ça produit est le suivant:

[size=85]Option Compare Database

End Function[/size]

Merci encore..

re,

à tester sur un Module,

Sub Export_After_LastRow()
Dim Fichier As String, NomFeuille As String, texte_SQL As String, rng As String
Dim cn As Object
Dim Rst As Object

Fichier = "C:\Users\isabelle\Documents\test ADODB\Data_Demo_ADO.xlsx"  'à adapter
NomFeuille = "Donnees" 'à adapter

        Set cn = New ADODB.Connection
        With cn
            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
            texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
            Set Rst = New ADODB.Recordset
            Rst.Open texte_SQL, cn, adOpenKeyset, adLockOptimistic
            Rst.MoveLast
            rng = NomFeuille & "!" & Range("A" & Rst(0) + 2).Address
            .Close
        End With
Export_VENTES Fichier, rng
End Sub

Function Export_VENTES(Fich, cellule)
On Error GoTo Export_VENTES_Err

DoCmd.TransferSpreadsheet acExport, 8, "RESULTATS_J", Fich, True, cellule

Export_VENTES_Exit:
Exit Function

Export_VENTES_Err:
MsgBox Error$
Resume Export_VENTES_Exit

End Function

Bonjour I20100

J'ai une "erreur de compilation: type défini par l'utilisateur non défini" en ce qui concerne le New ADODB.Connection

references erreur de compilation

L'idée ensuite c'est de faire une sub qui appelle Sub Export_After_LastRow() et Function Export_VENTES(Fich, cellule) ?

[size=85]Sub Export_After_LastRow()

End Function[/size]

Je dois continuer à travailler dessus aujourd'hui, au plaisir de te lire !

Merci et bonne journée

re,

J'ai une "erreur de compilation: type défini par l'utilisateur non défini" en ce qui concerne le New ADODB.Connection

il faut activer la référence: Microsoft ActiveX Data Objects xx Library

database reference

L'idée ensuite c'est de faire une sub qui appelle Sub Export_After_LastRow() et Function Export_VENTES(Fich, cellule) ?

tu peux appeler la macro Sub Export_After_LastRow() celle-ci appel la Function Export_VENTES(Fich, cellule)

ok pour la référence, je n'avais pas coché la bonne.

Je pense qu'on se rapproche!! mais il ne reconnait pas "Range" qui est souligné quand je lance l’exécution: "erreur de compilation: sub ou fonction non définie"

Peut être à cause du Rst qu'il ne prend pas car c'est une variable ?

Ce range c'est bien la 1ere cellule non vide en colonne A ?

J'ai essayé avec cells( ) : mais j'ai le même message d'erreur

rng = NomFeuille & "!" & cells(Rst(0) + 2, 1).Address

----------------Code--------------------------

[size=85]Option Compare Database

End Function[/size]

erreur de compil 18 02

re,

ok, remplace la ligne

rng = NomFeuille & "!" & Range("A" & Rst(0) + 2).Address

par

rng = NomFeuille & "!A" & Rst(0) + 2

Yes, ça l'a pris du coup !!

Mais.. il bloque avec le .Open grrr "Erreur 3706: impossible de trouver le fournisseur. Il est peut être mal installé."

Je cherche aussi sur internet, mais comme je n'ai pas bcp de recul je tâtonne comme tu peux le voir

bug open bug open2

voici une nouvelle version avec ACE

Sub Export_After_LastRow()
Dim Fichier As String, NomFeuille As String, texte_SQL As String, rng As String
Dim cn As Object
Dim Rst As Object

Fichier = "C:\Users\isabelle\Documents\test ADODB\Data_Demo_ADO.xlsx"  'à adapter
NomFeuille = "Donnees" 'à adapter

        Set cn = New ADODB.Connection
        With cn
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
            texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
            Set Rst = New ADODB.Recordset
            Rst.Open texte_SQL, cn, adOpenKeyset, adLockOptimistic
            Rst.MoveLast
            rng = NomFeuille & "!A" & Rst(0) + 2
            .Close
        End With
Export_VENTES Fichier, rng
End Sub

Function Export_VENTES(Fich, cellule)
On Error GoTo Export_VENTES_Err
DoCmd.TransferSpreadsheet acExport, 8, "RESULTATS_J", Fich, True, cellule
Export_VENTES_Exit:
Exit Function
Export_VENTES_Err:
MsgBox Error$
Resume Export_VENTES_Exit
End Function

En effet, en remplaçant JET par ACE, ça tourne.

Ce que je trouve bizarre c'est qu'il me dit que ma table a un nom non valide, pourtant je l'ai appelé "T_ResultatsNew"

Il a rajouté &A19/02/2019 au nom.. ?

Alors en effet, la dernière cellule nom vide avait la date 17/02/2019 donc +2 ça fait 19/02/2019.. mais pourquoi me le rajoute t-il lors de l'export..?

pas un nom valide

Bonjour,

J'ai essayé en nommant ma table différemment et sans caractères spéciaux "Resultats", j'ai la même alerte..

nom pas valide

Mais par contre, pas de bug dans le code j'ai l'impression

@I20100, as tu une idée ?

Option Compare Database

End Function

merci!!

5ventes.xlsx (10.57 Ko)

re,

un autre essai avec Rst.RecordCount

Sub Export_After_LastRow()
Dim Fichier As String, NomFeuille As String, texte_SQL As String, rng As String, n As Long
Dim cn As Object
Dim Rst As Object

Fichier = "C:\Users\isabelle\Documents\Test1\base2.xlsx"  'à adapter
NomFeuille = "Feuil1" 'à adapter

        Set cn = New ADODB.Connection
        With cn
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
            texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
            Set Rst = New ADODB.Recordset
            Rst.Open texte_SQL, cn, adOpenKeyset, adLockOptimistic
            n = Rst.RecordCount + 2
            rng = NomFeuille & "!A" & n
            .Close
        End With
Export_VENTES Fichier, rng
End Sub
Rechercher des sujets similaires à "incrementer regulierement onglet partir table access"