Insérer des lignes dans un tableau | ||
---|---|---|
Inscription: 08/06/2015
De France
Messages:
2
Système d'exploitation: PC Version Excel utilisée: 2007 |
Posté le : 08-06-2015 22h09
Bonjour,
J'ai un tableau que je voudrais "couper" à différents endroits. J'ai fait un tri des données et je voudrait insérer une ligne à chaque fois qu'un caractère change (le nom par exemple). Comment faire?
Cordialement,
Florian |
|
|
Re: Insérer des lignes dans un tableau | ||
---|---|---|
Inscription: 23/05/2008
De La Varenne Saint-Hilaire
Messages:
356
Système d'exploitation: PC Version Excel utilisée: 2010 |
Posté le : 09-06-2015 00h36
Bonsoir Florian, bonsoir à tous,
Peut-être avec une macro, un essai dans le fichier joint, avec ce code (cliquer sur le bouton Go dans l'onglet): Option Explicit Sub Insertion() 'Déclaration des variables Dim lig As Long, i As Long With ActiveSheet 'Travaille sur l'onglet actif 'Calcule la dernière cellule remplie de la colonne A 'à adapter, par exemple pour la colonne D remplacer le 1 par 4: lig = .Cells(Rows.Count, 1).End(xlUp).Row If lig > 1 Then 'S'il y a au moins deux lignes: 'boucle de la dernière ligne à la ligne 3 (s'il y a un intitulé de colonne ligne 1) 'en remontant d'un pas de 1 For i = lig To 3 Step -1 'Teste si la cellule est différente de la cellule au dessus If .Cells(i, 1) <> .Cells(i - 1, 1) Then .Cells(i, 1).EntireRow.Insert 'insérer une ligne End If 'Fin du test si cellules différentes Next i 'passage à la ligne précédente pour la boucle (For ...) End If ' Fin du premier If si ligne >1 End With 'fermeture du WITH End Sub Très bonne soirée,
mth |
|
|
Re: Insérer des lignes dans un tableau | ||
---|---|---|
Inscription: 08/06/2015
De France
Messages:
2
Système d'exploitation: PC Version Excel utilisée: 2007 |
Posté le : 09-06-2015 14h47
Ok. Merci pour ta réponse rapide. J'ai testé ta macro et elle fonctionne très bien sauf que j'ai voulu la tester pour la 3ème colonne, elle ne fonctionne plus (j'ai remplacé le 1 par un 3 dans la macro comme indiqué en commentaire). Je précise que les 2 premières colonnes étaient remplis.
Ce n'est pas très grave puisque les infos des 2 premières colonnes ne sont pas importantes pour ce que je veut faire donc je les ai supprimé ;)
J'ai une autre question : Maintenant que j'ai fait des écarts je souhaiterait comparer les valeurs de 2 colonnes. En effet dans la colonne H de mon classeur j'ai des distances (que j'ai trié en ordre croissante avant de faire la séparation de lignes) et dans la colonne J j'ai des des dates+heures (sous le format jj/mm/aaaa hh:mm). Ce que je souhaiterais faire c'est une macro qui permettrai pour chaque mini tableau (entre 2 écarts de lignes) de comparer si les heures sont bien en ordre croissante. Le résultat serait visible rapidement puisque si les heures sont en ordre croissante : elles s'affichent en vert. Sinon elle s'affiche en rouge.
J'espère avoir été clair. N'hésitez pas à me poser des questions si vous souhaitez avoir plus de détails.
Je pense que ce que je demande est réalisable.
Cordialement,
Florian |
|
|
Re: Insérer des lignes dans un tableau | ||
---|---|---|
Inscription: 23/05/2008
De La Varenne Saint-Hilaire
Messages:
356
Système d'exploitation: PC Version Excel utilisée: 2010 |
Posté le : 10-06-2015 00h01
Bonsoir Florian, bonsoir à tous,
J'ai modifié le code pour travailler colonne 3, cf ci-dessous
Option Explicit Sub Insertion() 'Déclaration des variables Dim lig As Long, i As Long With ActiveSheet 'Travaille sur l'onglet actif 'Calcule la dernière cellule remplie de la colonne C 'à adapter, par exemple pour la colonne D remplacer le 3 par 4: lig = .Cells(Rows.Count, 3).End(xlUp).Row If lig > 1 Then 'S'il y a au moins deux lignes: 'boucle de la dernière ligne à la ligne 3 (s'il y a un intitulé de colonne ligne 1) 'en remontant d'un pas de 1 For i = lig To 3 Step -1 'Teste si la cellule est différente de la cellule au dessus 'pour travailler sur la colonne D remplacer égalemet ici 3 par 4 If .Cells(i, 3) <> .Cells(i - 1, 3) Then .Cells(i, 3).EntireRow.Insert 'insérer une ligne End If 'Fin du test si cellules différentes Next i 'passage à la ligne précédente pour la boucle (For ...) End If ' Fin du premier If si ligne >1 End With 'fermeture du WITH 'appelle la macro de mise en forme Call Coloriage End Sub
Pour la question suivante il y a plusieurs pistes, une très simple par exemple consiste à écrire une formule dans une nouvelle colonne, une fois que la macro est terminée, formule qui teste la valeur de la cellule par rapport à celle du dessus et affiche un résultat (ici des points d'exclamation) selon le résultat du test. En PJ cellule E1 et copiée vers le bas: =SI(ET(D2<>0;D2
Autre piste: la mise en forme conditionnelle. Sélectionner les cellules devant appliquer la mise en forme puis voir menu Accueil/Mise en forme conditionnelle/Gérer les règles. Puis pour modifier une règle: la sélectionner et modifier Ou pour créer une nouvelle règle: cliquer sur "Nouvelle règle" puis "Utiliser une formule etc." et écrire la formule. Par exemple formule pour la condition 1: =ET($D2<>0;$D2>$D1) On peut aussi intégrer la mise en forme conditionnelle dans une macro, par exemple:
Option Explicit Sub Coloriage() 'Déclaration des variables Dim lig As Long, i As Long With ActiveSheet 'Travaille sur l'onglet actif 'Calcule la dernière cellule remplie de la colonne C 'à adapter, par exemple pour la colonne D remplacer le 3 par 4: lig = .Cells(Rows.Count, 3).End(xlUp).Row If lig > 1 Then 'S'il y a au moins deux lignes: 'travaille sur la plage de cellules colonne D With .Range("D2:D" & lig) 'efface les Mises en formes conditionnelles présentes .FormatConditions.Delete 'Ajoute une formule de mise en forme conditionnelle condition 1 'la valeur est supérieure à celle du dessus .FormatConditions.Add Type:=xlExpression, Formula1:= _ "=ET($D2<>0;$D2>$D1)" 'Détermine la couleur verte(à adapter selon des goûts) With .FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 60113 .TintAndShade = 0 End With 'Ajoute une formule de mise en forme conditionnelle condition 1 'la valeur est inférieure à celle du dessus .FormatConditions.Add Type:=xlExpression, Formula1:= _ "=ET($D2<>0;$D2<$D1)" 'Détermine la couleur rouge(à adapter selon des goûts) With .FormatConditions(2).Interior .PatternColorIndex = xlAutomatic .Color = 4261375 .TintAndShade = 0 End With End With End If End With End Sub
C'est ce que j'ai fait dans le fichier joint. Vois si cela peut t'aider, Bonne soirée,
mth
|
|
|