insérer ligne sous condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

coolzero

XLDnaute Nouveau
Bonjour à tous,

je suis à la recherche d'une macro excel permettant d'insérer des lignes sous conditions

Voila mon problème :
j'ai de F2 à F200 une série de date déja triée par ordre chrono. Je souhaite insérer une ligne dès que la date de la ligne suivante est différente.
Je souhaite aussi pour chaque ligne insérée :
- recopier la date du dessous dans la ligne insérer mais en colonne i
- En colonne A de le ligne insérer ajouter un texte "toto" par exemple

merci de votre aide.
 

Pièces jointes

Re : insérer ligne sous condition

Bonjour et bienvenu sur le forum Coolzero,

Voici ci-dessous une macro qui fera ton bonheur :

Code:
Sub PropositionDeMacro()
'Macro réalisée par Excel-lent le 17/01/2011

Dim LigneTotal As Long
Dim LigneAnalysé As Long

LigneTotal = [F65536].End(xlUp).Row

For LigneAnalysé = LigneTotal To 3 Step -1
    If Cells(LigneAnalysé, 6) <> Cells(LigneAnalysé - 1, 6) Then
       Rows(LigneAnalysé).Insert
       Cells(LigneAnalysé, 9) = Cells(LigneAnalysé + 1, 6)
    End If

Next LigneAnalysé

End Sub

Evidement, avant de lancer la macro (ou après), bien penser à mettre ta fameuse colonne "I" au format date 😉

Bonne après midi

Cordialement
 
Re : insérer ligne sous condition

Re-bonjour,

Oups! J'ai oublié de traiter le point suivant :
Coolzero à dit:
- En colonne A de le ligne insérer ajouter un texte "toto" par exemple

C'est la même logique que pour l'ajout de la date, je te laisse donc essayer de rajouter cela et je reviendrais voir ce soir où tu en es.

Bon courage

A+
 
Dernière édition:
Re : insérer ligne sous condition

Merci beaucoup pour ton aide.

Effectivement j'ai ajouté ceci et ca a fonctionné.
Code:
Cells(LigneAnalysé, 1) = "toto"

Pourrais je abuser en demandant 2 choses.... 🙂

Je souhaite toujours dans ma ligne ajouté fusionner les cellule M à AT (13 à 46)
et aussi par exemple colorier d'une couleurs les cellule des colonnes B et C de la ligne ajoutée.
J'ai essayé de trouver un moyen d'ajouter ceci dans le que tu m'a donné mais galère galère...
Code:
  Range("AG109:AM109").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    Range("B104").Select
    ActiveCell.FormulaR1C1 = "d"
    Range("B109:E109").Select
    Selection.Interior.ColorIndex = 34

D'avance merci.
 
Re : insérer ligne sous condition

Bonsoir CoolZéro,

J'ai pas bien compris ta demande, tu peux être plus précis?

1/ La fusion de tes cellules :
Lorsque je lis ceci :
coolzero à dit:
fusionner les cellule M à AT (13 à 46)

je comprend que tu veux fusionner les cellules [M...:AT...] ligne ajouté n° 1 puis ligne ajouté n°2, ...

Lorsque je lis ton code :
Code:
Range("AG109:AM109").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge

Je comprend que tu veux fusionner l'ensemble de toutes les cellules [AG109:AM109], bref faire de ces 7 cellules : une seule. Au lieu des 33 ci-dessus (46-13=33)

Qu'elle est la bonne réponse?

A priori, je constate que tu as utilisé l'enregistreur de macro et essayé de comprendre le code, pour pouvoir ainsi l'intégrer dans ton code? Excellente méthode.

Pourquoi avoir sélectionner AG109:AM109??? Alors que tu parles de M...:AT...???

Pour fusionner les cellules ceci suffit :
Code:
Range("AG109:AM109").Select
Selection.Merge

et cela peut être raccourci de la façon suivante :
Code:
Range("AG109:AM109").Merge

Mais dans l'affaire, tu perds deux "informations" : le centrage horizontal et vertical dans la cellule fusionnée.

Bref, pour ne rien perdre, tu peux simplifier ton code "fusion des cellules" de la façon suivante :
Code:
Range("AG109:AM109").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Merge
    End With

Les lignes ci-dessous tu n'en as pas besoin :
Code:
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext

Pour ces "informations", tu as choisi les valeurs par défaut, donc que tu mettes ou non ces lignes dans ta macro cela ne changera rien. Seul différence, sans ces lignes ton code sera plus clair et son exécution plus rapide.

2/ Le coloriage de tes cellules :
La partie de ton code correspondant à cela est cette partie :
Code:
    Range("B109:E109").Select
    Selection.Interior.ColorIndex = 34

Qui peut-être simplifié ainsi :
Code:
[B109:E109].Interior.ColorIndex = 34

3/ Supplément :
Pour réussir à adapter tout cela à ta macro, il te faut connaître ceci :

Pour indiquer le nom d'une cellule il existe trois grandes solutions :
Range -> avantage de cette solution, c'est la plus facile à comprendre. Lorsqu'on voit dans le code Range("A1"), on voit tout de suite qu'on parle de la cellule A1
Cells -> moins facile à comprendre, car elle s'écrit ainsi Cells(numéro de la ligne, numéro de la colonne). Bref, l'ordre est inversé, on parle de la colonne en second. Deuxième difficulté, la colonne, au lieu d'être représenté par une lettre est indiqué par son numéro.
[] -> tout aussi facile à comprendre que la solution "Range", mais plus courte à écrire

Lorsqu'on débute et qu'on souhaite remplacer le numéro de la colonne ou de la ligne, la solution "Cells" est la plus facile, car on remplace le numéro par une variable. Variable qu'on peut fixer en début de macro et/ou faire changer grâce à l'utilisation de boucles (comme démontré dans mon précédent post : n° #2)

Mais on peut tout aussi bien faire cela avec la solution "Range". Pour changer le numéro de la ligne, il suffit d'écrire :
Code:
NuméroLigne = 5
Range("A" & NuméroLigne )

Ce qui revient à écrire Range("A5")

Mais si tu veux écrire Range("A5") puis Range("A6") puis Range("A7") ... puis Range("A15")

Alors tu écriras :
Code:
For NuméroLigne = 5 To 15
    Range("A" & NuméroLigne )
    'Ici tu insérera ton morceau de macro qui diras quoi faire avec cette fameuse cellule
Next NuméroLigne

Mais comme tu le constate, quand il s'agit de remplacer le nom de colonne, ça se complique un peu!!!! Autant rajouter "+1" à un nombre est facile, autant rajouter "+1" à une lettre est une autre pair de manche (compliqué mais possible)

C'est pour cela que la plupart préfère utiliser "Cells"

C'est plus clair? Je te laisse ingurgiter tout cela et essayer de le mettre en application dans ta macro?

A te lire

Cordialement
 
Dernière édition:
Re : insérer ligne sous condition

encore merci pour tes explications.
Effectivement je me suis un peu emmélé les pinceaux....

je souhaite sur la base de
Code:
Cells(LigneAnalysé, ...
mettre en forme la ligne que je viens d'ajouter.
en imaginant que j'ajoute la ligne à la ligne 10 je souhaite fusionner de AG10 à AM10

j'ai essaye plein de truc mais je n'arrive pas à faire interpreter ce range (j'ai essayé pleins d'autre combinaisons)
Code:
Range (Cells(LigneAnalysé, 33)), (Cells(LigneAnalysé, 49))
 
Re : insérer ligne sous condition

Bonsoir CoolZéro,

Je passe juste en coup de vent. Pas le temps de tester en situation réél, mais à priori dans ton code tu as fait une erreur de parenthèse.

Ton code :
coolzero à dit:
Code:
Range (Cells(LigneAnalysé, 33)), (Cells(LigneAnalysé, 49))

La solution :
Code:
Range (Cells(LigneAnalysé, 33), (Cells(LigneAnalysé, 49))

Bon test

Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
268
Réponses
4
Affichages
447
Réponses
9
Affichages
734
Retour