OBJET RANGE DANS EXCEL !!!!

Signaler
Messages postés
9
Date d'inscription
lundi 4 novembre 2002
Statut
Membre
Dernière intervention
5 décembre 2002
-
Messages postés
9
Date d'inscription
lundi 4 novembre 2002
Statut
Membre
Dernière intervention
5 décembre 2002
-
salut a tous et j'espere avoir de l'aide car je suis bloqué

j'utilise office2000 et vb6

dans excel j'ai une macro qui liste des cellules et qui les affiche

sub macro1
dim toto as object
for each toto in range("A1:A10")
print toto
next
end sub

cette macro marche tres bien.

je la copie dans vb en ajoutant

Dim xlApp As Excel.Application

Sub Command1_Click()
Dim bc As Object
Set xlApp = New Excel.Application
xlApp.Visible = True
xlApp.Workbooks.Open FileName:="C:\temp\toto.xls"

For Each bc In xlApp.Range("A1:A5")
MsgBox bc
Next bc

xlApp.Quit
Set xlApp = Nothing

End Sub

Quand je lance le prog il bloque sur for each avec le message suivant

erreur d'execution 451
la procedure property let n'est pas definie et la procedure property get n'a pas renvoye un objet

L'executable marche sur un autre pc et pas sur le mien, qu'est ce que j'ai cassé (automation ???)

aidez moi SVP

4 réponses

Messages postés
120
Date d'inscription
jeudi 31 octobre 2002
Statut
Membre
Dernière intervention
2 août 2004

Bonjour,

pour lire un fichier Excel à partir d'Access, c'est un peu plus compliqué que celà : il faut partir d'une définition de zone qui reprend toutes tes données Excel, puis utiliser un recordset;

1- definition d'un nom de zone dans ton tableau Excel en partant d'Access

Sub definition_zone()
Dim Feuille, Classeur As Variant
Dim Xls As Excel.Workbook
Dim colonne As Integer
Dim ligne As Integer
Dim ligne_début As Integer
Dim colonne_début As Integer

Set Xls = GetObject(path) 'ok
Xls.Application.Visible = True 'ok
Xls.Application.Windows(1).Visible = True 'ok

Xls.Application.ActiveWorkbook.Activate 'ok
Classeur = Xls.Application.ActiveWorkbook.name 'ok
' nom de la feuille du classeur
Feuille = Xls.Application.Sheets(1).name
' positionnement sur la dernière cellule du tableau
Xls.Application.Worksheets(1).Cells(1, 1).Select 'ok
Xls.Application.ActiveCell.SpecialCells(xlLastCell).Select 'ok
' initialisation du début
ligne_début = 1
colonne_début = 1
' numéro de colonne et de ligne de la dernière cellule
colonne = Xls.Application.ActiveCell.Column 'ok
ligne = Xls.Application.ActiveCell.Row 'ok
' composition de la référence de la zone à créer
Feuille = Feuille & "'!L" & ligne_début & "C" & colonne_début & ":L" & ligne & "C" & colonne ' ok
' création de la zone de référence
Xls.Application.ActiveWorkbook.Names.Add name:="nom_de_zone", RefersToR1C1:= _
"='" & Feuille 'ok

Set Xls = Nothing

End Sub

2- lecture de ta feuille Excel

'ouverture de la connection à la table "tab_prix_achat_budget" ACCESS
Set Cnn_db = CurrentProject.Connection
Rst_db.Open "tab_prix_achat_budget", Cnn_db, adOpenKeyset, adLockOptimistic

' création de la zone nommée dans le fichier Excel
definition_zone

'ouverture de la connection au fichier EXCEL
With Cnn_ex
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Extended Properties").Value = "Excel 8.0"
.Open path
End With

' lecture du fichier EXCEL
Set Rst_ex = New adoDb.Recordset
Rst_ex.Open "nom_de_zone", Cnn_ex, , , adCmdTable
Do Until Rst_ex.EOF
' ajout dans la table access
With Rst_db
If IsNumeric(Rst_ex.Fields("Artcode")) Then ' si le code article est renseigné
.AddNew Array("code article", "prix achat budget 1er tri", "prix achat budget 2ème tri", "prix achat budget 3ème tri", "prix achat budget 4ème tri"), _
Array(Rst_ex.Fields("Artcode"), Rst_ex.Fields("1 trim"), Rst_ex.Fields("2 trim"), Rst_ex.Fields("3 trim"), Rst_ex.Fields("4 trim"))
.Update
End If
End With

Rst_ex.MoveNext ' ligne suivante du tableau EXCEL
Loop

' fermeture des connections
Cnn_ex.Close
Cnn_db.Close

Voilà, j'espère que ça te conviendra

oiseau
0
Messages postés
9
Date d'inscription
lundi 4 novembre 2002
Statut
Membre
Dernière intervention
5 décembre 2002

merci pour l'info mais je me suis peut-etre mal exprimé.
en fin mon petit prog a fonctionné et maintenant plus
Hier en rechargeant une base de registre ancienne j'ai pu le refaire tourner
j'en conclu que c'est une clé du registre qui est vérolée
connais tu un moyen de retrouver cette clé afin de la réparer

merci d'avance

bruno03
0
Messages postés
120
Date d'inscription
jeudi 31 octobre 2002
Statut
Membre
Dernière intervention
2 août 2004

Bonjour,

non, désolé, mais je ne connais pas le moyen de modifier la base de registres.

Par contre il me semble que dans le forum d'hier ou avant-hier, la question y était posée. Regardes, tu trouveras sans doute ce qui te convient

oiseau
0
Messages postés
9
Date d'inscription
lundi 4 novembre 2002
Statut
Membre
Dernière intervention
5 décembre 2002

ok et merci
0