Bonjour, je doit ouvrir un fichier texte avec excel puis renseigner une plage de cellule à l'aide des valeurs de la 1er colonne. Simplement, pour des petits fichiers avec peut de lignes, cela est relativement rapide, mais lorsque je passe à des documents qui font plusieurs milliers de lignes, le traitement est très long, je vous met mon code, si qqn voit comment je pourrait accélerer la recherche.
Code vba : 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 Sub ouverture() Application.ScreenUpdating = False LeFichierAOuvrir = Application.GetOpenFilename(Title:="Nom du fichier PGI à ouvrir") If LeFichierAOuvrir <> "Faux" Then classeur = ActiveWorkbook.Name nomfeuil = ActiveSheet.Name OuvrirLeFichier Else Exit Sub End If Windows(classeur).Activate Application.DisplayAlerts = True Application.ScreenUpdating = True Workbooks(classeur).Sheets(nomfeuil).Range("A1").Activate Workbooks(classeur).Sheets(nomfeuil).Range("A1").Show End Sub Sub OuvrirLeFichier() Workbooks.OpenText Filename:= _ LeFichierAOuvrir, Origin:=xlMSDOS _ , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _ , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _ TrailingMinusNumbers:=True classeurorigine = ActiveWorkbook.Name feuilleorigine = ActiveSheet.Name Workbooks(classeur).Activate Range("B70").Value = classeurorigine Sheets(nomfeuil).Select If Range("O2") = 1 Then Call ImporterAuxiliaire ElseIf Range("O2") = 2 Then Call ImporterGénéraux ElseIf Range("O2") = 3 Then Call ImporterSection ElseIf Range("O2") = 4 Then Call ImportPGI3 ElseIf Range("O2") = 5 Then Call ImporterJnal2 End If End Sub
Code vba : 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 Public Sub ImportPGI3() Dim x Dim y As Integer, z As Integer, i As Long 'on cherche la derniere ligne non vide de la feuille excel Workbooks(classeurorigine).Activate Sheets(feuilleorigine).Select dl = Range("A65536").End(xlUp).Row 'formatage de la plage de cellule avec umport des valeurs Workbooks(classeur).Sheets(nomfeuil).Activate Application.Goto reference:="t_journal", Scroll:=True Range("t_journal").ClearContents y = 1 For i = 1 To dl If Mid((Workbooks(classeurorigine).Sheets(feuilleorigine).Cells(i, 1)), 1, 3) <> "***" Then z = Range("t_journal").Rows.Count If y > z - 1 Then Range("t_journal").Cells(z, 1).Insert Shift:=xlDown Range("t_journal").Cells(y, 1).Value = Mid((Workbooks(classeurorigine).Sheets(feuilleorigine).Cells(i, 1)), 1, 3) End If Range("t_journal").Cells(y + 1, 1).Value = Mid((Workbooks(classeurorigine).Sheets(feuilleorigine).Cells(i, 1)), 1, 3) Range("t_journal").NumberFormat = "@" y = y + 1 End If Next Call FiltreDoublons End Sub Sub FiltreDoublons() Dim Plage As Range, i As Long, dll As Long 'on supprime les doublons de la plage de cellule dll = Range("t_journal").End(xlUp).Row For i = dll To 2 Step -1 If Range("t_journal").Cells(i, 1).Value = Range("t_journal").Cells(i - 1, 1).Value Then Range("t_journal").Cells(i, 1).EntireRow.delete End If Next End Sub
Partager