IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

[VBA] "La méthode 'range' de l'objet '_global' à échoué


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 89
    Points
    89
    Par défaut [VBA] "La méthode 'range' de l'objet '_global' à échoué
    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 !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    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

  2. #2
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Je dirais que la fermeture des fichiers Excel est mal gérée.

  3. #3
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 89
    Points
    89
    Par défaut
    Salut Franck et merci bien de la réponse, c'est fort aimable !

    En faite, ce que tu me dis ne me surprend pas. En effet, lorsque j'éxécute mon programme, celui-ci me fait des choses que l'on pourrait qualifier de bizare. Car quand je clic sur un fichier Excel créé, il m'ouvre ce fichier, mais aussi le premier fichier que j'ouvre (commission.xls).

    Pourtant j'ai pris ce code sur la faq de ce site, et il me parait très cohérent. (il sauvergade le fichier Excel avec un autre nom et ferme le fichier et reprend depuis le début, et ainsi de suite....) Algorithmiquement je le trouve correcte

    Donc... Je ne sais pas du tout

  4. #4
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    j'ai une petite procédure récupérée dans l'aide Access pour vérifier qu'il ne me reste pas d'instance excel ouverte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Public Sub VerifSiInstance()
    Dim MonOBjExcel As Excel.Application
     
     'Procedure dectects a running Excel and registers it.
        Const WM_USER = 1024
        Dim hWnd As Long
    ' If Excel is running this API call returns its handle.
        hWnd = FindWindow("XLMAIN", 0)
        If hWnd = 0 Then    ' 0 means Excel not running.
            Exit Sub
        Else
        ' Excel is running so use the SendMessage API
        ' function to enter it in the Running Object Table.
            'SendMessage hWnd, WM_USER + 18, 0, 0
            Set MonOBjExcel = GetObject(, "Excel.application")
            'MsgBox "Il reste un instance Excel ouverte !", vbExclamation
            MonOBjExcel.Quit
            Set MonOBjExcel = Nothing
        End If
     
    End Sub
    avec ceci à mettre en début de module juste après option explicit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' Declare necessary API routines:
    Declare Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As String, _
                        ByVal lpWindowName As Long) As Long
     
    Declare Function SendMessage Lib "user32" Alias _
    "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
                        ByVal wParam As Long, _
                        ByVal lParam As Long) As Long

  5. #5
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 89
    Points
    89
    Par défaut
    Alors, alors, je sais pas si ce que j'ai fait était ce qu'il faillait faire J'ai créé un module, mis la seconde partie de ton code après le "option explicit" puis la première partie du code à la suite.

    Je sais pas si il fallait mettre ce code dans un nouveau module d'Accès ou dans le formulaire que je suis en train de réaliser.

    Bref, j'ai fait cela, et rien ne change...

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/01/2009, 11h06
  2. Réponses: 3
    Dernier message: 16/11/2008, 00h30
  3. Erreur 1004: La méthode "Range" de l'objet "_global" a échoué
    Par Froggy007 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/09/2008, 23h05
  4. erreur La méthode 'Range' de l'objet '_Global' a échoué
    Par mahboub dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2006, 20h46
  5. [VBA-E]La méthode 'Range' de l'objet '_Global' a échoué
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/02/2006, 16h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo