VBA: Exporter un enregistrement d'un classeur ouvert à un classeur fermé (de sauvegarde)
15 réponses
Emile63
Bonjour =E0 tous,
Depuis un classeur* je cherche =E0 copier/exporter des donn=E9es sur un cla=
sseur ferm=E9 (afin de statistiques et de journalisation).=20
A cet effet, je me suis inspir=E9 de l'Excel-entissime site de M. Boisgonti=
er, en utilisant le code ci-dessous, mais =E7a plantouille..=20
Avec cette description d'erreur :-/
=20
***MSG: Erreur d'=E9x=E9cution=20
Mise =E0 jour impossible.La base de donn=E9e ou l'objet est en lecture seul=
e.
'---------------------------------------
Sub AjoutEnregistrement()
'Code permettant d'ajouter un enregistrement en fin de fichier [Source: htt=
p://boisgontierjacques.free.fr/]
Dim MonRepertoire$, MonFichier$, Fichier$
MonRepertoire =3D "C:\Users\Emile\Documents\Temporaires\"
MonFichier =3D "MonFichierTestQuiRe=E7oitUnEnregistrement.xlsm"
Fichier =3D MonRepertoire & MonFichier
Set cnn =3D New ADODB.Connection
cnn.Open "Provider=3DMicrosoft.Jet.OLEDB.4.0;Data Source=3D" & Fichier & =
";Extended Properties=3DExcel 8.0;" ' [Erreur ICI]
Set rs =3D New ADODB.Recordset
rs.Open "SELECT * from [Feuil1$A1:C1000]", cnn, adOpenDynamic, adLockOpti=
mistic
rs.AddNew
rs(0).Value =3D [MaZone_a_Exporter] ' Il s'agit de la zone: A2,B2,C2,D2,E=
2, F2 de la Feuil1 du classeur actuel
rs.Update
rs.Close
cnn.Close
End Sub
'------------------------------------------
*Par exemple un mod=E8le de Factures.xltm dont je voudrais garder tous les =
montants factur=E9s (=E0 l'impression) sur une autre feuille pour le journa=
l de facturation du jour/semaine/mois.
-Est-ce que quelqu'un pourrait me venir en aide SVP ? =20
Je vous remercie d'avance pour votre aide et conseils.
Cordialement,
Emile
| Ceux qui reviennent le + souvent: 13 incompatibilité de type **** Ce type d'erreur est fréquent. Je te donne un petit exemple Dim X As Long Dans une procédure, tu essaies d'attribuer une chaîne de caractères à la variable X X = "Toto" Cela génère le type d'erreur que tu soulignes. Évidemment, ce n'est qu'un exemple...
Attention, si tu ajoutes des données d'un champ de la table qui est vide... où qui n'a pas le bon type de données...
| quand il ne trouve pas [Table] **** La "table" doit exister dans ledit fichier du répertoire. Regarde dans le fichier exemple que j'ai joint comment cela fonctionne... Tout le code est commenté et il fonctionne très bien...même s'il n'a pas été testé exhaustivement!
| Quand les 2 fichiers sont sur le même répertoire, cela **** Dans le fichier exemple que je t'ai fourni, tu peux déplacer le fichier de destination des données dans un autre répertoire et cela fonctionne très bien! Est-ce possible que le chemin + le nom du fichier représente une chaîne de caractères trop longue?
Dans le fichier exemple, j'ai utilisé ceci pour faire ce test : (les 2 fichiers ont la version Excel 2003) Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:UsersMichDDocumentsBase de données.xls;" & _ "Extended Properties=""Excel 8.0;HDR=YES;"""
Je peux difficilement en faire plus!
Un exemple non testé avec l'ouverture du fichier :
'------------------------------------------------------- Sub test() Dim Fichier As String, Feuille As String Dim DerLig As Long, Wk As Workbook
With Wk With .Worksheets(Feuille) DerLig = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'écrire les données que tu veux dans la feuille .Range("A" & DerLig) = "X" .Range("B" & DerLig) = "XX" .Range("C" & DerLig) = "Y" .Range("D" & DerLig) = "Z" End With End With 'Fermeture du classeur avec sauvegarde Wk.Close True Set Wk = Nothing Application.ScreenUpdating = True Application.EnableEvents = True
End Sub '-------------------------------------------------------
Message d'erreur :
| Ceux qui reviennent le + souvent: 13 incompatibilité de type
**** Ce type d'erreur est fréquent. Je te donne un petit exemple
Dim X As Long
Dans une procédure, tu essaies d'attribuer une chaîne de caractères à la variable X
X = "Toto"
Cela génère le type d'erreur que tu soulignes. Évidemment, ce n'est qu'un exemple...
Attention, si tu ajoutes des données d'un champ de la table qui est vide... où qui n'a
pas le bon type de données...
| quand il ne trouve pas [Table]
**** La "table" doit exister dans ledit fichier du répertoire. Regarde dans le fichier exemple que
j'ai joint
comment cela fonctionne... Tout le code est commenté et il fonctionne très bien...même s'il
n'a pas
été testé exhaustivement!
| Quand les 2 fichiers sont sur le même répertoire, cela
**** Dans le fichier exemple que je t'ai fourni, tu peux déplacer le fichier de destination des
données
dans un autre répertoire et cela fonctionne très bien!
Est-ce possible que le chemin + le nom du fichier représente une chaîne de caractères trop
longue?
Dans le fichier exemple, j'ai utilisé ceci pour faire ce test : (les 2 fichiers ont la
version Excel 2003)
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:UsersMichDDocumentsBase de données.xls;" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""
Je peux difficilement en faire plus!
Un exemple non testé avec l'ouverture du fichier :
'-------------------------------------------------------
Sub test()
Dim Fichier As String, Feuille As String
Dim DerLig As Long, Wk As Workbook
With Wk
With .Worksheets(Feuille)
DerLig = .Range("A" & .Rows.Count).End(xlUp).Row + 1
'écrire les données que tu veux dans la feuille
.Range("A" & DerLig) = "X"
.Range("B" & DerLig) = "XX"
.Range("C" & DerLig) = "Y"
.Range("D" & DerLig) = "Z"
End With
End With
'Fermeture du classeur avec sauvegarde
Wk.Close True
Set Wk = Nothing
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'-------------------------------------------------------
| Ceux qui reviennent le + souvent: 13 incompatibilité de type **** Ce type d'erreur est fréquent. Je te donne un petit exemple Dim X As Long Dans une procédure, tu essaies d'attribuer une chaîne de caractères à la variable X X = "Toto" Cela génère le type d'erreur que tu soulignes. Évidemment, ce n'est qu'un exemple...
Attention, si tu ajoutes des données d'un champ de la table qui est vide... où qui n'a pas le bon type de données...
| quand il ne trouve pas [Table] **** La "table" doit exister dans ledit fichier du répertoire. Regarde dans le fichier exemple que j'ai joint comment cela fonctionne... Tout le code est commenté et il fonctionne très bien...même s'il n'a pas été testé exhaustivement!
| Quand les 2 fichiers sont sur le même répertoire, cela **** Dans le fichier exemple que je t'ai fourni, tu peux déplacer le fichier de destination des données dans un autre répertoire et cela fonctionne très bien! Est-ce possible que le chemin + le nom du fichier représente une chaîne de caractères trop longue?
Dans le fichier exemple, j'ai utilisé ceci pour faire ce test : (les 2 fichiers ont la version Excel 2003) Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:UsersMichDDocumentsBase de données.xls;" & _ "Extended Properties=""Excel 8.0;HDR=YES;"""
Je peux difficilement en faire plus!
Un exemple non testé avec l'ouverture du fichier :
'------------------------------------------------------- Sub test() Dim Fichier As String, Feuille As String Dim DerLig As Long, Wk As Workbook
With Wk With .Worksheets(Feuille) DerLig = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'écrire les données que tu veux dans la feuille .Range("A" & DerLig) = "X" .Range("B" & DerLig) = "XX" .Range("C" & DerLig) = "Y" .Range("D" & DerLig) = "Z" End With End With 'Fermeture du classeur avec sauvegarde Wk.Close True Set Wk = Nothing Application.ScreenUpdating = True Application.EnableEvents = True
End Sub '-------------------------------------------------------
MichD
Bonjour,
| Juste une question : les caractères accentuées sont-ils acceptés dans les strings?
**** OUI
Bonjour,
| Juste une question : les caractères accentuées sont-ils acceptés dans
les strings?
| Juste une question : les caractères accentuées sont-ils acceptés dans les strings?
**** OUI
MichD
Erreur 13, suppose que le champ Sexe contient un chiffre et l'erreur est générée.
Rst(4).Value = CStr([Sexe])
Rst(3).Value = CDate([Âge]) Si le champ "Âge" ne contient pas une date, la même chose
Pour tester la procédure, n'utilise pas de gestion d'erreur pour tester la procédure cela va t'aider à identifier les problématiques sur les lignes de code qui pose problème!
Il est toujours possible d'ajouter un IF... Else Then afin de t'assurer que le contenu correspond bien au type de données du champ.
Erreur 13, suppose que le champ Sexe contient un chiffre et l'erreur est générée.
Rst(4).Value = CStr([Sexe])
Rst(3).Value = CDate([Âge])
Si le champ "Âge" ne contient pas une date, la même chose
Pour tester la procédure, n'utilise pas de gestion d'erreur pour tester la procédure
cela va t'aider à identifier les problématiques sur les lignes de code qui pose
problème!
Il est toujours possible d'ajouter un IF... Else Then afin de t'assurer que le contenu
correspond bien au type de données du champ.
Erreur 13, suppose que le champ Sexe contient un chiffre et l'erreur est générée.
Rst(4).Value = CStr([Sexe])
Rst(3).Value = CDate([Âge]) Si le champ "Âge" ne contient pas une date, la même chose
Pour tester la procédure, n'utilise pas de gestion d'erreur pour tester la procédure cela va t'aider à identifier les problématiques sur les lignes de code qui pose problème!
Il est toujours possible d'ajouter un IF... Else Then afin de t'assurer que le contenu correspond bien au type de données du champ.
benoit
MichD wrote:
Bonjour,
| Juste une question : les caractères accentuées sont-ils acceptés dans les strings?
**** OUI
Faut pas crier, je ne suis pas sourd des yeux.
-- "La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !" [ Albert Einstein ]
MichD <michdenis@hotmail.com> wrote:
Bonjour,
| Juste une question : les caractères accentuées sont-ils acceptés dans
les strings?
**** OUI
Faut pas crier, je ne suis pas sourd des yeux.
--
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La
pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et
personne ne sait pourquoi !" [ Albert Einstein ]
| Juste une question : les caractères accentuées sont-ils acceptés dans les strings?
**** OUI
Faut pas crier, je ne suis pas sourd des yeux.
-- "La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !" [ Albert Einstein ]
Emile63
Ok, merci MichD,
Je regarde tous ça et je pars a la chasse aux erreurs. :-) (J'ai déjà commencé a mettre un IF) Merci pour tes solutions toujours très justes et pertinentes. ;-) Cordialement,
Emile
Ok, merci MichD,
Je regarde tous ça et je pars a la chasse aux erreurs. :-)
(J'ai déjà commencé a mettre un IF)
Merci pour tes solutions toujours très justes et pertinentes. ;-)
Cordialement,
Je regarde tous ça et je pars a la chasse aux erreurs. :-) (J'ai déjà commencé a mettre un IF) Merci pour tes solutions toujours très justes et pertinentes. ;-) Cordialement,