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 SubSauriez-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 SubBonjour 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
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
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 SubBonjour,
Merci beaucoup Rag02700, ça fonctionne à merveille. C'est exactement ce que je voulais