Insérer une ligne dans un tableau après chaque changement de cette dernière

Bonjour,

Peut-on insérer une ligne dans un tableau après chaque changement de cette dernière ?

Ci-dessous le code.

Quand on double-clic sur A1 = tri colonne A.

Une fois le tri effectué, j'aimerais séparer les changements par une ligne vide.

Cela afin d'avoir mes numéros de colis (colonne A) bien séparés.

Mais dans un tableau je ne sais pas comment on fait.

Jai donc besoin de vos lumières

Merci

Ge0ffroy

Option Explicit
'--------------------------
'double clic sur A1= tri par colonneA
'double clic sur B1= tri par colonneB
'double clic sur C1= tri par colonneC
'double clic sur D1= tri par colonneD
'-------------------------------------

Private Sub Worksheet_BeforeDoubleClick(ByVal sel As Range, Cancel As Boolean)
Dim deb As Long

 Application.ScreenUpdating = False

  deb = Timer
    If sel.Row > 1 Then Exit Sub
    Cancel = True
    With ActiveWorkbook.Worksheets("base").ListObjects("Tableau1").Sort
        With .SortFields
            .Clear
            .Add Key:=Range("Tableau1[" & sel.Value & "]"), SortOn:=xlSortOnValues, _
                Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

     'Temps d'exécution de la macro affichée en F1
    Range("F1").Select: ActiveCell.FormulaR1C1 = Timer - deb
End Sub

Bonjour,

Essayez ceci

Private Sub Worksheet_BeforeDoubleClick(ByVal sel As Range, Cancel As Boolean)
    Dim deb As Long, DerLig As Long, i As Long
    Application.ScreenUpdating = False
    deb = Timer
    If sel.Row > 1 Then Exit Sub
    Cancel = True
    With ActiveWorkbook.Worksheets("base").ListObjects("Tableau1").Sort
        With .SortFields
            .Clear
            .Add Key:=Range("Tableau1[" & sel.Value & "]"), SortOn:=xlSortOnValues, _
            Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    DerLig = ActiveSheet.ListObjects("Tableau1").DataBodyRange.Rows.Count
    For i = DerLig To 3 Step -1
        If Cells(i, "A") <> Cells(i - 1, "A") Then Rows(i).Insert Shift:=xlDown
    Next i
    'Temps d'exécution de la macro affichée en F1
    Range("F1").Select: ActiveCell.FormulaR1C1 = Timer - deb
End Sub

Cdlt

Bonjour Ge0ffroy ou Fanfan0674

La pratique du cross posting est très mal perçue sur Internet car les membres qui vont passer du temps sur votre problème risquent de le faire pour rien si vous obtenez une réponse par ailleurs dont ils n'ont pas connaissance.
Merci de choisir un forum pour votre question et de supprimer votre message dans un des forums concernés.

Je vous invite donc à lire la charte du forum [A LIRE AVANT DE POSTER]

  • Ne postez pas la même question sur un autre forum pour éviter de faire perdre bêtement du temps aux membres sur un problème qui peut être déjà résolu sur l'autre forum. L'inverse est également valable, si vous avez déjà posé votre question sur un autre forum, ne créez pas un doublon sur ce forum (à moins d'avoir clôturé le sujet sur l'autre forum).

Sinon, une petite présentation ICI serait la bienvenue

Merci de votre compréhension et de votre participation

Cordialement

re, BrunoM45

je ne sais pas comment on fait pour supprimer une question?

j'ai donc supprimé mon compte chez CCM

cordialement

Bonjour Arturo83

et merci

Mais c'est un peu long 77 secondes pour 300 lignes

@bientôt

Bonsoir,

Oui, 77 secondes c'est anormalement long, dommage que je ne dispose pas du fichier pour voir ce qui fait défaut et ainsi l'améliorer.

Cdlt

Bonsoir Arturo83,

Voici le fichier

merci

bonne soirée

Bonsoir BrunoM45 ou NonoM45

Vous avez aussi un autre Pseudo sur un autre site

Et je ne vois absolument pas pourquoi vous mentionnez mon pseudo du site CCM?

merci

Cordialement

Bonjour,

Le problème vient de votre fichier, j'en ai recréé un autre et le temps d'exécution est extrêmement court (0,03secondes)

Cdlt

Bonjou Arturo83,

Super et ULTRA rapide BRAVO

Mais si je comprends bien c'est cette ligne qui retardait l'exécution?

Range("F1").Select: ActiveCell.FormulaR1C1 = Timer - deb

Tous les codes sont semblables à part cette ligne ci-dessus.

Merci

Cordialement

Geoffroy

Non pas du tout, c'est votre fichier qui était foireux. Vous avez probablement dû faire beaucoup de manipulations auparavant sur ce tableau (ajout , suppression ou autre chose) et il reste des traces qu'on ne détecte pas mais qui viennent perturber le bon fonctionnement.

Donc en recopiant le tableau dans un fichier vierge, on repart sur du neuf.

Cdlt

Mince alors

Oui effectivement j'ai supprimé les lignes vides, avec une macro sans tableau, donc j'ai dû mettre la pagaille

J'ai un autre problème:

Lancez l'aperçu impression quitter et refaite le tri.

Le temps, en ce qui me concerne, passe à plus de 11 secondes

Avez-vous le même problème?

si j'enregistre, quitte et ouvre à nouveau le temps est plus rapide

merci

Oui, j'ai le même problème, l'aperçu avant impression vient perturber le bon déroulement. Je dois partir, je regarderai plus tard.

Cdlt

bonjour Arturo83, Geoffrey,

ceci n'aura jamais un prix de beauté, mais le nombre de lignes du tableau est sous contrôle. (il y a une colonne auxiliaire "Aux") et le temps est 0.1 sec.

Je ne connais pas le but final de cet exercise, mais en ajoutant 2 TCD et sans ce problème d'ajouter de lignes, on peut avoir le même résultat instantément.

Bonjour BsAlv, Arturo83

Pour BsAlv

Pour les TCD je les avais oublié et tu as raison, ça peut faire aussi.

Pour tes codes,la macro s'arrête à cette ligne

  If DerLig <= 0 Then Exit Sub 

c'est pour cette raison qu'elle n'affiche pas la MsgBox

...

double clic sur AUX tir par designation et ligne vide

Double clic sur A ou D seulement tri

merci

@ bientôt

RE,

Après plusieurs essais avec différentes méthodes, aucune n'a donné de bons résultats. J'en suis arrivé à faire une copie de la feuille et d'appliquer la séparation des lignes sur cette feuille (Copie_Base).

Le temps d'exécution est très satisfaisant.

Donc, fonctionnement comme avant, double-clic sur un entête de colonne de la feuille "base", et le résultat dans la feuille "Copie_Base".

Cdlt

Re Arturo83,

Excellent bravo.

Par contre si je fais l'aperçu d'impression puis quitter, le temps d'exécution passe à 40 secondes.

J'aimerais bien savoir pour quelle raison le temps augmente ?

Merci

@bientôt

bonjour,

A partir du moment où vous avez fait un aperçu d'impression et vous lancer cette macro de nouveau, excel renouvelle à chaque insertation d'une ligne son aperçu d'impression et comme vous insertez 69 ou 249 lignes dans ce boucle, cela cause ce délai.

Ma macro change le nombre de lignes 1 ou 2 fois, donc le délai est minimal.

L'autre problème, c'était parce que vous utilisez encore excel2007 et cette version ne comprend pas "aggregate"

Bonsoir,

Excellent travail Bravo

Même l'aperçu

trop bien

merci beaucoup

@bientôt

Rechercher des sujets similaires à "inserer ligne tableau chaque changement cette derniere"