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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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.
@+
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
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" <franck.beaufrere@dd-94.travail.gouv.fr> a écrit dans le message
news: 0b6301c368ae$1dc3df40$a401280a@phx.gbl...
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.
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
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.
@+
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.
@+
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" <franck.beaufrere@dd-94.travail.gouv.fr> a écrit dans le message
de news: 0b6301c368ae$1dc3df40$a401280a@phx.gbl...
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.
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.