Insérer des lignes avec macro + condition

Résolu
sofian_ovsky Messages postés 17 Statut Membre -  
titeufdu89 Messages postés 387 Statut Membre -
Bonjour tout le monde,

je débute avec les macros, et j'ai besoin d'aide svp.
je veux créer une macro qui va insérer des ligne en dessus de la 1ere ligne actuelle et copier le contenu des lignes précédentes, mais avec des conditions.
en colonne Q = les mois
en colonne P = situation (actif ou non actif)
alors, je veux que ma macro crée et copie uniquement les lignes du dernier mois (sept 18) si situation (p) = actif
et renommer la colonne Q (mois) par Mois+1 (mois suivant).

j'espère que mon problème est clair

https://www.cjoint.com/c/HIrhgct8sc1

merci à l'avance

2 réponses

  1. titeufdu89 Messages postés 387 Statut Membre 38
     
    Bonjour,

    Si j'ai bien compris, tu veux que la macro analyse chaque lignes de ton tableau et que lorsque les conditions sont respectés (à savoir que le mois soit égal au mois en cours et le statut actif) il ajoute une ligne au dessus de la ligne analysée et copie les information de la ligne encore au dessus?

    Càd que si la macro analyse la ligne 5 par exemple et qu'elle correspond aux critères, on ajoute une ligne au dessus (la ligne 5 initiale se retrouvera être la ligne 6), et copier les éléments de la ligne 4 dans la ligne 5 en incrémentant le mois. Est-ce bien ce que tu souhaites?
    0
    1. sofian_ovsky Messages postés 17 Statut Membre
       
      Bonjour titeufdu89,

      si la ligne 5 correspond aux critères, on ajoute une ligne en dessus, et copié les valeurs de la ligne initiale (qui est devenue 6) sur la nouvelle ligne 5. ça c'est le principe.

      mais ma macro, je veux qu'elle crée en haut du tableau directement l'ensemble des lignes qui correspondent aux critères.

      c'est une opération que je veux effectuer 1 fois/mois, copier la liste et les détails des voitures qu'elle sont encore active pour le calcule du cout de la location.

      merci à vous
      0
  2. titeufdu89 Messages postés 387 Statut Membre 38
     
    Voici un code qui effectuera ce que tu souhaites. Par contre, il te faudra attendre le 1er de chaque mois pour lancer la macro car elle est programmée en fonction de la date du jour. Elle recherche les lignes en "actif" ayant comme mois le mois précédant au mois actuel. Si tu lances le 30 Septembre la macro, elle t'ajoutera les lignes d'Aout 2018... La macro prend également en considération les années ainsi elle ne renverra pas les éventuelles lignes d'Août 2017 par exemple.

    Option Explicit
    Sub ajout_ligne()
    Application.ScreenUpdating = False
    Dim der As Double, i As Double, mois As Integer, annee As Double
    der = Range("A65536").End(xlUp).Row
    
    If Month(Date) = 1 Then
    annee = Year(Date) - 1
    mois = 12
    Else
    annee = Year(Date)
    mois = Month(Date) - 1
    End If
    
    For i = der To 4 Step -1
        'test si les conditions sont respectés
        If Month(Range("Q" & i)) = mois And Year(Range("Q" & i)) = annee And Range("P" & i) = "ACTIF" Then
        'ajoute une ligne au dessus
        Rows("4:4").Insert Shift:=xlDown
        'copie la ligne du dessous dans la nouvelle ligne
        Rows(i + 1).Copy Rows("4:4")
        Range("Q4") = DateSerial(Year(Date), Month(Date), 1)
        i = i + 1
        End If
    Next i
    End Sub
    


    Colle ce code soit dans un module soit dans la la feuille directement et tu peux créer un contrôle pour lancer la macro plus facilement

    Bonne journée

    Jc
    0
    1. sofian_ovsky Messages postés 17 Statut Membre
       
      merci beaucoup titeufdu89
      le code marche très bien.

      bonne journée
      0
    2. titeufdu89 Messages postés 387 Statut Membre 38
       
      Super! ;-)
      Pense a passer le statut du post en résolu, bonne continuation.

      Bonne journée

      Jc
      0