Bonjour,
j'avance mais en définitive il y a trop de chose que je ne comprends pas et
ça me bloque (il faut dire que je n'ai jamais suivi de cours de
programmation)
je tente d'adapter ce bout de code à mon cas pour récupérer des données vers
une table access mais je bute sur la compréhension des erreurs
si quelqu'un pouvait m'aider j'en serais très heureux
merci d'avance
Rémi
Dim Plage As Range
Dim Array1 As Variant
Dim x As Variant
Dim Db1 As Database
Dim Rs1 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db1 = DBEngine.OpenDatabase("B:\ENRG\ENRG_NVX.mdb")
' Ouverture de la table Factures
' Un objet Recordset représente les enregistrements d'une table
Set Rs1 = Db1.OpenRecordset("enrg", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access
Set Plage = Worksheets("dossier de
fabrication").Range("D4").CurrentRegion.Offset(1, 0) --->ici j'ai mis la
cellule D4 mais sans savoir si c'est vraiment ça
Set Plage = Plage.Resize(Plage.Rows.Count - 1,
Plage.Columns.Count) --->ici il y a une erreur d'exécution '1004' : erreur
définie par l'application ou par l'objet
Plage.Select
' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array1 = Plage.Value
' Ecriture des données depuis Excel vers les enregistrement de la table
ENRG
For x = 1 To UBound(Array4, 4) --->ici j'ai indiqué la cellule D4 mais
je ne sais toujours pas si c'est ça
With Rs1
.AddNew
.Fields("date_arrivee") = Array1(11, 4) --->je veux
récupérer les données de la cellule K4
.Fields("dossier") = Array1(4, 4) --->je veux récupérer les
données de la cellule D4
.Fields("client") = Array1(4, 6) --->je veux récupérer les
données de la cellule D6
.Fields("designation") = Array1(4, 7) --->je veux récupérer
les données de la cellule D7
.Fields("quantite") = Array1(5, 10) --->je veux récupérer les
données de la cellule E10
.Fields("date_livraison") = Array1(17, 4) --->je veux
récupérer les données de la cellule Q4
.Update
End With
Next
' Fermeture de la base ENRG_NVX.mdb
Db1.Close
' Effacement des données copiées vers la base (sauf les titres)
With Selection.CurrentRegion
Intersect(.Cells, .Offset(1)).Select
End With
Selection.ClearContents
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
FdeCourt
Salut,
Il y a une erreur, car tu demande à ce que la plage soit redefini avec 0 ligne, ce qui n'est pas possible puisque tu n'a mis qu'une cellule (D4)
Ce bout de code : Set Plage = Worksheets("dossier de fabrication").Range ("D4").CurrentRegion.Offset(1, 0)
te permet de sélectionner la plage D5. Au lieu de mettre D4, tu devrais mettre toute la plage qui contient les données que tu souhaites transférer dans Access (entetes de colonne comprises), genre "A1:G5"
Avec le code ci-dessus, la plage sera automatiquement reduite aux lignes et colonnes réellement utilisées, puis décaler d'une ligne ver s le bas pour probablement éviter les entêtes.
ENsuite, le code Set plage = plage.Resize(plage.Rows.Count - 1, plage.Columns.Count) te permet de réduire la taille de ta plage d'une ligne. Avec le code précédent, la plage a été décalée d'une ligne vers le bas, donc au lien de A1:G5, plage est devenue A2:G6, or la ligne G6 est vide. Le Resize permet de retransformer plage en A2:G5.
Enfin, pour finir, je trouve que c'est une méthode bien compliquée pour sélectionner une plage !!!!
Si je puis me permettre, essayes avec un truc comme ca :
Set plage = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1, 10).Offset(1, 0)
Ou tu mets la première cellule de ta plage de données (Range("A1") Ou 10 correspond aux nombre de colonne dans ta plage de données Le .Offset te permet d'exclure les entêtes. S'il n'y en a pas, tu peux supprimer ce dernier bout de code (.Offset...)
Cordialement,
F.
Salut,
Il y a une erreur, car tu demande à ce que la plage soit redefini avec
0 ligne, ce qui n'est pas possible puisque tu n'a mis qu'une cellule
(D4)
Ce bout de code :
Set Plage = Worksheets("dossier de fabrication").Range
("D4").CurrentRegion.Offset(1, 0)
te permet de sélectionner la plage D5.
Au lieu de mettre D4, tu devrais mettre toute la plage qui contient
les données que tu souhaites transférer dans Access (entetes de
colonne comprises), genre "A1:G5"
Avec le code ci-dessus, la plage sera automatiquement reduite aux
lignes et colonnes réellement utilisées, puis décaler d'une ligne ver s
le bas pour probablement éviter les entêtes.
ENsuite, le code Set plage = plage.Resize(plage.Rows.Count - 1,
plage.Columns.Count) te permet de réduire la taille de ta plage d'une
ligne.
Avec le code précédent, la plage a été décalée d'une ligne vers le
bas, donc au lien de A1:G5, plage est devenue A2:G6, or la ligne G6
est vide. Le Resize permet de retransformer plage en A2:G5.
Enfin, pour finir, je trouve que c'est une méthode bien compliquée
pour sélectionner une plage !!!!
Si je puis me permettre, essayes avec un truc comme ca :
Set plage = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
10).Offset(1, 0)
Ou tu mets la première cellule de ta plage de données (Range("A1")
Ou 10 correspond aux nombre de colonne dans ta plage de données
Le .Offset te permet d'exclure les entêtes. S'il n'y en a pas, tu peux
supprimer ce dernier bout de code (.Offset...)
Il y a une erreur, car tu demande à ce que la plage soit redefini avec 0 ligne, ce qui n'est pas possible puisque tu n'a mis qu'une cellule (D4)
Ce bout de code : Set Plage = Worksheets("dossier de fabrication").Range ("D4").CurrentRegion.Offset(1, 0)
te permet de sélectionner la plage D5. Au lieu de mettre D4, tu devrais mettre toute la plage qui contient les données que tu souhaites transférer dans Access (entetes de colonne comprises), genre "A1:G5"
Avec le code ci-dessus, la plage sera automatiquement reduite aux lignes et colonnes réellement utilisées, puis décaler d'une ligne ver s le bas pour probablement éviter les entêtes.
ENsuite, le code Set plage = plage.Resize(plage.Rows.Count - 1, plage.Columns.Count) te permet de réduire la taille de ta plage d'une ligne. Avec le code précédent, la plage a été décalée d'une ligne vers le bas, donc au lien de A1:G5, plage est devenue A2:G6, or la ligne G6 est vide. Le Resize permet de retransformer plage en A2:G5.
Enfin, pour finir, je trouve que c'est une méthode bien compliquée pour sélectionner une plage !!!!
Si je puis me permettre, essayes avec un truc comme ca :
Set plage = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1, 10).Offset(1, 0)
Ou tu mets la première cellule de ta plage de données (Range("A1") Ou 10 correspond aux nombre de colonne dans ta plage de données Le .Offset te permet d'exclure les entêtes. S'il n'y en a pas, tu peux supprimer ce dernier bout de code (.Offset...)
Cordialement,
F.
Daniel.C
Bonjour. Tu mets : Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count) Si la configuration de "Plage" est telle qu'elle n'a qu'une seule ligne ou une seule colonne, alors tu cherches à définir une plage de 0 ligne ou 0 colonne. Pour t'en assurer, essaie :
Set Plage = Worksheets("dossier de fabrication").Range("D4").CurrentRegion.Offset(1, 0) MsgBox "nbre de lignes : " & Plage.Rows.Count MsgBox "nbre de colonnes : " & Plage.Columns.Count Set Plage = Plage.Resize(plage.Rows.Count - 1, plage.Columns.Count)
Cordialement. Daniel
Bonjour, j'avance mais en définitive il y a trop de chose que je ne comprends pas et ça me bloque (il faut dire que je n'ai jamais suivi de cours de programmation) je tente d'adapter ce bout de code à mon cas pour récupérer des données vers une table access mais je bute sur la compréhension des erreurs si quelqu'un pouvait m'aider j'en serais très heureux merci d'avance Rémi
Dim Plage As Range Dim Array1 As Variant Dim x As Variant Dim Db1 As Database Dim Rs1 As Recordset ' Ouverture de la base de données ENRG_NVX.mdb Set Db1 = DBEngine.OpenDatabase("B:ENRGENRG_NVX.mdb") ' Ouverture de la table Factures ' Un objet Recordset représente les enregistrements d'une table Set Rs1 = Db1.OpenRecordset("enrg", dbOpenDynaset) ' Détermination de la taille de la plage à envoyer vers Access Set Plage = Worksheets("dossier de fabrication").Range("D4").CurrentRegion.Offset(1, 0) --->ici j'ai mis la cellule D4 mais sans savoir si c'est vraiment ça Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count) --->ici il y a une erreur d'exécution '1004' : erreur définie par l'application ou par l'objet Plage.Select ' Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = Plage.Value ' Ecriture des données depuis Excel vers les enregistrement de la table ENRG For x = 1 To UBound(Array4, 4) --->ici j'ai indiqué la cellule D4 mais je ne sais toujours pas si c'est ça With Rs1 .AddNew .Fields("date_arrivee") = Array1(11, 4) --->je veux récupérer les données de la cellule K4 .Fields("dossier") = Array1(4, 4) --->je veux récupérer les données de la cellule D4 .Fields("client") = Array1(4, 6) --->je veux récupérer les données de la cellule D6 .Fields("designation") = Array1(4, 7) --->je veux récupérer les données de la cellule D7 .Fields("quantite") = Array1(5, 10) --->je veux récupérer les données de la cellule E10 .Fields("date_livraison") = Array1(17, 4) --->je veux récupérer les données de la cellule Q4 .Update End With Next ' Fermeture de la base ENRG_NVX.mdb Db1.Close ' Effacement des données copiées vers la base (sauf les titres) With Selection.CurrentRegion Intersect(.Cells, .Offset(1)).Select End With Selection.ClearContents
Bonjour.
Tu mets :
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
Si la configuration de "Plage" est telle qu'elle n'a qu'une seule ligne
ou une seule colonne, alors tu cherches à définir une plage de 0 ligne
ou 0 colonne.
Pour t'en assurer, essaie :
Set Plage = Worksheets("dossier de
fabrication").Range("D4").CurrentRegion.Offset(1, 0)
MsgBox "nbre de lignes : " & Plage.Rows.Count
MsgBox "nbre de colonnes : " & Plage.Columns.Count
Set Plage = Plage.Resize(plage.Rows.Count - 1, plage.Columns.Count)
Cordialement.
Daniel
Bonjour,
j'avance mais en définitive il y a trop de chose que je ne comprends pas et
ça me bloque (il faut dire que je n'ai jamais suivi de cours de
programmation)
je tente d'adapter ce bout de code à mon cas pour récupérer des données vers
une table access mais je bute sur la compréhension des erreurs
si quelqu'un pouvait m'aider j'en serais très heureux
merci d'avance
Rémi
Dim Plage As Range
Dim Array1 As Variant
Dim x As Variant
Dim Db1 As Database
Dim Rs1 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db1 = DBEngine.OpenDatabase("B:ENRGENRG_NVX.mdb")
' Ouverture de la table Factures
' Un objet Recordset représente les enregistrements d'une table
Set Rs1 = Db1.OpenRecordset("enrg", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access
Set Plage = Worksheets("dossier de
fabrication").Range("D4").CurrentRegion.Offset(1, 0) --->ici j'ai mis la
cellule D4 mais sans savoir si c'est vraiment ça
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
--->ici il y a une erreur d'exécution '1004' : erreur définie par
l'application ou par l'objet
Plage.Select
' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array1 = Plage.Value
' Ecriture des données depuis Excel vers les enregistrement de la table
ENRG
For x = 1 To UBound(Array4, 4) --->ici j'ai indiqué la cellule D4 mais
je ne sais toujours pas si c'est ça
With Rs1
.AddNew
.Fields("date_arrivee") = Array1(11, 4) --->je veux récupérer
les données de la cellule K4
.Fields("dossier") = Array1(4, 4) --->je veux récupérer les
données de la cellule D4
.Fields("client") = Array1(4, 6) --->je veux récupérer les
données de la cellule D6
.Fields("designation") = Array1(4, 7) --->je veux récupérer
les données de la cellule D7
.Fields("quantite") = Array1(5, 10) --->je veux récupérer les
données de la cellule E10
.Fields("date_livraison") = Array1(17, 4) --->je veux
récupérer les données de la cellule Q4
.Update
End With
Next
' Fermeture de la base ENRG_NVX.mdb
Db1.Close
' Effacement des données copiées vers la base (sauf les titres)
With Selection.CurrentRegion
Intersect(.Cells, .Offset(1)).Select
End With
Selection.ClearContents
Bonjour. Tu mets : Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count) Si la configuration de "Plage" est telle qu'elle n'a qu'une seule ligne ou une seule colonne, alors tu cherches à définir une plage de 0 ligne ou 0 colonne. Pour t'en assurer, essaie :
Set Plage = Worksheets("dossier de fabrication").Range("D4").CurrentRegion.Offset(1, 0) MsgBox "nbre de lignes : " & Plage.Rows.Count MsgBox "nbre de colonnes : " & Plage.Columns.Count Set Plage = Plage.Resize(plage.Rows.Count - 1, plage.Columns.Count)
Cordialement. Daniel
Bonjour, j'avance mais en définitive il y a trop de chose que je ne comprends pas et ça me bloque (il faut dire que je n'ai jamais suivi de cours de programmation) je tente d'adapter ce bout de code à mon cas pour récupérer des données vers une table access mais je bute sur la compréhension des erreurs si quelqu'un pouvait m'aider j'en serais très heureux merci d'avance Rémi
Dim Plage As Range Dim Array1 As Variant Dim x As Variant Dim Db1 As Database Dim Rs1 As Recordset ' Ouverture de la base de données ENRG_NVX.mdb Set Db1 = DBEngine.OpenDatabase("B:ENRGENRG_NVX.mdb") ' Ouverture de la table Factures ' Un objet Recordset représente les enregistrements d'une table Set Rs1 = Db1.OpenRecordset("enrg", dbOpenDynaset) ' Détermination de la taille de la plage à envoyer vers Access Set Plage = Worksheets("dossier de fabrication").Range("D4").CurrentRegion.Offset(1, 0) --->ici j'ai mis la cellule D4 mais sans savoir si c'est vraiment ça Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count) --->ici il y a une erreur d'exécution '1004' : erreur définie par l'application ou par l'objet Plage.Select ' Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = Plage.Value ' Ecriture des données depuis Excel vers les enregistrement de la table ENRG For x = 1 To UBound(Array4, 4) --->ici j'ai indiqué la cellule D4 mais je ne sais toujours pas si c'est ça With Rs1 .AddNew .Fields("date_arrivee") = Array1(11, 4) --->je veux récupérer les données de la cellule K4 .Fields("dossier") = Array1(4, 4) --->je veux récupérer les données de la cellule D4 .Fields("client") = Array1(4, 6) --->je veux récupérer les données de la cellule D6 .Fields("designation") = Array1(4, 7) --->je veux récupérer les données de la cellule D7 .Fields("quantite") = Array1(5, 10) --->je veux récupérer les données de la cellule E10 .Fields("date_livraison") = Array1(17, 4) --->je veux récupérer les données de la cellule Q4 .Update End With Next ' Fermeture de la base ENRG_NVX.mdb Db1.Close ' Effacement des données copiées vers la base (sauf les titres) With Selection.CurrentRegion Intersect(.Cells, .Offset(1)).Select End With Selection.ClearContents
Rémi
je te remercie infinimentde ton aide, j'ai appliqué tes explications et ton correctif et je m'en suis tiré encore merci Rémi
"FdeCourt" a écrit dans le message de news: Salut,
Il y a une erreur, car tu demande à ce que la plage soit redefini avec 0 ligne, ce qui n'est pas possible puisque tu n'a mis qu'une cellule (D4)
Ce bout de code : Set Plage = Worksheets("dossier de fabrication").Range ("D4").CurrentRegion.Offset(1, 0)
te permet de sélectionner la plage D5. Au lieu de mettre D4, tu devrais mettre toute la plage qui contient les données que tu souhaites transférer dans Access (entetes de colonne comprises), genre "A1:G5"
Avec le code ci-dessus, la plage sera automatiquement reduite aux lignes et colonnes réellement utilisées, puis décaler d'une ligne vers le bas pour probablement éviter les entêtes.
ENsuite, le code Set plage = plage.Resize(plage.Rows.Count - 1, plage.Columns.Count) te permet de réduire la taille de ta plage d'une ligne. Avec le code précédent, la plage a été décalée d'une ligne vers le bas, donc au lien de A1:G5, plage est devenue A2:G6, or la ligne G6 est vide. Le Resize permet de retransformer plage en A2:G5.
Enfin, pour finir, je trouve que c'est une méthode bien compliquée pour sélectionner une plage !!!!
Si je puis me permettre, essayes avec un truc comme ca :
Set plage = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1, 10).Offset(1, 0)
Ou tu mets la première cellule de ta plage de données (Range("A1") Ou 10 correspond aux nombre de colonne dans ta plage de données Le .Offset te permet d'exclure les entêtes. S'il n'y en a pas, tu peux supprimer ce dernier bout de code (.Offset...)
Cordialement,
F.
je te remercie infinimentde ton aide, j'ai appliqué tes explications et ton
correctif et je m'en suis tiré
encore merci
Rémi
"FdeCourt" <fdecourt@gmail.com> a écrit dans le message de
news:e0b0ac0f-7743-4d7b-ba74-05b9d8fd8071@34g2000yqp.googlegroups.com...
Salut,
Il y a une erreur, car tu demande à ce que la plage soit redefini avec
0 ligne, ce qui n'est pas possible puisque tu n'a mis qu'une cellule
(D4)
Ce bout de code :
Set Plage = Worksheets("dossier de fabrication").Range
("D4").CurrentRegion.Offset(1, 0)
te permet de sélectionner la plage D5.
Au lieu de mettre D4, tu devrais mettre toute la plage qui contient
les données que tu souhaites transférer dans Access (entetes de
colonne comprises), genre "A1:G5"
Avec le code ci-dessus, la plage sera automatiquement reduite aux
lignes et colonnes réellement utilisées, puis décaler d'une ligne vers
le bas pour probablement éviter les entêtes.
ENsuite, le code Set plage = plage.Resize(plage.Rows.Count - 1,
plage.Columns.Count) te permet de réduire la taille de ta plage d'une
ligne.
Avec le code précédent, la plage a été décalée d'une ligne vers le
bas, donc au lien de A1:G5, plage est devenue A2:G6, or la ligne G6
est vide. Le Resize permet de retransformer plage en A2:G5.
Enfin, pour finir, je trouve que c'est une méthode bien compliquée
pour sélectionner une plage !!!!
Si je puis me permettre, essayes avec un truc comme ca :
Set plage = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
10).Offset(1, 0)
Ou tu mets la première cellule de ta plage de données (Range("A1")
Ou 10 correspond aux nombre de colonne dans ta plage de données
Le .Offset te permet d'exclure les entêtes. S'il n'y en a pas, tu peux
supprimer ce dernier bout de code (.Offset...)
je te remercie infinimentde ton aide, j'ai appliqué tes explications et ton correctif et je m'en suis tiré encore merci Rémi
"FdeCourt" a écrit dans le message de news: Salut,
Il y a une erreur, car tu demande à ce que la plage soit redefini avec 0 ligne, ce qui n'est pas possible puisque tu n'a mis qu'une cellule (D4)
Ce bout de code : Set Plage = Worksheets("dossier de fabrication").Range ("D4").CurrentRegion.Offset(1, 0)
te permet de sélectionner la plage D5. Au lieu de mettre D4, tu devrais mettre toute la plage qui contient les données que tu souhaites transférer dans Access (entetes de colonne comprises), genre "A1:G5"
Avec le code ci-dessus, la plage sera automatiquement reduite aux lignes et colonnes réellement utilisées, puis décaler d'une ligne vers le bas pour probablement éviter les entêtes.
ENsuite, le code Set plage = plage.Resize(plage.Rows.Count - 1, plage.Columns.Count) te permet de réduire la taille de ta plage d'une ligne. Avec le code précédent, la plage a été décalée d'une ligne vers le bas, donc au lien de A1:G5, plage est devenue A2:G6, or la ligne G6 est vide. Le Resize permet de retransformer plage en A2:G5.
Enfin, pour finir, je trouve que c'est une méthode bien compliquée pour sélectionner une plage !!!!
Si je puis me permettre, essayes avec un truc comme ca :
Set plage = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1, 10).Offset(1, 0)
Ou tu mets la première cellule de ta plage de données (Range("A1") Ou 10 correspond aux nombre de colonne dans ta plage de données Le .Offset te permet d'exclure les entêtes. S'il n'y en a pas, tu peux supprimer ce dernier bout de code (.Offset...)