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

Copie sauvegarde sans code VBA

2 réponses
Avatar
Pampa-sr
Bonjour =E0 tous,

J'=E9labore une base de donn=E9es sous Excel. Cette base est=20
aliment=E9e par un userform d=E9di=E9 =E0 cet effet. Par mesure de=20
s=FBret=E9, je souhaite cr=E9er une copie de sauvegarde=20
automatique tous les n enregistrements ; mais ceci,=20
uniquement pour la feuille contenant les donn=E9es, =E0=20
l'exclusion du classeur entier (avec le code) En effet, le=20
code p=E8se lourd dans la taille du fichier et n'est pas=20
utile. Est-il possible de r=E9aliser cette proc=E9dure avec=20
une commande de type "FileCopy" ou encore "SaveCopyAs" ?
Dans la mesure du r=E9alisable, j'aimerais aussi =E9viter une=20
proc=E9dure qui cr=E9erait un nouveau classeur dans lequel=20
serait copi=E9e/coll=E9e la feuille de donn=E9es puis=20
refermerait le classeur en l'enregistrant.

Merci pour le temps pris et les conseils de chacun.

@+

2 réponses

Avatar
Hervé
Salut Pampa,
Tu peux essayer avec ADO, coche "Microsoft ActiveX Data Objects 2.5 Library"
dans outils références... Adapte le chemin et nom du classeur dans la proc
"ConnecterBase" puis le nom de la feuille dans les autres.
Tu peux appeler une des 2 procs ("AjoutALaFeuille", "SauveTouteLaFeuille")à
partir du module de la feuille qui te sert de base en éffectuant un comptage
de lignes ajoutées :

Private Sub ConnecterBase(ConnectBD As ADODB.Connection, _
Optional Rs)

Dim Fichier As String
Fichier = "D:Classeur_Sauvegarde.xls"

Set ConnectBD = New ADODB.Connection
If Not IsMissing(Rs) Then
Set Rs = New ADODB.Recordset
End If

ConnectBD.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;IMEX=2;"""

End Sub

Private Sub AjoutALaFeuille()
Dim ConnectBD As ADODB.Connection
Dim NomFeuille As String
Dim ChaineSQL As String
Dim Nom As String
Dim Prenom As Integer
Dim Salaire As Integer
Dim Prime As Integer
Dim DateEntree As Date
Dim DateSortie As Date
Dim I As Integer

ConnecterBase ConnectBD

NomFeuille = "Feuil2"

'ici tu peux éviter les variables
'en entrant directement dans la chaine
'les valeurs mais c'est moins clair
For I = 2 To [A65536].End(xlUp).Row
Nom = Cells(I, 1)
Prenom = Cells(I, 2)
Salaire = Cells(I, 3)
Prime = Cells(I, 4)
DateEntree = Cells(I, 5)
DateSortie = Cells(I, 6)

'la feuille entre 2 accents(Alt Gr + 7)
'et avec 1 $ à la fin
'Col A = F1, Col B = F2, etc...
'les valeurs texte entre apostrophes
'les valeurs date ente dièse
ChaineSQL = "INSERT INTO `" & NomFeuille & "$`"
ChaineSQL = ChaineSQL & "(F1,F2,F3,F4,F5,F6) "
ChaineSQL = ChaineSQL & "VALUES ('" _
& Nom & "','" _
& Prenom & "'," _
& Salaire & "," _
& Prime & ",#" _
& DateEntree & "#,#" _
& DateSortie & "#)"

ConnectBD.Execute ChaineSQL

Next I

ConnectBD.Close

Set ConnectBD = Nothing
End Sub

Private Sub SauveTouteLaFeuille()
Dim ConnectBD As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Champ As ADODB.Field
Dim Fe As Worksheet
Dim NomFeuille As String
Dim I As Integer, J As Integer

ConnecterBase ConnectBD, Rs

NomFeuille = "Feuil2"

Set Fe = ThisWorkbook.Worksheets("Feuil1")
With Rs
.CursorType = 1
.LockType = 3
.Open "SELECT * FROM `" & NomFeuille & "$`", ConnectBD
Do While Not .EOF
I = I + 1
'les champs (colonnes) doivent être contiguës
For Each Champ In .Fields
J = J + 1
Champ.Value = Fe.Cells(I, J)
Next
J = 0
.Update
.MoveNext
Loop
End With
ConnectBD.Close
Set ConnectBD = Nothing
Set Rs = Nothing
Set Champ = Nothing
End Sub

Hervé.

"Pampa-sr" a écrit dans le message
news: 0b6301c368ae$1dc3df40$
Bonjour à tous,

J'élabore une base de données sous Excel. Cette base est
alimentée par un userform dédié à cet effet. Par mesure de
sûreté, je souhaite créer une copie de sauvegarde
automatique tous les n enregistrements ; mais ceci,
uniquement pour la feuille contenant les données, à
l'exclusion du classeur entier (avec le code) En effet, le
code pèse lourd dans la taille du fichier et n'est pas
utile. Est-il possible de réaliser cette procédure avec
une commande de type "FileCopy" ou encore "SaveCopyAs" ?
Dans la mesure du réalisable, j'aimerais aussi éviter une
procédure qui créerait un nouveau classeur dans lequel
serait copiée/collée la feuille de données puis
refermerait le classeur en l'enregistrant.

Merci pour le temps pris et les conseils de chacun.

@+
Avatar
ru-th
Salut

une possibilité, remplaces par le nom de ta feuille
à mettre dans le module de la feuille concernée

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [j:J]) Is Nothing Then Exit Sub
If Application.CountA([j:J]) Mod 10 = 0 Then
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Feuil1").Copy
ActiveWorkbook.SaveAs ("zaza.xls")
ActiveWorkbook.Close
compteur = 0
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End If
End Sub

bon, avant que l'on me le dise, il restera ce bout de code dans le zaza.xls,
mais est-ce un problème ?
si oui, rappelles, on le supprimera
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

"Pampa-sr" a écrit dans le message
de news: 0b6301c368ae$1dc3df40$
Bonjour à tous,

J'élabore une base de données sous Excel. Cette base est
alimentée par un userform dédié à cet effet. Par mesure de
sûreté, je souhaite créer une copie de sauvegarde
automatique tous les n enregistrements ; mais ceci,
uniquement pour la feuille contenant les données, à
l'exclusion du classeur entier (avec le code) En effet, le
code pèse lourd dans la taille du fichier et n'est pas
utile. Est-il possible de réaliser cette procédure avec
une commande de type "FileCopy" ou encore "SaveCopyAs" ?
Dans la mesure du réalisable, j'aimerais aussi éviter une
procédure qui créerait un nouveau classeur dans lequel
serait copiée/collée la feuille de données puis
refermerait le classeur en l'enregistrant.

Merci pour le temps pris et les conseils de chacun.

@+