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 !

3 réponses

  1. Arbi
     
    Je pense que c'est faible mais a voir avec les pro de VBA ;)
    0
    1. Germain
       
      Merci mais personne ne passe ... :(
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. 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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. 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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      cherches tu à copier les données seules ou les données avec le formats ?
      0
    3. Germain
       
      Les donées seules, pourquoi ?
      0
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    5. Germain
       
      Mwouais ... bof
      0