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
    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
      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
    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
      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 ..... ?