Optimisation Macro

Bonjour,

Je souhaite optimiser le code suivant qui a pour but d'ajouter une ligne et des informations sur cette ligne en cas de présence d'une cellule non vide dans la colonne 19 suite au copier-coller d'un autre fichier Excel.

Merci donc de m'aider à l'optimiser :

Sub insère_ligne1()
Dim lig As Long

Application.ScreenUpdating = False

For lig = ActiveSheet.Cells(Columns(9).Cells.Count, 9).End(xlUp).Row To 4 Step -1
If Not IsEmpty(Cells(lig, 19)) Then

Rows(lig + 1).Insert
Rows(lig + 1).Interior.Color = RGB(191, 191, 191)
Cells(lig + 1, 1).FormulaR1C1 = Cells(lig, 1).FormulaR1C1
Cells(lig + 1, 5).FormulaR1C1 = Cells(lig, 5).FormulaR1C1
Cells(lig + 1, 12).Value = Cells(lig, 19).Value

Sheets("Date Rétroplanning").Rows(lig - 1).Insert

For i = 37 To 42
Cells(lig + 1, i).FormulaR1C1 = Cells(lig, i).FormulaR1C1

Next i

For i = 1 To 50
Sheets("Date Rétroplanning").Cells(lig - 1, i).FormulaR1C1 = Sheets("Date Rétroplanning").Cells(lig - 2, i).FormulaR1C1

Next i

Cells(lig + 1, 12).Value = Cells(lig, 19).Value

For i = 2 To 4
Cells(lig + 1, i).Value = Cells(lig, i).Value
Next i

For i = 9 To 11
Cells(lig + 1, i).Value = Cells(lig, i).Value
Next i

For i = 20 To 21
Cells(lig + 1, i).Value = Cells(lig, i).Value
Next i

Cells(lig + 1, 36).Value = Cells(lig, 36).Value
Cells(lig, 19).ClearContents

End If

Next lig

End Sub


De plus,j'aimerais enregistrer la date de copier coller d'informations dans une cellule suite au copier-coller effectué. J'ai le code suivant mais celui-ci est valide en cas de modification de cellule, ce qui n'inclut pas les copier-coller :

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
If Target.Column = 16 Then Target.Offset(0, 31).Value = Date

End Sub


Je reste à votre disposition pour tout complément d'informations.

En vous remerciant pour votre aide.

Antoine

4 réponses

  1. Bonjour,
    Eh bien, la procédure est optimale puisqu'aucune base n'est présente comme point de référence ..... ?
    Eventuellement insérer l'instruction qui suit avant la fin de la procédure :
    Application.ScreenUpdating = True
    Désolé.

    Salutations.
    Le Pingou
    0
    1. Contributeur
      Bonjour,

      Tu peux remplacer tes boucles :
      For i = 37 To 42
         Cells(lig + 1, i).FormulaR1C1 = Cells(lig, i).FormulaR1C1
      Next i 

      par :
      Cells(lig + 1, 37).resize(,6).FormulaR1C1 = Cells(lig, i).FormulaR1C1


      eric

      edit :
      celui-ci est valide en cas de modification de cellule, ce qui n'inclut pas les copier-coller
      Normalement un collé génère bien un évènement Change.

      En essayant continuellement, on finit par réussir.
      Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
      En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
      0
      1. Merci à toi, eriiic, je ne connaissais pas cette manière de procéder.
        N'y a-t-il pas une petite erreur pour la valeur copier qui est dépendante de [i] ... ?
        Amicales salutations.
        Le Pingou
        0
    2. Bonjour,

      Merci pour vos réponses mais cela génère une erreur 1004 liée à la dépendance du i...

      En ce qui concerne l'évènement change, mon copier-coller affectant une plage de cellules et pas seulement une cellule, il est impossible d'enregistrer les dates avec ce code. Merci de m'indiquer une autre solution.

      Cordialement
      0
      1. Bonjour,
        Vous apportez une petite correction à la proposition de eriiic (salutations) et ce sera bon.
        La ligne doit être :
        Cells(lig + 1, 37).Resize(, 6).FormulaR1C1 = Cells(lig, 37).Resize(, 6).FormulaR1C1

        Concernant la suite je vous répète ceci:
        Eh bien, la procédure est optimale puisqu'aucune base n'est présente comme point de référence ..... ?
        0