Macro + durée

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 !

A voir également:

3 réponses

Arbi
 
Je pense que c'est faible mais a voir avec les pro de VBA ;)
0
Germain
 
Merci mais personne ne passe ... :(
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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


0
Germain
 
Bonjour michel_m,

Ce n'est pas grave si c'est encore plus long, par contre je ne peux pas mettre le fichier sur cjoint ... il n'y a que des données confidentielles,

Mais il n'existe pas un chronometre "tout fait" qui se lance (peu importe le fichier qui est fait derrière ?
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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 +
0
Germain
 
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"
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
cherches tu à copier les données seules ou les données avec le formats ?
0
Germain
 
Les donées seules, pourquoi ?
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
0
Germain
 
Mwouais ... bof
0