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. 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
  2. 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
  3. 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. 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. 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. 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