Macro + durée
Germain
-
Germain -
Germain -
Bonjour,
Est-il possible de faire un message box avec une sorte de chronometre (à l'envers : 10/9/8 ...)
Durant le travail d'une macro assez longue ?
Si oui je souhaite que le chronomètre dure 50 secondes... Avec une petite phrase du genre "Patience, Paris ne s'est pas fait en 1 jour..."
Merci et bonne journée !
Est-il possible de faire un message box avec une sorte de chronometre (à l'envers : 10/9/8 ...)
Durant le travail d'une macro assez longue ?
Si oui je souhaite que le chronomètre dure 50 secondes... Avec une petite phrase du genre "Patience, Paris ne s'est pas fait en 1 jour..."
Merci et bonne journée !
3 réponses
-
-
Bonjour,
la réponse d'Arbi est l'exemple m^me du post inutile.
peut-être déjà voir si on ne peut pas réduire le temps de la macro
je souhaite que le chronomètre dure 50 secondes... Avec une petite phrase du genre "Patience, Paris ne s'est pas fait en 1 jour..."
c'est possible mais le chrono qui s'égrène ralentira encore plus la durée...
au besoin
mettre le classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
https://www.cjoint.com/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
-
Ce n'est pas un chronom^tre mais un pourcentage du travail réalisé
https://www.cjoint.com/?3Kqlc4Uhr4l
mais je le répète le véritable problème est d'essayer de réduire la durée de la macro: par ex.,si tu emploies des select-selection, des copy-paste, pas de blocage de défilement de l'écran, etc, la non utilisation de variables-tableaux, la durée d'une macro peut ^tre multiplier par 1000 voire +-
Bravo, beau travail,
Mais comment y incorporer à mon fichier ?
Voici le code qui prend du temps :
Sub Reglement_posterieur() Dim l As Long ' ' export ' ' Application.ScreenUpdating = False Windows("Export.xlsx").Activate Range("A1:R1572").Select Selection.Copy Windows("Balance_Modèle_RGMT.xlsm").Activate Sheets("Export").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select ' ' mise en forme dans onglet balance ' ' Sheets("Export").Select Cells.Select Selection.Copy Sheets("Balance").Select Range("A1").Select ActiveSheet.Paste Columns("A:K").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("B:B,C:C").Select Range("C1").Activate Selection.Delete Shift:=xlToLeft Columns("D:D").Select Selection.Delete Shift:=xlToLeft Columns("D:D").Select Selection.NumberFormat = "General" ' ' mise en place avance suppresion ' ' Sheets("Balance").Select Range("D2").Select ActiveCell.FormulaLocal = _ "=SI(B2<Commande!$A$1;0;""test"")" Range("D2").Select Selection.AutoFill Destination:=Range("D2:D5000") 'suppression Sheets("Balance").Select For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1 If Cells(l, "D").Value = 0 _ Then Cells(l, 1).EntireRow.Delete Next l Columns("D:D").Select Selection.Delete Shift:=xlToLeft Application.ScreenUpdating = True
Je ne m'y connais pas du tout en VBA donc les .select copy/paste sont les seuls que je "connaissent" -
-
-
ci dessous macro
a voir pour le principe (sans les select-selection,copy-paste) car travailler sans avoir le classeur sous les yeux implique forcément un plantage de la macro
suivant la durée, tu verras si il est nécessaire d'installer ton chrono
dans la feuille "export" d'après ce que tu as fait, j'ai cru comprendre qu'il y avait d'autres données en dehors de A1:R1572 d'où la recherche d'une nouvelle dernière cellule non vide (attention s'il y a des zéros)
dans la partie avec calcul de D2, j'ai cru comprendre qu'il y avait des étiquettes en ligne1, ce qui permet l'utilisation d'un filtre + rapide qu'une boucle
Sub Reglement_posterieur_retour() Start = Timer '----export Application.ScreenUpdating = False Windows("Export.xlsx").Activate 'll serait prudent d'indiquer la feuille T_export = Range("A1:R1572").Value With Windows("Balance_Modèle_RGMT.xlsm").Sheets("Export") .Range("A1:R1572") = T_export T_export = "" '----mise en forme dans onglet balance fin = .Cells.SpecialCells(xlCellTypeLastCell).Address T_interne = Range("$A$1:" & fin).Value End With With Sheets("Balance") .Range("A1:" & fin) = T_interne .Columns("A:K").Delete .Columns("B:C").Delete .Range("C1").Delete '????? pas compris .Columns("D").Delete .Columns("D").NumberFormat = "general" 'utilité car destruction colonne à la fin ??? ' mise en place avance suppresion .Range("D2").FormulaLocal = "=SI(B2<Commande!$A$1;0;""test"")" fin = .Cells.SpecialCells(xlCellTypeLastCell).Address derlig = Columns(1).Find("*", , , , , xlPrevious).Row .Range("D2").AutoFill Destination:=Range("D2:D" & derlig) .Activate End With 'suppression par filtre Range("A1:" & fin).AutoFilter Field:=4, Criteria1:="0" Range("$A$2:" & fin).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp ActiveSheet.ShowAllData Columns("D").Delete Rows(1).Delete End With MsgBox " durée : " & Timer - Start & " sec."
end sub -
-