Bouton généré via VBA et triage tableau

bonjour,

j'ai une macro qui me créer une ligne sur laquelle un bouton est généré

de base cette macro mettait cela à la première ligne et je n'avait donc pas de soucis avec le bouton qui se mettait en position fixe via

Set Btn = ActiveSheet.Buttons.Add(900, 163, 57, 13)

cependant j'ai souhaité optimisé les choses et cela pour éviter des erreurs j'ajoute désormais cette ligne à la fin et procède à un triage du tableau

Résultat comment puis je procéder afin que le bouton suive la ligne lors du triage?

j'ai tenté un truc du genre: Set Btn = ActiveSheet.Buttons.Add(900, Range("B" & derlign), 57, 13) puis ensuite tri mais cela ne fonctionne pas...

la macro en question

Sub Image1_Cliquer()
'On identifie la dernière ligne en vue de l'insertion
derlign = Sheets("Ecriture").Cells(Rows.count, "A").End(xlUp).Row + 1

Dim Btn As Object

Worksheets("Ecriture").Rows(derlign).Insert

Worksheets("Ecriture").Range("A" & derlign) = Format(Date, "dd/mm/yyyy")
Worksheets("Ecriture").Range("B" & derlign) = Format(Date, "dd/mm/yyyy")

Worksheets("Ecriture").Range("A12:A" & derlign).Sort key1:=Worksheets("Ecriture").Range("A12"), order1:=xlDescending, Header:=xlYes

'Set Btn = ActiveSheet.Buttons.Add(900, 163, 57, 13)

With Btn
    .Caption = "Upload"
    .name = "Upload"
    ' you can modify other properties as well
    .Font.Bold = True
    .OnAction = "Upload_Click"

End With
End Sub

merci par avance

Bonsoir,

pour que le bouton suive le tri, il faut qu'il soit compris dans une cellule du tableau et qu'il soit plus petit que cette dernière :

9explications.xlsx (21.96 Ko)

@ bientôt

LouReeD

ok merci pour cette explication ainsi que le fichier

toutefois mon soucis réside dans le fait que le bouton est généré par vba donc ok pour le faire plus petit mais quid du placement.

je fais un tri descendant basé sur des dates

seules soucis si j'ai plusieurs dates du jour par exemple le dernier enregistrement ne se place pas sur la première ligne

Bonjour,

cependant j'ai souhaité optimisé les choses et cela pour éviter des erreurs j'ajoute désormais cette ligne à la fin et procède à un triage du tableau

Si vous ajoutez votre ligne "à la fin", vous connaissez alors sa ligne, et vous connaissez la colonne où vous voulez mettre le bouton, non ?
De ce fait il vous suffit de dire que :
le Left du bouton = Cells(laligne,lacolonne).left + 5 (ou -2 il faut juste qu'il ne touche pas les bordure de la cellule)
le Top du bouton = Cells(laligne,lacolonne).top + 5
le Width du bouton = Cells(laligne,lacolonne).width - 5
le Height du bouton = Cells(laligne,lacolonne).Height -5

Une fois le bouton sur la bonne cellule, faites votre tri.

@ bientôt

LouReeD

bonjour LouReeD,Darkangel,

il faut ajouter un 2ième key pour trier (avec par exemple le numéro de facture ou ...), non ?

Set Btn = ActiveSheet.Buttons.Add(900, Range("A" & derlign).top, 57, 13)

Bonjour,

En combinant vos retours je suis enfin arrivés à faire que le bouton remonte avec la ligne

Set Btn = ActiveSheet.Buttons.Add(950, Range("A" & derlign).Top, 37, 9)
'
'
With Btn
    .Caption = "Upload"
    .name = "Upload"
    ' you can modify other properties as well
    .Font.Bold = True
    .OnAction = "Upload_Click"
    .Left = Cells(derlign, 12).Left + 5
    .Top = Cells(derlign, 12).Top + 3

End With
Worksheets("Ecriture").Range("A13:A" & derlign).Sort key1:=Worksheets("Ecriture").Range("A13"), order1:=xlDescending, Header:=xlYes

maintenant j'aimerais savoir comme procéder apres triage

En effet le tri se fait sur la colonne A qui comprend des dates

admettons que plusieurs dates concernent la date du jour la dernière ligne rajoutée va s'ajouter sous celle correspondant à la date du jour

Comment pourrais procéder afin que cela remonte en premier ligne du tableau?

image

re, oubien

     With ActiveSheet
          Set c = .Cells(Rows.Count, "A").End(xlUp).Offset(1)
          With .Buttons.Add(c.Left + 1, c.Top + 1, 10, 10)
               .Caption = "Upload"
               .Name = "Upload"
               ' you can modify other properties as well
               .Font.Bold = True
               .OnAction = "Upload_Click"
               .Width = c.Offset(, 1).Left - .Left - 2
               .Height = c.Offset(1).Top - .Top - 2
          End With
     End With

la 2ième clef pour trier, vous connaissez votre fichier, c'est la colonne avec quoi ? Quelle est la différence entre les lignes avec la même date ?

justement pas de distinction jusqu'à maintenant

allez s'il n'y a pas de différencence, alors le résultat est correcte.

ne peut on pas procéder comme

dernier enregistrement = premiere ligne apres triage?

re,

la colonne D par exemple, avec le temps d'ajouter cette ligne

    With Worksheets("Ecriture")
          derlign = Application.Max(13, .Cells(Rows.Count, "A").End(xlUp).Row + 1)
          .Rows(derlign).Insert
          .Range("A" & derlign) = Format(Date, "dd/mm/yyyy")
          .Range("B" & derlign) = Format(Date, "dd/mm/yyyy")
          .Range("D" & derlign) = Now

          .Range("A12:D" & derlign).Sort key1:=.Range("A12"), order1:=xlDescending, key2:=.Range("D12"), order2:=xlDescending, Header:=xlYes
     End With

Bien vu je n'ai donc eu qu'a changer le date par

Worksheets("Ecriture").Range("A" & derlign) = Now

re, oui, oubien .Range("A" & derlign) = derlign

pas tout à fait car derlign = la ligne la plus en bas du tableau à la rigueur il faudrait que je dise la premiere ligne de la meme facon serait ce correct?

premlign =Sheets("Ecriture").Cells(Rows.count, "A").End(xlDown).Row + 1 merci pour votre aide en tout cas

Rechercher des sujets similaires à "bouton genere via vba triage tableau"