Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

faire une copie d'une BD

3 réponses
Avatar
joseph84
Bonjour,

je voudrais faire une copie d'une BD =E0 partir d'une macro est ce que
c'est possible de faire ca sans que la BD soit ouverte?

merci!

3 réponses

Avatar
MichD
Bonjour,

Est-ce que ta BD est dans Excel, Access ou autre ?



MichD
------------------------------------------
"joseph84" a écrit dans le message de groupe de discussion :


Bonjour,

je voudrais faire une copie d'une BD à partir d'une macro est ce que
c'est possible de faire ca sans que la BD soit ouverte?

merci!
Avatar
joseph84
ma BD est sur Access désolé j'ai oublie ce detail
Avatar
MichD
Bonjour,


Essaie avec ceci :


'Seulement ces 3 lignes de code de la procédure
'ont besoin d'être défini selon les paramètres de ton application.

'CheminDb = "C:Mes documentsComptoir.mdb"
'NomTable = "Employés"
'Requete = "Select * From " & NomTable & ""

'ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE :
'Microsoft activex data objects 2.0 librairy
'Dans la fenêtre de l'éditeur de texte / barre des menus / outils / références / tu coches la bibliothèque.

'------------------------------------------
Sub ImporterDesDonnéesDeAccess()
(pas été testé avec Access 2007 et 2010)

'Si ta table dans Access contient un champ "OleObject"
'Il faut l'exclure de la requête...sinon ça va planter !!!

'Attention, si access possède un champ mémo
'Limitation à 1823 caractères le nombre de
'caractère importé dans Excel

'Les champs "date" de la table access vont apparaître
'dans excel sous leur forme numérique avec la méthode
'CopyFromRecordSet version 2000 et 2002. Au besoin
'prévoir quelques lignes de code pour formatage

Dim X As Integer, C As Integer
Dim Cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Rg As Range, Sh As Worksheet
Dim NbEnr As Long, CheminDb As String
Dim NomTable As String, NomFeuille As String
Dim Tblo As Variant, Requete As String

'******Variables à définir au besoin**********
CheminDb = "C:Mes documentsComptoir.mdb"
NomTable = "Employés"
Requete = "Select * From " & NomTable & ""
'*********************************************
'La chaîne de connexion à une base de donnée Access
Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminDb & ";"

'Ouverture du recordset
Rst.Open Requete, Cnt, adOpenStatic

'Si aucun enregistrement est trouvé lors de la requête
If Rst.RecordCount = 0 Then
MsgBox "Aucun enregistrement trouvé." & vbCrLf & _
"Fin de l'opération.", vbInformation + vbOKOnly, "Annulation"
' Ferme la connection et le recordset
Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set Sh = Nothing
Exit Sub
End If

'Éviter le rafraîchissement de l'écran
Application.ScreenUpdating = False

'Conserve dans une variable le nom de la feuille active.
NomFeuille = ThisWorkbook.ActiveSheet.Name

'Ajoute une nouvelle feuille où seront acheminées les données
Set Sh = Worksheets.Add

'détermine la cellule supérieur gauche où
'le recordset va être copié
With Sh
Set Rg = .Range("A1")
End With

'Si tu es intéressé de récupérer directement les noms
'des champs de ton recordset, tu peux utiliser ce
'qui suit :

Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
X = X + 1
Loop Until X = Rst.Fields.Count

'Section copiant le recordset dans excel
Rg.Offset(1).CopyFromRecordset Rst

'Redimensionnement des cellules.
Rg.CurrentRegion.Columns.AutoFit
Rg.CurrentRegion.Rows.AutoFit

'Sélection de la feuille au départ de la procédure
Worksheets(NomFeuille).Select

' Ferme la connection et le recordset
Rst.Close: Cnt.Close

'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set Sh = Nothing
Application.ScreenUpdating = True
End Sub
'------------------------------------------



MichD
------------------------------------------
"joseph84" a écrit dans le message de groupe de discussion :


ma BD est sur Access désolé j'ai oublie ce detail