OBJET RANGE DANS EXCEL !!!!

cs_bruno03 Messages postés 9 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 5 décembre 2002 - 3 déc. 2002 à 17:02
cs_bruno03 Messages postés 9 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 5 décembre 2002 - 5 déc. 2002 à 11:54
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

carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
4 déc. 2002 à 17:49
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
cs_bruno03 Messages postés 9 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 5 décembre 2002
5 déc. 2002 à 09:27
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
carnez Messages postés 120 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 2 août 2004
5 déc. 2002 à 11:53
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
cs_bruno03 Messages postés 9 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 5 décembre 2002
5 déc. 2002 à 11:54
ok et merci
0
Rejoignez-nous