Probleme avec excel commande

Signaler
Messages postés
213
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
1 avril 2009
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
salut a tous j'ai des problemes avec mon code d'export vers access , quant je lance mon il s'arrete a l'emplacement ecrit en rouge et souligne et me donne ce message :

Index non valide. (Exception de HRESULT : 0x8002000B (DISP_E_BADINDEX))


Dim con
As
New OleDb.OleDbConnection



Dim
da

As
OleDb.OleDbDataAdapter




Dim
sql

As



String








Dim
appxls

As
Microsoft.Office.Interop.Excel.Application 

con.ConnectionString =


"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Roaming_2002.mdb" 

 

 








' valeur(colonne,ligne)






Dim
i, lign1, lign2, lign3, lign4, lign5, lign6, lign7, lign8, lign9, lign10, lign11, repère

As



Integer






Dim
valeur_1(1, 10000), valeur_2(2, 10000), valeur_3(3, 10000), valeur_4(4, 10000), valeur_5(5, 10000), valeur_6(6, 10000)

As



String






Dim
valeur_7(7, 10000), valeur_8(8, 10000), valeur_9(9, 10000), valeur_10(10, 10000), valeur_11(11, 10000)

As



String






Dim
n

As



Decimal






'ProgressBar1.Value = 0






'ProgressBar1.Maximum = 1650






'ProgressBar1.Minimum = 0






'ProgressBar1.Value = 0






'ProgressBar1.Step = 1

appxls =




New
Microsoft.Office.Interop.Excel.Applicationbook = appxls.Workbooks.Open(excelfile)

repère = 1

lign1 = 2

valeur_1(1, lign1) = appxls.ActiveWorkbook.Worksheets(




"Données_Cartes_SIM"
).Range(

"A"





& lign1).Value            l'erreur est ici!!!!!!!!!





'Recuperation de la première colonne






Do



Until
valeur_1(1, lign1) =

""

valeur_1(1, lign1) = appxls.ActiveWorkbook.Worksheets(




"Données_Cartes_SIM"
).Range(

"A"
& lign1).Valuelign1 = lign1 + 1

valeur_1(1, lign1) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"A"
& lign1).Value


Loop

lign2 = 2


repère = lign1 - 1


ProgressBar1.Value = 0


ProgressBar1.Maximum = repère


ProgressBar1.Minimum = 0


ProgressBar1.Value = 0


ProgressBar1.Step = 1







'Recuperation de la deuxième colonne






Do



Until
repère lign2valeur_2(2, lign2) appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"B"
& lign2).Valuevaleur_3(3, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"C"
& lign2).Valuevaleur_4(4, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"D"
& lign2).Valuevaleur_5(5, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"E"
& lign2).Valuevaleur_6(6, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"F"
& lign2).Valuevaleur_7(7, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"G"
& lign2).Valuevaleur_8(8, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"H"
& lign2).Valuevaleur_9(9, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"I"
& lign2).Valuevaleur_10(10, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"j"
& lign2).Valuevaleur_11(11, lign2) = appxls.ActiveWorkbook.Worksheets(


"Données_Cartes_SIM"
).Range(

"K"
& lign2).Value


If
valeur_8(8, lign2) =

""



Then

valeur_8(8, lign2) =




"0"






End



If






If
valeur_9(9, lign2) =

""



Then

valeur_9(9, lign2) =




"0"






End



If

1 réponse

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Je n'ai pas testé si le phénomène est le même en .Net que tu utilises, mais en VB6, la déclaration de variable suivante ne veut pas dire que chaque variable sera de type Integer
   Dimi, lign1, lign2, lign3, lign4, lign5, lign6, lign7, lign8, lign9, lign10, lign11, repère
As

Integer

Seule "repère" sera de ce type, les précédente, non renseignées, seront du type Variant.
Idem pour tes tableaux, il faut répéter "As Integer" ou "As String" à chaque variable.
Est-ce que cela résoudra ton erreur, je ne le sais pas, mais .Net est très pointilleux avec les définitions.

D'autre part, méfie-toi du mélange des type de variables différentes entre elles.
Pense à convertir ton chiffre proprement en chaine avant de le concaténer.
   "A" & lign1.ToString

ATTENTION : Le VBA réagit comme du VB6 et le comportement de cette opération est différente de celle de .Net (catégorie de ta question) :
Si, en VBA, tu fais ceci, tu obtiendras cela :
   "A" & lign1         "A 2"    avec un espace entre le A et le 2 (pour le signe)
Utilise :
   "A" & CStr(lign1)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)