Insérer des lignes avec macro + condition
Résolu
sofian_ovsky
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
titeufdu89 Messages postés 374 Date d'inscription Statut Membre Dernière intervention -
titeufdu89 Messages postés 374 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Insérer des lignes avec macro + condition
- Insérer video powerpoint - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Excel cellule couleur si condition texte - Guide
- Insérer signature word - Guide
- Comment insérer des points de suite sur word - Guide
2 réponses
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?
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?
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.
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
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
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