Bonjour à tous,
Dans un tableau excel de 15000 lignes, j'ai une macro pour créer un nouvel onglet à chaque fois qu'un élément nouveau apparaît dans la colonne B.
Les onglets sont ensuite triés par ordre alphabétique.
Tout cela fonctionne parfaitement. Mon problème c'est que ce traitement est très long (environ 5 minutes).
Je voudrais savoir si quelqu'un pouvais m'aider à créer une barre de progression à insérer dans ma macro pour avertir l'utilisateur du déroulement des opérations.
Cdlt
Voici la macro :
Option Explicit
Public Sub Tri_par_nom()
' en fonction de la valeur de la colonne B
' création d'une feuille avec nom colonne B
' autres colonnes documentant les cellules concernées
Dim W1 As Worksheet ' feuille base
Dim W2 As Worksheet ' feuille client
Dim lig As Long ' ligne traitée
Dim feu As Object ' feuille présente
Dim ong As Integer ' numèro feuille
Set W1 = Sheets("Suivi général") ' position feuille base
Application.ScreenUpdating = False
For Each feu In Sheets ' suppression feuilles
If feu.Name <> W1.Name Then
Application.DisplayAlerts = False
feu.Delete
Application.DisplayAlerts = True
End If
Next feu
' création des feuilles client
For lig = 10 To W1.Cells(15000, 20).End(xlUp).Row
For ong = 1 To Sheets.Count ' test existance feuille
If Sheets(ong).Name = UCase(W1.Cells(lig, 21).Text) Then
Set W2 = Sheets(ong)
Exit For
End If
Next ong
If ong > Sheets.Count Then
For ong = 2 To Sheets.Count ' tri feuille
If Sheets(ong).Name > UCase(W1.Cells(lig, 21).Text) Then Exit For
Next ong ' création feuille
Sheets.Add(After:=Sheets(ong - 1)).Name = UCase(W1.Cells(lig, 21).Text)
Set W2 = ActiveSheet
W1.Rows("1:9").Copy Destination:=W2.Rows("1:9") ' ajout titre
End If
W1.Rows(lig).Copy Destination:=W2.Rows(W2.Cells(65536, 2).End(xlUp).Row + 1) ' ajout ligne traitée
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Next lig
W1.Activate
Application.ScreenUpdating = True
End Sub
Dans un tableau excel de 15000 lignes, j'ai une macro pour créer un nouvel onglet à chaque fois qu'un élément nouveau apparaît dans la colonne B.
Les onglets sont ensuite triés par ordre alphabétique.
Tout cela fonctionne parfaitement. Mon problème c'est que ce traitement est très long (environ 5 minutes).
Je voudrais savoir si quelqu'un pouvais m'aider à créer une barre de progression à insérer dans ma macro pour avertir l'utilisateur du déroulement des opérations.
Cdlt
Voici la macro :
Option Explicit
Public Sub Tri_par_nom()
' en fonction de la valeur de la colonne B
' création d'une feuille avec nom colonne B
' autres colonnes documentant les cellules concernées
Dim W1 As Worksheet ' feuille base
Dim W2 As Worksheet ' feuille client
Dim lig As Long ' ligne traitée
Dim feu As Object ' feuille présente
Dim ong As Integer ' numèro feuille
Set W1 = Sheets("Suivi général") ' position feuille base
Application.ScreenUpdating = False
For Each feu In Sheets ' suppression feuilles
If feu.Name <> W1.Name Then
Application.DisplayAlerts = False
feu.Delete
Application.DisplayAlerts = True
End If
Next feu
' création des feuilles client
For lig = 10 To W1.Cells(15000, 20).End(xlUp).Row
For ong = 1 To Sheets.Count ' test existance feuille
If Sheets(ong).Name = UCase(W1.Cells(lig, 21).Text) Then
Set W2 = Sheets(ong)
Exit For
End If
Next ong
If ong > Sheets.Count Then
For ong = 2 To Sheets.Count ' tri feuille
If Sheets(ong).Name > UCase(W1.Cells(lig, 21).Text) Then Exit For
Next ong ' création feuille
Sheets.Add(After:=Sheets(ong - 1)).Name = UCase(W1.Cells(lig, 21).Text)
Set W2 = ActiveSheet
W1.Rows("1:9").Copy Destination:=W2.Rows("1:9") ' ajout titre
End If
W1.Rows(lig).Copy Destination:=W2.Rows(W2.Cells(65536, 2).End(xlUp).Row + 1) ' ajout ligne traitée
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Next lig
W1.Activate
Application.ScreenUpdating = True
End Sub