Rapport de message :*
 

Re: Insérer des lignes dans un tableau

Titre du sujet : Re: Insérer des lignes dans un tableau
par Mth le 10/06/2015 00:01:15

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