Insérer l’entête lorsque la valeur de la cellule en colonne "A" change

Bonjour à tous,

Je me permets de vous solliciter car je n’arrive pas à solutionner mon problème, je m’explique.

J’ai un tableau de données composé de 8 colonnes et un certain nombre de lignes variables.

Ce tableau à un entêtes.

Ce je souhaite faire : parcourir mon tableau, lorsque la valeur de la colonne "A" change, j’insère l’entête jusqu'à la fin du Tableau.

Je me permets de vous demander une solution avec des tableaux (Plus rapide), si c'est possible, car mes données sont très nombreuses.

Sauf erreur de ma part, vous trouverez le résultat souhaité dans la 2e feuille du classeur.

Je reste à votre disposition pour d’autres informations supplémentaires.

Bien à vous,.

Bonjour

Ci joint ma solution

A+ François

Bonjour Harzer,

Je te propose la procédure suivante :

Sub inserer_Enête()
    Dim oSheet As Worksheet
    Dim oRangeHeader As Range, oNewHeader As Range
    Dim oCellA As Range
    Dim sValueA As String
    Dim lLastrow As Long, i As Long

    Set oSheet = ThisWorkbook.Worksheets("Elevage")
    'On affecte une variable pointant sur l'entête
    Set oRangeHeader = oSheet.Range("A1:H1")
    'On recherche la dernière ligne du tableau
    lLastrow = oSheet.UsedRange.Rows.Count

    'On stocke la valeur de la colonne A de la dernière ligne
    sValueA = oSheet.Cells(lLastrow, 1)
    'On boucle sur toutes les lignes du tableau en partant du bas du tableau
    For i = lLastrow - 1 To 2 Step -1
        'On affecte la cellule de la colonne A de la ligne courante
        Set oCellA = oSheet.Cells(i, 1)
        'Si la valeur diffère de la valeur stockée
        If oCellA.Value <> sValueA Then
            'Pour éviter de redoubler les insertions d'entête
            If Trim(oCellA.Value) <> Trim(oRangeHeader.Cells(1, 1).Value) Then
                'On stocke la nouvelle valeur de la colonne A
                sValueA = oCellA.Value
                'On insère une nouvelle ligne
                oSheet.Rows(i + 1).Insert (xlDown)
                'On affecte une variable pour le nouvel entête
                Set oNewHeader = oSheet.Range(oSheet.Cells((i + 1), 1), oSheet.Cells(i + 1, 8))
                'On copie/Colle l'entête
                oRangeHeader.Copy oNewHeader
            Else
                'On stocke la valeur de la colonne A de la ligne précédente
                sValueA = oCellA.Offset(-1).Value
            End If
        End If
    Next

End Sub

De plus, je te conseille de déplacer le bouton 'Inserer L'entête...' en dehors de la ligne 1 qui ne doit contenir que les textes de l'entête.

Bonjour à tous !

Une approche Power Query (nativement intégré dans Excel 2016) ?

let
    Source = Excel.CurrentWorkbook(){[Name="tElevage"]}[Content],
    ListNames = Table.ColumnNames(Source),
    Traitt = Table.Group(Source,{"Mère"},{{"Tbl", each Table.Combine({_, #table(ListNames,{ListNames})}), type table}}),
    Final = Table.RemoveLastN(Table.Combine(Traitt[Tbl]),1)
in
    Final

Remarque : Un tableau structuré a été inséré (tElevage) et l'espace superflu de l'en-tête "Mère" supprimé.

Bonjour à FanFan38, GVIALLES et JFL,

Merci à tous les trois pour vos propositions aussi différentes et variées.

Les trois solutions proposées répondent à mes attentes et me donnent le résultat souhaité.

Un grand MERCI à tous les trois pour vos propositions fonctionnelles.

Au plaisir de vous lire à l’occasion.

Bonsoir à tous de nouveau !

Bien...!

Je vous remercie de ce retour.

Rechercher des sujets similaires à "inserer entete lorsque valeur colonne change"