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

enregistrement dans une table access

9 réponses
Avatar
Rémi
bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table access
(un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se plante
si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides peuvent
être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:\ENRG\ENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la table
ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close

9 réponses

Avatar
Daniel.C
Bonjour.
Ajoute la condition :
If Application.CountA([A1:B12]) < 24 Then
'ce que tu veux faire dans ce cas-là
End If
(remplace "tableau" par la plage correspondant à ton tableau).
Cordialement.
Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table access
(un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se plante
si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides peuvent
être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la table
ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close


Avatar
Daniel.C
Peut-être :

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

'Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un
tableau
If Application.CountA(Plage2) = 24 Then
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
Else
MsgBox ("Tableau incomplet")
End If
' Fermeture de la base ENRG.mdb
Db2.Close

Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table access
(un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se plante
si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides peuvent
être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la table
ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close


Avatar
Daniel.C
Oups; Plutôt :

Bonjour.
Ajoute la condition :
If Application.CountA([A1:B12]) < 24 Then
'ce que tu veux faire dans ce cas-là
End If
(remplace [A1:B12] par la plage correspondant à ton tableau).
Cordialement.
Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table access
(un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se
plante si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides
peuvent être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close




Avatar
Rémi
bonjour Daniel,
merci de t'intéresser à mon cas
seul problème je ne comprends pas tes explications et je suis bien incapable
d'écrire le code pour ce qu'il y a après Then
en fait, mon tableau va de la cellule A2 à C9 (la ligne 1 étant réservée à
l'entête)
donc dans ton code est-ce que je dois remplacer If
Application.CountA([A1:B12]) < 24 Then par If Application.CountA([A1:C9]) <
24 Then ?
et que dois je mettre après Then ???
moi ce que je souhaite c'est que les cellules vides ou égales à 0 dans les
lignes ne soient pas enregistrées
je dois t'expliquer que je ne connais pas la programmation VB (je ne suis
pas programmeur)
merci d'avance

"Daniel.C" a écrit dans le message de
news:
Bonjour.
Ajoute la condition :
If Application.CountA([A1:B12]) < 24 Then
'ce que tu veux faire dans ce cas-là
End If
(remplace "tableau" par la plage correspondant à ton tableau).
Cordialement.
Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table
access (un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se
plante si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides
peuvent être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close






Avatar
Daniel.C
Essaie le code que j'ai posté à 10:04:15.
Daniel

bonjour Daniel,
merci de t'intéresser à mon cas
seul problème je ne comprends pas tes explications et je suis bien incapable
d'écrire le code pour ce qu'il y a après Then
en fait, mon tableau va de la cellule A2 à C9 (la ligne 1 étant réservée à
l'entête)
donc dans ton code est-ce que je dois remplacer If
Application.CountA([A1:B12]) < 24 Then par If Application.CountA([A1:C9]) <
24 Then ?
et que dois je mettre après Then ???
moi ce que je souhaite c'est que les cellules vides ou égales à 0 dans les
lignes ne soient pas enregistrées
je dois t'expliquer que je ne connais pas la programmation VB (je ne suis pas
programmeur)
merci d'avance

"Daniel.C" a écrit dans le message de
news:
Bonjour.
Ajoute la condition :
If Application.CountA([A1:B12]) < 24 Then
'ce que tu veux faire dans ce cas-là
End If
(remplace "tableau" par la plage correspondant à ton tableau).
Cordialement.
Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table access
(un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se
plante si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides
peuvent être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close








Avatar
Rémi
Daniel,
désolé de t'e..........r avec mes problèmes mais ça ne fonctionne pas
en fait ce code fonctionne bien si toutes les lignes de mon tableau sont
complètées
imaginons que la ligne 1 soit ok que la ligne 2 soit vide et que la ligne 3
soit ok et que toutes les autres soient vides, le code plante
erreur d'exécution '3421' : erreur de conversion de type de données sur la
ligne ".Fields("temps") = Array2(x2, 3)"
il n'y aurait pas un code qui dirait : si l'une des cellules est vide ou
égale à zéro dans la ligne alors ne pas enregistrer la ligne ?
pour ma part ce que je ne dois pas avoir dans ma table access c'est des
enregistrements vides ou avec des champs contenant des valeurs nulles
je suis capable de controler les valeurs du tableau, c'est à dire que si
l'une des valeurs dans les colonnes A B ou C sont manquantes ou nulles alors
les valeurs des autres cellules seront soient vides ou nulles
merci d'avance

"Daniel.C" a écrit dans le message de
news:uTKLz%
Peut-être :

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

'Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
If Application.CountA(Plage2) = 24 Then
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
Else
MsgBox ("Tableau incomplet")
End If
' Fermeture de la base ENRG.mdb
Db2.Close

Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table
access (un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se
plante si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides
peuvent être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close






Avatar
Daniel.C
Peux-tu poster ton code ?
Daniel

Daniel,
désolé de t'e..........r avec mes problèmes mais ça ne fonctionne pas
en fait ce code fonctionne bien si toutes les lignes de mon tableau sont
complètées
imaginons que la ligne 1 soit ok que la ligne 2 soit vide et que la ligne 3
soit ok et que toutes les autres soient vides, le code plante
erreur d'exécution '3421' : erreur de conversion de type de données sur la
ligne ".Fields("temps") = Array2(x2, 3)"
il n'y aurait pas un code qui dirait : si l'une des cellules est vide ou
égale à zéro dans la ligne alors ne pas enregistrer la ligne ?
pour ma part ce que je ne dois pas avoir dans ma table access c'est des
enregistrements vides ou avec des champs contenant des valeurs nulles
je suis capable de controler les valeurs du tableau, c'est à dire que si
l'une des valeurs dans les colonnes A B ou C sont manquantes ou nulles alors
les valeurs des autres cellules seront soient vides ou nulles
merci d'avance

"Daniel.C" a écrit dans le message de
news:uTKLz%
Peut-être :

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

'Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
If Application.CountA(Plage2) = 24 Then
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la table
ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
Else
MsgBox ("Tableau incomplet")
End If
' Fermeture de la base ENRG.mdb
Db2.Close

Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table access
(un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se
plante si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides
peuvent être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close








Avatar
michdenis
Bonjour,

Lors d'une exportation de données vers Access, on se doit
de respecter un certain nombre de choses :

A ) Dans Access, chacun des champs a un type de données
bien défini. On doit s'assurer cet élément pour chacun
des champs est respecté

B ) Dans certains cas, certains champs (ou tous) doivent contenir
une valeur pour qu'Access accepte d'enregistrer l'enregistrement.
Ça peut poser problème si ton tableau dans Excel contient des cellules vides !

En fait, il faut ouvrir la table Access, et regarder la constitution de la table
et des critères de validation pour pouvoir en tenir compte dans l'élaboration
de la procédure d'automatisation d'exportation des données.



"Rémi" a écrit dans le message de groupe de
discussion :
Daniel,
désolé de t'e..........r avec mes problèmes mais ça ne fonctionne pas
en fait ce code fonctionne bien si toutes les lignes de mon tableau sont
complètées
imaginons que la ligne 1 soit ok que la ligne 2 soit vide et que la ligne 3
soit ok et que toutes les autres soient vides, le code plante
erreur d'exécution '3421' : erreur de conversion de type de données sur la
ligne ".Fields("temps") = Array2(x2, 3)"
il n'y aurait pas un code qui dirait : si l'une des cellules est vide ou
égale à zéro dans la ligne alors ne pas enregistrer la ligne ?
pour ma part ce que je ne dois pas avoir dans ma table access c'est des
enregistrements vides ou avec des champs contenant des valeurs nulles
je suis capable de controler les valeurs du tableau, c'est à dire que si
l'une des valeurs dans les colonnes A B ou C sont manquantes ou nulles alors
les valeurs des autres cellules seront soient vides ou nulles
merci d'avance

"Daniel.C" a écrit dans le message de
news:uTKLz%
Peut-être :

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

'Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
If Application.CountA(Plage2) = 24 Then
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
Else
MsgBox ("Tableau incomplet")
End If
' Fermeture de la base ENRG.mdb
Db2.Close

Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table
access (un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se
plante si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides
peuvent être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close






Avatar
Rémi
bonjour Michel,
en effet tu as raison
je me suis juste accomodé du défaut. J'enregistre donc tous les champs (tous
les champs non remplis sont égal à 0)
ce que je fais dans Access c'est une requête sur un champs de type >0, et
les affichages ne me font ressortir que les valeurs qui m'intéresse
c'est pas très catholique mais ça fonctionne
encore merci à Daniel de m'avoir aider
à ce propos, il m'aurait été difficile de poster mon boulot c'est un
ensemble de beaucoup d'éléments etc...
merci à tous

"michdenis" a écrit dans le message de
news:
Bonjour,

Lors d'une exportation de données vers Access, on se doit
de respecter un certain nombre de choses :

A ) Dans Access, chacun des champs a un type de données
bien défini. On doit s'assurer cet élément pour chacun
des champs est respecté

B ) Dans certains cas, certains champs (ou tous) doivent contenir
une valeur pour qu'Access accepte d'enregistrer l'enregistrement.
Ça peut poser problème si ton tableau dans Excel contient des cellules
vides !

En fait, il faut ouvrir la table Access, et regarder la constitution de la
table
et des critères de validation pour pouvoir en tenir compte dans
l'élaboration
de la procédure d'automatisation d'exportation des données.



"Rémi" a écrit dans le message de
groupe de
discussion :
Daniel,
désolé de t'e..........r avec mes problèmes mais ça ne fonctionne pas
en fait ce code fonctionne bien si toutes les lignes de mon tableau sont
complètées
imaginons que la ligne 1 soit ok que la ligne 2 soit vide et que la ligne
3
soit ok et que toutes les autres soient vides, le code plante
erreur d'exécution '3421' : erreur de conversion de type de données sur la
ligne ".Fields("temps") = Array2(x2, 3)"
il n'y aurait pas un code qui dirait : si l'une des cellules est vide ou
égale à zéro dans la ligne alors ne pas enregistrer la ligne ?
pour ma part ce que je ne dois pas avoir dans ma table access c'est des
enregistrements vides ou avec des champs contenant des valeurs nulles
je suis capable de controler les valeurs du tableau, c'est à dire que si
l'une des valeurs dans les colonnes A B ou C sont manquantes ou nulles
alors
les valeurs des autres cellules seront soient vides ou nulles
merci d'avance

"Daniel.C" a écrit dans le message de
news:uTKLz%
Peut-être :

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

'Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
If Application.CountA(Plage2) = 24 Then
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
Else
MsgBox ("Tableau incomplet")
End If
' Fermeture de la base ENRG.mdb
Db2.Close

Daniel

bonjour,
j'ai ce code qui me permet d'enregistrer mes données dans une table
access (un grand merci à FdeCourt sur ce coup là)
tout fonctionne bien si toutes les cellules sont remplies, mais ça se
plante si le tableau n'est pas complet
comment faire pour qu'il n'y ai pas d'enregistrement si les cellules
sont
vides ou égales à 0 (zéro) ??????
c'est un tableau à trois colonnes et 8 lignes, mais les lignes vides
peuvent être à n'importe quel endroit
un grand merci d'avance

Dim Plage2 As Range
Dim Array2 As Variant
Dim x2 As Variant
Dim Db2 As Database
Dim Rs2 As Recordset
' Ouverture de la base de données ENRG_NVX.mdb
Set Db2 = DBEngine.OpenDatabase("B:ENRGENRG_ESSAI.mdb")
' Ouverture de la table ENRG_NVX
' Un objet Recordset représente les enregistrements d'une table
Set Rs2 = Db2.OpenRecordset("machtps", dbOpenDynaset)
' Détermination de la taille de la plage à envoyer vers Access

Sheets("db1").Select


Set Plage2 = Range("A1").Resize(Cells(65536, 1).End(xlUp).Row - 1,
3).Offset(1, 0)

Plage2.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array2 = Plage2.Value
' Ecriture des données depuis Excel vers les enregistrement de la
table ENRG
For x2 = 1 To UBound(Array2, 1)
With Rs2
.AddNew
.Fields("dossier") = Array2(x2, 1)
.Fields("machine") = Array2(x2, 2)
.Fields("temps") = Array2(x2, 3)
.Update
End With
Next
' Fermeture de la base ENRG.mdb
Db2.Close