Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1404 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  petit proble avec VBA

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

petit proble avec VBA

n°356646
toun
Posté le 09-04-2003 à 14:24:36  profilanswer
 

Voila , j'ai programmé une application VBA pour inserer des champs d'une feuille de calcul Excel dans une base de donnée Access. Mais j'ai un petit pb, il insere une seule ligne correctement, ensuite, il plante au niveau du second update. Et voici l'erreur qu'il me met:  
 
"Erreur d'execution '3022'
Erreur definie par l'application ou par l'objet"
 
et vu les erreurs floues de VBA, je ne comprend pas trop ce qui se passe!!!
 
Voici mon petit bout de programme:
 
Sub WritingWorksheetData_DAO()
 
      Dim Plage As Range
      Dim Array1 As Variant
      Dim x As Variant
      Dim Db1 As Database
      Dim Rs1 As Recordset
      Dim num As Integer
       
      num = 0
       
      ' Ouverture de la base de données Essai_base_produit.mdb
      Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & "\Essai_base_produit.mdb" )
       
      ' Ouverture de la table commande
      ' Un objet Recordset représente les enregistrements d'une table
      Set Rs1 = Db1.OpenRecordset("produit", dbOpenDynaset)
       
      ' Détermination de la taille de la plage à envoyer vers Access
      Set Plage = Worksheets("europrices" ).Range("A1" ).CurrentRegion.Offset(1, 0)
      Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
      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 commande
      For x = 1 To UBound(Array1, 1)
            With Rs1
                  .AddNew
                  .Fields("Numéro" ) = num + 1
                  .Fields("Nom" ) = Array1(x, 3)
                  .Fields("CAS Number" ) = Array1(x, 1)
                  .Fields("Fournisseur" ) = "Avocado"
                  .Fields("Product code" ) = Array1(x, 2)
                  .Fields("Quality" ) = Array1(x, 10)
                  .Fields("Molecular weight" ) = Array1(x, 11)
                  .Fields("Molecular formula" ) = Array1(x, 12)
                  .Update
             End With
      Next
       
      ' Fermeture de la base Essai_base_produit.mdb
      Essai_base_produit.Close
End Sub
 
 
 

mood
Publicité
Posté le 09-04-2003 à 14:24:36  profilanswer
 

n°356746
nur
Posté le 09-04-2003 à 15:46:56  profilanswer
 

Toun a écrit :

Voila , j'ai programmé une application VBA pour inserer des champs d'une feuille de calcul Excel dans une base de donnée Access. Mais j'ai un petit pb, il insere une seule ligne correctement, ensuite, il plante au niveau du second update. Et voici l'erreur qu'il me met:  
 
"Erreur d'execution '3022'
Erreur definie par l'application ou par l'objet"
 
et vu les erreurs floues de VBA, je ne comprend pas trop ce qui se passe!!!
 
Voici mon petit bout de programme:
 
Sub WritingWorksheetData_DAO()
 
      Dim Plage As Range
      Dim Array1 As Variant
      Dim x As Variant
      Dim Db1 As Database
      Dim Rs1 As Recordset
      Dim num As Integer
       
      num = 0
       
      ' Ouverture de la base de données Essai_base_produit.mdb
      Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & "\Essai_base_produit.mdb" )
       
      ' Ouverture de la table commande
      ' Un objet Recordset représente les enregistrements d'une table
      Set Rs1 = Db1.OpenRecordset("produit", dbOpenDynaset)
       
      ' Détermination de la taille de la plage à envoyer vers Access
      Set Plage = Worksheets("europrices" ).Range("A1" ).CurrentRegion.Offset(1, 0)
      Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
      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 commande
      For x = 1 To UBound(Array1, 1)
            With Rs1
                  .AddNew
                  .Fields("Numéro" ) = num + 1
                  .Fields("Nom" ) = Array1(x, 3)
                  .Fields("CAS Number" ) = Array1(x, 1)
                  .Fields("Fournisseur" ) = "Avocado"
                  .Fields("Product code" ) = Array1(x, 2)
                  .Fields("Quality" ) = Array1(x, 10)
                  .Fields("Molecular weight" ) = Array1(x, 11)
                  .Fields("Molecular formula" ) = Array1(x, 12)
                  .Update
             End With
      Next
       
      ' Fermeture de la base Essai_base_produit.mdb
      Essai_base_produit.Close
End Sub
 
 
 
 

je crois que c'est parce que tu as oublié: num=num+1
 
.AddNew
num=num+1
.Fields("Numéro" ) = num  
 
sinon tu es sur que:
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
      Plage.Select
     

est necessaire ?
 
array1=plage suffit (pas besoin de mettre .value)
                 

n°356759
toun
Posté le 09-04-2003 à 15:58:24  profilanswer
 

_pour array1=plage.value, c'est juste, le value n'est pas utile.
 
_Pour Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)  
     Plage.Select  
 
Tu me conseillerais de mettre quoi a la place?
 
_Et pour l'incrementation de num, c'est la meme chse si je l'incremente avant.
 
PS: soit indulgent, je commence VB depuis ce matin, alor je ne connais pas grand chose!
 
 
Encore une petite questio, comment tu peux dire dans une condition que deux truc sont different  
(ex en java: truc1 != truc2)
 
 
Merci

n°356766
nur
Posté le 09-04-2003 à 16:04:27  profilanswer
 

Toun a écrit :

_pour array1=plage.value, c'est juste, le value n'est pas utile.
 
_Pour Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)  
     Plage.Select  
 
Tu me conseillerais de mettre quoi a la place?
 
_Et pour l'incrementation de num, c'est la meme chse si je l'incremente avant.
 
PS: soit indulgent, je commence VB depuis ce matin, alor je ne connais pas grand chose!
 
 
Encore une petite questio, comment tu peux dire dans une condition que deux truc sont different  
(ex en java: truc1 != truc2)
 
 
Merci

essaye de supprimer la ligne pôur voir
 
pour num il faut juste ne pas oublier de l'incrementer
 
if ch1 <> ch2 then
 
 
endif

n°356782
toun
Posté le 09-04-2003 à 16:11:25  profilanswer
 

Aparament, t'avais raison, les lignes
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)  
     Plage.Select  
       
ne sont pas utiles, ou du moins y'a pas de difference.
 
Mais c'est toujours la même chose, c'est a dire qu'il arrive a inserer la premiere ligne sans probleme, ensuite, pour le deuxieme enregistrement, il plante au niveau du update!

n°356795
nur
Posté le 09-04-2003 à 16:17:33  profilanswer
 

Toun a écrit :

Aparament, t'avais raison, les lignes
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)  
     Plage.Select  
       
ne sont pas utiles, ou du moins y'a pas de difference.
 
Mais c'est toujours la même chose, c'est a dire qu'il arrive a inserer la premiere ligne sans probleme, ensuite, pour le deuxieme enregistrement, il plante au niveau du update!


 
si tu as bien incrementer num je vois pas trop
teste avec tes msgbox() les differentes valeurs des variables pas a pas pour voir

n°356831
toun
Posté le 09-04-2003 à 16:44:56  profilanswer
 


A mon avis, ça ne viens pas de l'incrementation, car si je ne met pas le numero dans la base, ça plante aussi.
 
c'est chiant, ça fait une demi journée que je traine sur ce truc.
 
Merci quand même, tu m'as beaucoup aidé!

n°356864
toun
Posté le 09-04-2003 à 17:12:09  profilanswer
 

En fait, j'ai trouver pourquoi il ne voulait pas m'en inserer de nouvelles. C'est parce-que il essaie d'inserer la même ligne de la feuille de calcul il ne passe pas a la suivante, et àa, je ne comprend pas pourquoi.
 
Si t'as des idée, je suis ouvert.

n°357338
nur
Posté le 10-04-2003 à 06:32:51  profilanswer
 

bon bah moi j'ai fait ça et ça marche
mais c'est peut etre ds ta feuille excel que ça deconne,il faut verifier que tes données sont bien disposées de maniere a ce qu'il n'y ait pas de trous :
 
 
Sub WritingWorksheetData()
 
     Dim Plage As Range
     Dim Array1 As Variant
     Dim x As Variant
     Dim Db1 As Database
     Dim Rs1 As Recordset
     Dim num As Integer
     
     num = 0
     Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & "\Essai_base_produit.mdb" )
     Set Rs1 = Db1.OpenRecordset("produit", dbOpenDynaset)
     Set Plage = Worksheets("europrices" ).Range("A1" ).CurrentRegion.Offset(1, 0)
     
     Array1 = Plage
     
     For x = 1 To UBound(Array1, 1)
     num = num + 1
           With Rs1
                 .AddNew
                 .Fields("Numéro" ) = num
                 .Fields("Nom" ) = Array1(x, 3)
                 .Fields("CAS Number" ) = Array1(x, 1)
                 .Fields("Fournisseur" ) = "Avocado"
                 .Fields("Product code" ) = Array1(x, 2)
                 .Fields("Quality" ) = Array1(x, 10)
                 .Fields("Molecular weight" ) = Array1(x, 11)
                 .Fields("Molecular formula" ) = Array1(x, 12)
                 .Update
            End With
     Next
     
   
   Essai_base_produit.Close
End Sub
 
il faut pas oublier les references a access et microsoft dao 2.5 ds ton module bien sur.

n°357483
toun
Posté le 10-04-2003 à 10:47:03  profilanswer
 


C bon, j'ai trouvé, c'est une erreur con!
 
En fait, j'ai une colonne "specification" dans ma feuille de calcul, qui correspond a un pourcentage. Mais dans la deuxieme ligne, le pourcentage est accompagner d'un + : "98+", et dans ma table access, le type etait numerique. Honte a moi!!!!
 
Merci quand même d'avoir utilisé tous ce temps pour moi. A+
  :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  petit proble avec VBA

 

Sujets relatifs
Un petit défipetit pb avec retours à la ligne sous windows ou linux
PHP petit probleme avec ce langagecherche un petit programme pour les ti 83plus
Petit truc à la con sur VBfaire simplement un petit prog à partir une feuille exel....
Comment faire un petit logiciel ?[ CSS ] Petit probleme sous IE
[java] un petit pb entre String et Byte[VBA] Aligner les dessins sur la grille
Plus de sujets relatifs à : petit proble avec VBA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR