Rechercher : dans
Par :

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

Dernière réponse le 20 jan 2006 à 14:13:17 Jo, le 20 jan 2006 à 10:20:25 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [vba] Pb avec la méthode 'Range'... » dans :
VBA et les collections d'objets. VoirVBA et les collections d'objets Quand plusieurs (beaucoup de) contrôles sont mis sur une feuille ou un Userform il est parfois fastidieux d'écrire du code dans chaque évènement des contrôles. Ce Tuto vous permet de traiter vos contrôles comme...
VBA Un timer une seconde tout simple VoirEn VBA, il n'y a pas (du moins à ma connaissance) de composant Timer. On peut en créer un très facilement. Dans un module de feuille Activer/ dés activer le timer : Placer un bouton sur Feuil1 et mettre le code... Private Sub...
Méthodologie de gestion de projet VoirLa gestion de projet - La nécessité d'une méthodologie claire On appelle « gestion de projet » (éventuellement « conduite de projet ») l'organisation méthodologique mise en œuvre pour faire en sorte que l'ouvrage réalisé par le maître...
Java: Les méthodes VoirLa notion de fonction et de méthode On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instruction par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs...
Méthode PERT VoirMéthode PERT La méthode PERT est une technique permettant de gérer l'ordonnancement dans un projet. La méthode PERT consiste à représenter sous forme de graphe, un réseau de tâches dont l'enchaînement permet d'aboutir à l'atteinte des objectifs...

1

JvDo, le 20 jan 2006 à 13:24:45

Bonjour,

 Range("B3").Select

essaie de mettre

wsExcel.Range("B3").Select


A+

Répondre à JvDo

2

Kobaya, le 20 jan 2006 à 13:26:30

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 :-)

A+,
Kobaya.

Répondre à Kobaya

3

Jo, le 20 jan 2006 à 13:52:51

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...

Répondre à Jo

4

 Jo, le 20 jan 2006 à 14:13:17
  • +1

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...

Répondre à Jo
Collection CommentÇaMarche.net