Macro... rapidité à améliorer

Résolu
Bonjour,

j'ai réalisé cette macro qui doit pouvoir s'utiliser sur plusieurs feuilles (RPORDO 2009, RPORDO 2010, RPORDO 2011, .....)
elle permet de mettre en face de la ligne livraison (colonne C) le code de la colonne B pour que je puisse utiliser la fonction RECHERCHEV.

http://cjoint.com/?3BcsT7Djlpd

la macro fonctionne mais elle prend beaucoup de temps. j'ai fait pour le mieux mais je pense qu'elle fera rire les experts VBA :-)

quelqu'un aurait des idées pour qu'elle soit plus rapide ?

Merci de votre aide

6 réponses

  1. Contributeur
    Re,

    Je faisais mes tests sur un fichier sur lequel j'avais démasqué toutes les lignes.
    Je ne l'ai pas intégré à la macro, il faudrait l'ajouter.

    @gb, salut,
    tu as ajouté ça aussi :
    ... And vlB > 0 Then ...
    C'est aussi là que se situe la différence je pense, les cellules vides étaient traitées.

    eric

    Jamais tu ne répondras à un mp non sollicité...
    Bon, ça c'est fait.
    0
    1. Contributeur
      Bonjour,

      En décortiquant ce que tu fais dans ta macro, je t'en ai écrit une plus compacte "selection_livraisons" qui fait la même chose :

      Public Sub selection_livraisons()
      Dim Lig As Long, mnt As Variant, vlB As Variant
      Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual
          For Lig = Cells(Rows.Count, "C").End(xlUp).Row To 2 Step -1
              vlB = Cells(Lig, "B").Value
              If IsNumeric(vlB) And vlB > 0 Then mnt = vlB
              If Not (Cells(Lig, 3) Like ("Livraisons")) Then
                  Rows(Lig).Delete
              Else
                  Cells(Lig, "B").Value = mnt: mnt = ""
              End If
          Next Lig
      Application.Calculation = xlCalculationAutomatic
      Application.ScreenUpdating = True
      End Sub
      

      Pas facile, lorsque l'on supprime des lignes de gagner du temps. La mienne va plus vite mais si tu rajoutes les 2 lignes en gras à la tienne , les temps sont identiques !

      à toi de voir... mais ces 2 lignes divisent le temps par 5 tout de même !
      0
      1. j'ai testé, effectivement ça divise le temps, par contre je ne retrouve pas tous mes petits. comme 18316, 72450, 18333 sur les premières lignes
        0
    2. Bonjour Eric,
      je viens de tester et c'est le jour et la nuit ^^
      1s top chrono
      je vais me plonger dans le pas à pas pour m'approprier le code afin de pouvoir l'adapter si jamais mon collègue faisait évoluer ses feuilles

      Merci encore, ça va me faire gagner du temps
      0
      1. Bonjour,
        en fait cette feuille est mise à jour par un collègue et j'en fais une copie. Du coup je ne touche à rien sur la feuille mais la macro me permet de la mettre au format pour me permettre de l'exploiter. les lignes cachées ont une incidence ? je pensais qu'elles subissaient le même traitement que les autres lignes.
        0
        1. Contributeur
          Bonjour,

          regarde si ça va :
          Sub mef_RPORDO()
              Dim c As Range, adr1 As String, lig As String, CalcStatus As Long
              lig = 5
              Application.ScreenUpdating = False
              CalcStatus = Application.Calculation
              Application.Calculation = xlCalculationManual
          
              With [C4].Resize(Cells(Rows.Count, "C").End(xlUp).Row - 3)
                  Set c = .Find("Livraisons", LookIn:=xlValues, lookat:=xlWhole)
                  If Not c Is Nothing Then
                      Do
                          ' si trouvé
                          c.Offset(0, -1) = c.Offset(2, -1)
                          Range(lig & ":" & c.Row - 1).Delete
                          lig = c.Row + 1
                          Set c = .FindNext(c)
                      Loop While Not c Is Nothing And c.Address <> "$C$5"
                  End If
              End With
              Range(lig & ":" & lig + 20).Delete
              Application.ScreenUpdating = True
              Application.Calculation = CalcStatus
          End Sub

          eric

          0
          1. après coup j'ai fait la comparaison du nbe de lignes obtenues avec ta macro (99) et en le faisant manuellement et j'obtiens 233 lignes "livraisons"
            les lignes vides doivent avoir une incidence (lignes 110 à 116 par exemple). Mon collègue a insérer des lignes vides pour séparer les familles
            0
          2. j'ai rajouté ces lignes
            Cells.Select
            Selection.EntireColumn.Hidden = False
            Selection.EntireRow.Hidden = False
            et j'obtiens bien 233 cette fois donc j'ai ma réponse, les lignes cachées ont une incidence
            0
        2. Bonjour,

          Que faites vous des lignes cachees ????????
          0
          1. effectivement les lignes cachées ont une incidence. c'est bon à savoir pour les prochaines macro
            Cells.Select
            Selection.EntireColumn.Hidden = False
            Selection.EntireRow.Hidden = False
            0