[vba] Pb avec la méthode 'Range'...

Fermé
Jo - 20 janv. 2006 à 10:20
 Jo - 20 janv. 2006 à 14:13
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 !

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

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...
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
20 janv. 2006 à 13:24
bonjour,

 Range("B3").Select

essaie de mettre

wsExcel.Range("B3").Select


A+
0
Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 214
20 janv. 2006 à 13:26
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 :-)

0
Re salut !

Tout d'abord un grand merci pour vos réponses !

J'ai testé ta solution Kobaya, mais maintenant j'ai le message d'erreur suivant : "Propriété ou méthode non gérée par cet objet" pourtant ta solution me parait très cohérente, c'est bizare...
0