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 SubPeux-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!
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 SubCe 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"
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!
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
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
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+