Erreur d'execution 9 macro

Bonjour,

Je suis en train de tenter de créer une Macro qui permet d'ouvrir un fichier "B" d'appliquer un filtre puis de copier uniquement certaine données dans un fichier "A"

J'ai d'abord créé 2 macros, la première pour ouvrir le fichier "B" et la seconde pour copier les données du fichier "B" vers "A" suivant le filtre.

Lorsque j’exécute ces 2 macros séparément elle fonctionne, par contre lorsque j'essaye de les fusionner la macro plante (Erreur d'execution 9, l'indice n'appartien pas à la sélection)

Voici le code :

Sub Extraction_pointages()

    Dim MonApplication As Object
    Dim MonFichier As String
    Set MonApplication = CreateObject("Shell.Application")
    MonFichier = "C:\Users\Josué\Desktop\pointages NQ1.csv"
    MonApplication.Open (MonFichier)
    Set MonApplication = Nothing

    Windows("pointages NQ.csv").Activate
    Rows("4:4").Select
    Selection.AutoFilter
    Range("M8").Select
    ActiveSheet.Range("$A$4:$S$1629").AutoFilter Field:=6, Criteria1:="3700"
    Range("A4:T3289").Select
    Selection.Copy
    Windows("Batch1.xlsm").Activate
    Range("A2").Select
    ActiveSheet.Paste

End Sub

Sauriez-vous me dire d’où proviens l'erreur ?

Est-ce que c'est parce que la macro n'a pas le temps d'ouvrir le fichier "B" avant d’exécuter la deuxième partie du code ?

Merci d'avance pour votre aide

Josué

PS : j'ai volontairement laissé de l'espace entre les 2 codes pour montrer les 2 macros

Hello,

Je pense que le fait de passer par un objet ralentit effectivement l'ouverture du fichier.

Il vaut mieux utiliser la méthode native open.

Sub Extraction_pointages()

'    Dim MonApplication As Object
    Dim MonFichier As String
'    Set MonApplication = CreateObject("Shell.Application")
    MonFichier = "C:\Users\Josué\Desktop\pointages NQ1.csv"
    Workbooks.Open (MonFichier)
    Windows("pointages NQ1.csv").Activate
    Rows("1:1").Select
    Selection.AutoFilter
    Range("M8").Select
    ActiveSheet.Range("$A$4:$S$1629").AutoFilter Field:=6, Criteria1:="3700"
    Range("A4:T3289").Select
    Selection.Copy
    Windows("Batch1.xlsm").Activate
    Range("A2").Select
    ActiveSheet.Paste

End Sub

Bonjour Rag02700,

Malheureusement ça ne fonctionne pas, il me met une erreur "La méthode autofilter de la classe range a échoué"

Je vous joints les 2 fichier en question. La macro est dans le fichier Batch1

3pointages-nq1.zip (44.07 Ko)
8batch1.xlsm (17.08 Ko)

Oui je n'ai corrigé que la première erreur, celle que tu as mentionnée

En revanche, tu remarquera ton fichier d'importation est un csv, jusque là tout va bien.

Par contre quand tu ouvres un csv depuis VBA et lorsque tu ouvres ton csv manuellement, l'affichage n'est pas le même.

donc ton :

    ActiveSheet.Range("$A$4:$S$1629").AutoFilter Field:=6, Criteria1:="3700"

ne peut pas fonctionné car ton field := n'existe pas, il n'y a pas de colonne 6 à l'ouverture du csv via vba ...

Donc la démarche à faire avant de pouvoir faire le filtre sur la colonne 6 c'est d'avoir l'affichage avec la colonne 6 apparente.

D'ailleurs la colonne 6 n'a pas de 3700 c'est pas la colonne 4 plutôt ?

Voici une proposition via l'enregistreur de macro ( je vais surement me faire réprimander par mes camarade ):

Sub Extraction_pointages()
    Sheets("Extract pointages").Cells.ClearContents
    With Sheets("Extract pointages").QueryTables.Add(Connection:= _
        "TEXT;C:\Users\Dahmien\Downloads\pointages-nq1.csv", Destination:=Sheets("Extract pointages").Range( _
        "$A$1"))
        .Name = "pointages-nq1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

    Sheets("Extract pointages").Rows("4:4").Select
    Selection.AutoFilter
    Sheets("Extract pointages").Range("M8").Select
    Sheets("Extract pointages").Range("$A$4:$S$1629").AutoFilter Field:=4, Criteria1:="3700"

End Sub

Bonjour,

Merci beaucoup Rag02700, ça fonctionne à merveille. C'est exactement ce que je voulais

Rechercher des sujets similaires à "erreur execution macro"