[vba] Pb avec la méthode 'Range'...
Jo
-
Jo -
Jo -
Bonjour !
J'ai fait un formulaire dans access qui boucle un certains nombre de fois (72 fois en tout mais pour l'instant je boucle 5 fois pour tester) et réalise à chaque boucle les opérations suivantes :
- ouvre un fichier Excel,
- insère les données provenant d'une requête dans le fichier
- sauvegarde le fichier sous un autre nom
- ferme le fichier
Mais quand je lance le formulaire il me renvoie le message "La méthode 'range' de l'objet '_global' a échoué', j'ai cherché sur le net, et apparement ça arrive quand on utilise range(cellule).value hors je n'utilise à aucun moment cela.
Je vous mets mon code afin d'avoir des commentaires sur celui-ci car je débute dans le vba, donc je suis toujours preneur de bons conseils, et si vous voyez comment je peux resoudre ce problème de message j'en serais très reconnaissant.
Bonne journée !
J'ai fait un formulaire dans access qui boucle un certains nombre de fois (72 fois en tout mais pour l'instant je boucle 5 fois pour tester) et réalise à chaque boucle les opérations suivantes :
- ouvre un fichier Excel,
- insère les données provenant d'une requête dans le fichier
- sauvegarde le fichier sous un autre nom
- ferme le fichier
Mais quand je lance le formulaire il me renvoie le message "La méthode 'range' de l'objet '_global' a échoué', j'ai cherché sur le net, et apparement ça arrive quand on utilise range(cellule).value hors je n'utilise à aucun moment cela.
Je vous mets mon code afin d'avoir des commentaires sur celui-ci car je débute dans le vba, donc je suis toujours preneur de bons conseils, et si vous voyez comment je peux resoudre ce problème de message j'en serais très reconnaissant.
Bonne journée !
Option Compare Database
Private Sub Commande0_Click()
On Error GoTo Err_Commande0_Click
'################################## DECLARATION DES VARIABLES #####################################
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim rst1 As DAO.Recordset
Set db = CurrentDb()
Dim i As Integer
Dim requete As String
Dim requete1 As String
Dim res As String
Dim res1 As String
Dim max As Integer
Dim REQnbRS As String
Dim REQnbLigne As String
Dim toto As Integer
'#################################### FIN DECLARATION #######################################
'#################################### NOMBRE DE REPRENTANTS #################################
REQnbRS = ("SELECT Count(Représentant.CodeReprésentant) AS NbReprésentant FROM Représentant")
Set rst1 = db.OpenRecordset(REQnbRS)
max = rst1("NbReprésentant")
'################################### FIN NOMBRE DE REPRESENTANTS ############################
'################################### BOUCLE SUR LES RS ######################################
For i = 1 To 5 'max
'################## OUVERTURE DU FICHIER COMMISSION.XLS ##########################################
'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("Z:\COMMON\DDI\Departement Clientele\Commission\Commission.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
appExcel.Visible = False
'################### FIN CREATION ################################################
requete = "SELECT NomReprésentant FROM Représentant WHERE Numéro = " & i
Set rst = db.OpenRecordset(requete)
'############################# DEBUT DE LA REQUETE ################################
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=MS Access Database;DBQ=Z:\COMMON\DDI\Departement Clientele\Listing\Listing France 2006.mdb;DriverId=25;FIL=MS Access;MaxBuf" _
), Array("ferSize=2048;PageTimeout=5;")), Destination:=Range("A6"))
.CommandText = Array( _
"SELECT ReqTest.CodePointDeVente, ReqTest.NomClient, ReqTest.CP, ReqTest.AdresseClient" & Chr(13) & "" & Chr(10) & "FROM `Z:\COMMON\DDI\Departement Clientele\Listing\Listing France 2006`.ReqTest ReqTest" & Chr(13) & "" & Chr(10) & "WHERE (ReqTest.CP=" & toto & ")" _
)
.Name = "Lancer la requête à partir de MS Access Database_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.Refresh BackgroundQuery:=False
End With
'############################## FIN DE LA REQUETE ############################################
'requete1 = "SELECT F10 FROM a_Strator WHERE F10 =" & rst
'Set rst = db.OpenRecordset(requete1)
res = rst("NomReprésentant")
'Sheets("Feuil1").Evaluate ("B3")
Range("B3").Select
ActiveCell.FormulaR1C1 = res
Columns("B:B").EntireColumn.AutoFit
'SAUVERGADE DES FICHIERS
wbExcel.SaveAs ("Z:\COMMON\DDI\Departement Clientele\Commission\" & res & ".xls")
wbExcel.Close 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel
'Désallocation mémoire
Set wsExcel = Nothing
Set wbExcel = Nothing
Set appExcel = Nothing
Next
MsgBox ("C fini !!")
Exit_Commande0_Click:
Exit Sub
Err_Commande0_Click:
MsgBox Err.Description
Resume Exit_Commande0_Click
End Sub
A voir également:
- [vba] Pb avec la méthode 'Range'...
- Input signal out of range - Forum Ecran
- Out of range - Forum Windows
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
- D'sub out of range - Forum Ecran
- Incompatibilité de type vba ✓ - Forum Programmation
4 réponses
Je viens de tester avec
-"wsExcel.Range("A6"))" j'ai le droit maintenant à "La plage de destination n'est pas dans la meme feuille de calcul que celle dans laquelle la table de requete est créée".
-"wbExcel.Range("A6))" : "Propriété ou méthode non gérée par cette objet". Même message pour "wbExcel.wsExel.Range("A6))"
Bon, je crois que d'ici la fin de la journée j'aurais eu tous les messages d'erreur de windows...
-"wsExcel.Range("A6"))" j'ai le droit maintenant à "La plage de destination n'est pas dans la meme feuille de calcul que celle dans laquelle la table de requete est créée".
-"wbExcel.Range("A6))" : "Propriété ou méthode non gérée par cette objet". Même message pour "wbExcel.wsExel.Range("A6))"
Bon, je crois que d'ici la fin de la journée j'aurais eu tous les messages d'erreur de windows...
salut,
"La méthode 'range' de l'objet '_global' a échoué', j'ai cherché sur le net, et apparement ça arrive quand on utilise range(cellule).value hors je n'utilise à aucun moment cela."
Et si tu utilise cela :
Ainsi dans la ligne :
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=MS Access Database;DBQ=Z:\COMMON\DDI\Departement Clientele\Listing\Listing France 2006.mdb;DriverId=25;FIL=MS Access;MaxBuf" _
), Array("ferSize=2048;PageTimeout=5;")), Destination:=Range("A6"))
tu dois écrire quelquechose comme :
Destination:=appExcel.wbExcel.wsExcel.Range("A6")
Bienvenu dans le monde VBA :-)
"La méthode 'range' de l'objet '_global' a échoué', j'ai cherché sur le net, et apparement ça arrive quand on utilise range(cellule).value hors je n'utilise à aucun moment cela."
Et si tu utilise cela :
Ainsi dans la ligne :
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=MS Access Database;DBQ=Z:\COMMON\DDI\Departement Clientele\Listing\Listing France 2006.mdb;DriverId=25;FIL=MS Access;MaxBuf" _
), Array("ferSize=2048;PageTimeout=5;")), Destination:=Range("A6"))
tu dois écrire quelquechose comme :
Destination:=appExcel.wbExcel.wsExcel.Range("A6")
Bienvenu dans le monde VBA :-)