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

VBA Access Discussion :

Erreur d'exécution '1004' La méthode 'Columns' de l'objet '_Global' a échoué [AC-2003]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Erreur d'exécution '1004' La méthode 'Columns' de l'objet '_Global' a échoué
    Bonjour,

    J'ai créé une base de données que j'alimente tous les jours avec plusieurs fichiers.
    J'ai donc fait un module pour qu'elle s'alimente avec ces fichiers.

    Ayant 2 styles de fichiers (comportant chacun 7 fichiers) qui me permettent d'alimenter ma table, j'ai donc fait une boucle d'alimentation par style.
    La première boucle fonctionne bien, mais quand elle passe à la seconde il s'arrête sur ce code :

    Si j'arrête la macro et la fait repartir sur ma deuxième boucle, ça fonctionne.
    Si quelqu'un peut m'aider, ça serai super.

    Voici tout le code si besoin

    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
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    Public Fichier As String
    Sub MAJ_BDD_STVAD()
    'Suppression des anciennes données ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'Définition des dates
    DADEB = InputBox("Entrez la date du premier fichier STV au format aaaammjj", "Date")
    If DADEB = "" Then
        MsgBox ("Date non renseignée. Merci de renseigner la date")
        DADEB = InputBox("Entrez la date du premier fichier STV au format aaaammjj", "Date")
    End If
    DAFIN = InputBox("Entrez la date du dernier fichier STV au format aaaammjj", "Date")
    If DAFIN = "" Then
        MsgBox ("Date non renseignée. Merci de renseigner la date")
        DAFIN = InputBox("Entrez la date du dernier fichier STV au format aaaammjj", "Date")
    End If
     
    'Lancement d'une requête SQL de suppression ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SQL = "DELETE Date_recep "
    SQL = SQL + "FROM STV_AD "
    SQL = SQL + "WHERE Date_recep between " & DADEB & " and " & DAFIN & ";"
    'MsgBox (SQL)
    CurrentDb.Execute (SQL)
     
     
    'Alimentation de la base de données à partir d'un fichier Excel ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        'Définition pour le lancement d'Excel
        Dim Xl As Excel.Application
        Dim Classeur As Excel.Workbook
        Dim Feuille As Excel.Worksheet
     
        'Ouverture d'Excel
        Set Xl = New Excel.Application
        Xl.Visible = True
        'Ouverture du Classeur Excel
        For l = DADEB To DAFIN
     
        If FileExists("N:\Calexpress\13 - METHODES\13.2 Public\13.2.3 Divers\97 - Bases de données\POINTAGE\Fichier STV\SPECIFANALYSE COLIS NON POINTES EN A REEX_" & l & ".CSV") = True Then
           Set Classeur = Xl.Workbooks.Open("N:\Calexpress\13 - METHODES\13.2 Public\13.2.3 Divers\97 - Bases de données\POINTAGE\Fichier STV\SPECIFANALYSE COLIS NON POINTES EN A REEX_" & l & ".CSV")
           Else
           GoTo r
        End If
        'Affichage de la Feuille Excel à travailler
        Set Feuille = Classeur.Worksheets("SPECIFANALYSE COLIS NON POINTES")
     
        'Modification du fichier Excel
        Classeur.Activate
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 2), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 2), Array(13, 1 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1)), TrailingMinusNumbers:= _
            True
     
        Columns("A:A").Delete
        Columns("F:F").Delete
        Columns("G:I").Delete
        Columns("J:L").Delete
     
        'Columns("G:G").NumberFormat = "@"
     
        Range("A1").Value = "Agence_Départ"
        Range("B1").Value = "Date_PEC"
        Range("C1").Value = "Date_recep"
        Range("D1").Value = "Recep"
        Range("E1").Value = "Mode"
        Range("F1").Value = "Compte_Tiers"
        Range("G1").Value = "CD"
        Range("H1").Value = "Nbre_de_Colis"
        Range("I1").Value = "Nbre_Colis_non_lus"
     
     
     
        'Enregistrement au format xls
        ActiveWorkbook.SaveAs Filename:= _
            "N:\Calexpress\13 - METHODES\13.2 Public\13.2.3 Divers\97 - Bases de données\POINTAGE\Fichier STV\SPECIFANALYSE COLIS NON POINTES EN A REEX_" & l & ".xls" _
            , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
     
        'Variabilise l'accès et le nom du fichier
        Fichier = "N:\Calexpress\13 - METHODES\13.2 Public\13.2.3 Divers\97 - Bases de données\POINTAGE\Fichier STV\" & ActiveWorkbook.Name
     
        'Fermeture du Classeur
        Classeur.Close True
        'Fermeture d'Excel
        Xl.Quit
     
        Call Macro1
     
    r:
     
        Next l
     
     
    'Alimentation de la base de données à partir d'un fichier Excel ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        'Ouverture d'Excel
        Set Xl = New Excel.Application
        Xl.Visible = True
        'Ouverture du Classeur Excel
        For l = DADEB To DAFIN
     
        If FileExists("N:\Calexpress\13 - METHODES\13.2 Public\13.2.3 Divers\97 - Bases de données\POINTAGE\Fichier STV\SPECIFANALYSE COLIS NON POINTES EN D_" & l & ".CSV") = True Then
           Set Classeur = Xl.Workbooks.Open("N:\Calexpress\13 - METHODES\13.2 Public\13.2.3 Divers\97 - Bases de données\POINTAGE\Fichier STV\SPECIFANALYSE COLIS NON POINTES EN D_" & l & ".CSV")
           Else
           GoTo p
        End If
        'Affichage de la Feuille Excel à travailler
        Set Feuille = Classeur.Worksheets("SPECIFANALYSE COLIS NON POINTES")
     
        'Modification du fichier Excel
        Classeur.Activate
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 2), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 2 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1)), _
            TrailingMinusNumbers:=True
     
        Columns("F:H").Delete
        Columns("G:I").Delete
        Columns("J:L").Delete
     
        'Columns("G:G").NumberFormat = "@"
     
        Range("A1").Value = "Agence_Départ"
        Range("B1").Value = "Date_PEC"
        Range("C1").Value = "Date_recep"
        Range("D1").Value = "Recep"
        Range("E1").Value = "Mode"
        Range("F1").Value = "Compte_Tiers"
        Range("G1").Value = "CD"
        Range("H1").Value = "Nbre_de_Colis"
        Range("I1").Value = "Nbre_Colis_non_lus"
     
     
     
        'Enregistrement au format xls
        ActiveWorkbook.SaveAs Filename:= _
            "N:\Calexpress\13 - METHODES\13.2 Public\13.2.3 Divers\97 - Bases de données\POINTAGE\Fichier STV\SPECIFANALYSE COLIS NON POINTES EN D_" & l & ".xls" _
            , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
     
        'Variabilise l'accès et le nom du fichier
        Fichier = "N:\Calexpress\13 - METHODES\13.2 Public\13.2.3 Divers\97 - Bases de données\POINTAGE\Fichier STV\" & ActiveWorkbook.Name
     
        'Fermeture du Classeur
        Classeur.Close True
        'Fermeture d'Excel
        Xl.Quit
     
        Call Macro1
     
    p:
     
        Next l
     
    End Sub
     
    'Lancement de la macro Alimentation BDD ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Function Macro1()
    On Error GoTo Macro1_Err
     
        DoCmd.TransferSpreadsheet acImport, 8, "STV_AD", "" & Fichier & "", True, ""
     
     
    Macro1_Exit:
        Exit Function
     
    Macro1_Err:
        MsgBox Error$
        Resume Macro1_Exit
     
    End Function
    Function FileExists(nomf) As Boolean
        FileExists = Dir(nomf) <> ""
    End Function

  2. #2
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonjour,

    Le problème n'est pas de la syntaxe Access mais Excel.
    Tu execute du code dans Access.
    Ce même code dans Excel marcherai très bien, mais nous somme dans Access.
    Alors essaye simplement de lui dire que tu veux utiliser la collection "Columns" de ton classeur
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Classeur.Activate
        Classeur.Columns("A:A").Select
    Ou plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Classeur.Columns("A").Select
    @+


    Pensez au tag

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonjour Didier,

    Merci pour ta réponse.
    Cependant, maintenant j'ai l'erreur suivante sur ton code :

    Erreur d'exécution '438';
    Propriété ou méthode non générée par cet objet/

  4. #4
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonjour,

    Effectivement j'ai répondu un peu vite et n'ai pas vérifier la syntaxe
    Je voulais t'expliquer le principe.
    En fait dans Excel, la collection Columns se retrouve à deux endroits.
    Soit directement au niveaux de l'application (méthode globale) qui permet de travailler sur la feuille "Active" d'ou le "Activate", soit au niveau d'une feuille précise.
    Donc dans ton cas ces différentes syntaxe fonctionneront :

    Méthode Globale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Classeur.Activate
    X1.Columns("A").Select
    Méthode Feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Classeur.Worksheets("SPECIFANALYSE COLIS NON POINTES").Columns("A").select
    Ou même comme tu l'as affecté a une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuille.Columns("A").Select
    Attention il en est de même pour la collection "Range"
    Donc par rapport à toute tes manipulation et surtout si tu doit faire des tris (qui ne peuvent se faire qu'en méthode Globale" je te conseil de rester avec le Activate et en méthode globale :
    Donc plus bas dans ton code tu devra avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    X1.Selection.TextToColumns Destination:=Range("A1"),...
    ...
    X1.Range("A1").Value = "Agence_Départ"
    Ou pour éviter de répéter "X1" a chaque fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With X1
    	.Selection.TextToColumns Destination:=Range("A1"),...
    	...
    	.Range("A1").Value = "Agence_Départ"
    	...
    End with
    @+


    Pensez au tag

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Y a du progrès, ça a réglé mon problème de sélection de colonne.
    Maintenant il bug à la ligne du dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Xl.Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 2), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 2), Array(13, 1 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1)), TrailingMinusNumbers:= _
            True
    Je débute totalement en VBA Access

    Merci d'avance pour ton aide.

  6. #6
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Désolé je ne suis pas devin
    C'est quoi ton message d'erreur ?
    Et surtout ce code sert a quoi ?
    Que veut tu faire ?
    Estce que ce code fonctionne directement dans Excel ?
    Car la c'est de la syntaxe VBA Excel.
    Ton problème ne vient pas d'Access mais plus de l'utilisation d'une fonction Excel.
    Si cela ne marche pas dans Excel, poste ta question dans le forum Excel
    Sinon, donne nous le message d'erreur et explique ce que cette ligne est censée faire
    @+


    Pensez au tag

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Voici le message d'erreur.

    Erreur d'exécution '1004' La méthode 'Range' de l'objet '_Global' a échoué
    Il intervient à ce niveau de la macro qui permet de travailler sur le fichier Excel : Après sélection de la colonne A, il permet de convertir la colonne en délimité, point virgule. Afin de mettre en colonne les infos au lieu d'une seule ligne pour qu'après je vire les colonnes dont je n'ai pas besoin avant d'importer le fichier Excel dans ma base Access

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Xl.Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 2), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 2 _
            ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1)), _
            TrailingMinusNumbers:=True

  8. #8
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonjour,

    Le message dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La méthode 'Range' de l'objet '_Global' a échoué
    Ne serait-ce pas parce que sur ta première ligne tu fais référence à un Objet "Range" sans l'avoir préfixé de "X1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xl.Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xl.Selection.TextToColumns Destination:=X1.Range("A1"), DataType:=xlDelimited, _
    @+


    Pensez au tag

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonjour Didier,

    J'essaie demain matin.

    En plus, dans ton précédent message, tu me l'avais dit
    Je débute en VBA Access, j'ai donc tendance à utiliser du code Excel...

    Je te dis demain matin si ça marche.

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci, c'était bien ça le problème.
    Ca tourne super bien.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/02/2015, 13h06
  2. Réponses: 1
    Dernier message: 18/11/2014, 16h00
  3. [XL-2007] Erreur d'exécution 1004 La méthode Select de l'Objet Worksheet a échoué !
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 08/11/2013, 15h39
  4. Réponses: 6
    Dernier message: 08/01/2009, 11h06
  5. Réponses: 13
    Dernier message: 29/06/2007, 18h03

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