Couper-Coller lignes vers un autre tableau

Bonjour Curulis,

Merci pour ton soutien

Alors je me suis lancé ! Tu vas certainement rire, ou peut être pleurer en fait...

J'ai imaginer ça : (comme tu peux l'imaginer ça marche pas, erreur "1004"...à cause de cellules fusionnées...)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
' je sais pas si cela est nécessaire mais je rappel quand même ce que je vais devoir utiliser
Set rCell = Columns("A").Find("TAB1", SearchDirection:=xlNext)
iTopRow1 = rCell.Row + rCell.Offset(0, 1)
iRow1 = Range("A" & rCell.Row).End(xlDown).Row
Set rCell = Columns("A").Find("TAB2", SearchDirection:=xlNext)
iTopRow2 = rCell.Row + rCell.Offset(0, 1)
iRow2 = Range("A" & Rows.Count).End(xlUp).Row

'Si le clic intervient sur la première ligne théorique de TAB1
If iTopRow1 - 1 Then
    'vérifie si il y a plus d'une ligne à trier
    If iRow1 > iTopRow1 Then
        'fameuse variable de 1ère ligne, dis moi j'ai juste !!
        sFlag = Chr$(64 + Target.Column) & Cells(1, 2) + 1
        Range("A" & Cells(1, 2) + 1 & ":X" & iRow1).Sort Key1:=Range(sFlag), Order1:=xlAscending
    End If
End If

'si le clic intervient sur la première ligne théorique de TAB2
If iTopRow2 - 1 Then
    'vérifie si il y a plus d'une ligne à trier
    If iRow2 > iTopRow2 Then
        'fameuse variable de 1ère ligne
        sFlag = Chr$(64 + Target.Column) & Cells(1, 2) + 1
        Range("A" & Cells(1, 2) + 1 & ":X" & iRow1).Sort Key1:=Range(sFlag), Order1:=xlAscending
    End If
End If

End Sub

Peux-tu essayer de me guider à nouveau, si je suis pas déjà tomber de la falaise...

Merci Curulis

A+

Salut Axel,

c'est déjà un bon début! Tu es sur la bonne voie! Le raisonnement est bon, juste quelques petites erreurs bien pardonnables!

Les calculs de variables sont inutiles à rappeler puisque déjà présents en début de SUB.

'Si le clic intervient sur la première ligne théorique ligne-titre de TAB1

If iTRow = iTopRow1 - 1 Then

'vérifie si il y a plus d'une ligne à trier

If iRow1 > iTopRow1 Then

'fameuse variable de 1ère ligne, dis moi j'ai juste !!

sFlag = Chr$(64 + Target.Column) & Cells(1, 2) + 1 iTopRow1

'

cells(1,2) = valeur de la cellule en ligne 1, colonne 2 = B1 = cellule fusionnée = boum!

'

Range("A" & Cells(1, 2) + 1 iTopRow1 & ":X" & iRow1).Sort Key1:=Range(sFlag), Order1:=xlAscending

End If

End If

Pour info, ma procédure compte 8 lignes et est valable pour les 2 tableaux!

Hardi, Axel! Long est le chemin!

Dès que ça marche chez toi (ou si tu tombes de la falaise! ), je t'enverrai tout ça!

Bravo pour notre futur contributeur Excel aux causes désespérées! 8)

A+

Hello Curulis,

Boudiou, je suis pas tombé encore mais j'ai un peu le vertige là...

Après ta correction voici ce que ça donne :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    'Si le clic intervient sur la ligne-titre de TAB1
    If iTRow = iTopRow1 - 1 Then
        'vérifie si il y a plus d'une ligne à trier
        If iRow1 > iTopRow1 Then
            'fameuse variable iTopRow1
            sFlag = Chr$(64 + Target.Column) & iTopRow1
            Range("A" & iTopRow1 & ":X" & iRow1).Sort Key1:=Range(sFlag), Order1:=xlAscending
        End If
    End If
End Sub

Ce bout de code, je l'ai calé à la fin de la fenêtre feuille Order, en dessous du reste de ton travail. J'ai plus de message d'erreur de cellules fusionnées ahah!

Par contre rien ne se passe sur la feuille "Order" Je me suis relis plusieurs fois, voir si je n'avais pas fait d'erreur de syntaxe. Vois-tu quelque chose ?

Autre chose que je ne comprends pas, on vérifie si le clic intervient sur la ligne titre TAB 1 mais on écrit rien si le clic intervient ailleurs (par exemple un clic sur la ligne titre TAB 2), pas besoin d'un petit If Not au milieu de tout ça?

Mis à part cela, je tiens le bon bout tu crois ?

Merci encore et toujours pour ton aide Curulis !

Salut Axel,

je l'ai calé à la fin de la fenêtre feuille Order, en dessous du reste de ton travail...

Ça veut dire quoi? Tu me fais peur!

Ce bout de code (il faut évidemment adapter la même chose pour TAB2, malin! ) doit être placé entre certaines lignes Application.Screen... = False et Application.Enabl... = True, comme une sous-section, si tu veux !

Pas vu d'erreur! Bien placé, ça doit fonctionner!

Trêve de plaisanterie, je t'envoie le fichier adapté en ce sens (j'espère que c'est la bonne version ). Tu retrouveras bien mon petit bout de code!

J'ai également ajouté une possibilité de basculer vers TERMINE (à trouver! ).

Si ça t'embête, tu supprimes les lignes!

Tous mes encouragements à progresser en VBA!

Bienvenue au club!

A+

HéHey !

"Je l'ai calé à la fin de la fenêtre feuille Order, en dessous du reste de ton travail.." Dans Visual Basic bien entendu

"Ce bout de code (il faut évidemment adapter la même chose pour TAB2" Je me disais bien qu'il manquait quelque chose !

Ton bout de code fonctionne lui parfaitement ! Trop bien !

Tu as créé deux nouvelles variables, drapeau 1 et drapeau 2. Ces iFlag(1 ou 2) te permettent de détecter si le clic intervient en TAB 1 ou TAB 2 ? Je suis pas sur de piger le fonctionnement des deux variables..

Je t'embête avec à mes question J'en ai une petite pour la route...

Je me demandé si un deuxième clic pourrait trier par ordre décroissant ... ?

Merci en tout cas, cette fonction est vraiment trop bien !

Bonne journée.

Et un tri décroissant pour Axel, un!

J'ai voulu faire avec un clic droit pour faire facile mais le menu contextuel gâchait tout. J'ai alors choisi de poser des boutons-images pour que tu vois d'un coup d'œil quel tri était activé!

Pour ta dernière question, :

  • iFlag1 détermine la première ligne à trier
  • iFlag2 détermine le bas du tableau compris dans le tri.

A+

Rechercher des sujets similaires à "couper coller lignes tableau"