XL 2013 Problème de tri en VBA

cvasse

XLDnaute Nouveau
Bonjour,

j'ai un problème de tri sous excel avec un programme VBA. Pour résumer, j'ai un userform qui me permet de saisir des enregistrements. Chaque enregistrement se place ensuite dans la feuille Excel qui est alors retriée pour mettre le nouvel enregistrement à la bonne place.

Le tri en lui même se passe très bien. Là où cela se gatte, c'est avec les boutons et cases à cocher que j'ai sur chaque ligne.

La commande

ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address

qui me permet de récupérer les coordonnées du bouton sur lequel j'ai appuyé me restitue une mauvaise adresse pour les lignes ayant été déplacées.

Lorsque je fais le tri manuellement cela fonctionne bien. J'ai donc enregistré la macro pour la reporter dans le programme mais cela ne fonctionne pas mieux.

Ma commande de tri est la suivante :

Sub tri_mois(nom_feuille As String)



'Tri des opérations du mois par date
'------------------------------------


Dim plage As String
Dim tri As String

'Calcul du nombre de lignes
num_ligne = Range("B5").End(xlDown).Row
plage = ("B6:I") & num_ligne
tri = ("B6:B") & num_ligne

Range(plage).Select

ActiveWorkbook.Worksheets(nom_feuille).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(nom_feuille).Sort.SortFields.Add Key:=Range( _
tri), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets(nom_feuille).Sort
.SetRange Range(plage)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

End Sub

soit beaucoup plus compliqué que ma commande de tri initiale qui était

'Range(plage).Sort key1:=Range("B6"), order1:=xlAscending

Merci beaucoup pour votre aide.
 

Lone-wolf

XLDnaute Barbatruc
Re : Problème de tri en VBA

Bonsoir cvasse et bienvenue sur XLD :)

ça serait mieux si tu joint le classeur en question. ;)

'Range(plage).Sort key1:=Range("B6"), order1:=xlAscending

Si plage est une plage nommée alors in faut que tu mette les guillemets. Sinon

With Sheets("Feuil1")
.Range("a2:f65000").Sort .Range("b6"), xlAscending
End With




A+ :cool:
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : Problème de tri en VBA

Bonjour,

Personnellement je remplacerais les boutons par un double-clic et les case à cocher par une colonne avec x (ou une jolie coche verte si tu préfères).
Si le tri se passe sur 1 ou 2 colonnes tu pourrais l'insérer directement à sa place.
Si tes objets sont contenus dans une cellule ils devraient suivre le tri.
eric
 

cvasse

XLDnaute Nouveau
Re : Problème de tri en VBA

Bonjour Eric,

Effectivement, la coche verte est une bonne idée. Je n'y avais pas pensé. Quant au double clic, c'est compliqué car j'ai 2 boutons par ligne, un pour modifier et un pour supprimer. Et je trouve plus sympa de passer par un bouton.
Si je ne trouve pas de solution, je suivrai ton conseil en ajoutant le bouton supprimer dans l'userform mais ca va faire beaucoup de manipulations pour supprimer une ligne.
Je trouve quand même surprenant qu'en reprenant le code généré par la macro, cela ne fonctionne pas.

Merci de ton intervention.
 

cvasse

XLDnaute Nouveau
Re : Problème de tri en VBA

Bonjour Lone Wolf.

Merci pour ta réponse. :)

j'ai donc joint le classeur en question.

La procédure de tri est appelée à chaque ajout (clic sur le bouton OK du userform appelé lors d'un clic sur le bouton saisie) ou modification (clic sur le bouton OK du userform appelé lors d'un clic sur le bouton modifier d'une ligne).

Christian
 

Pièces jointes

  • comptes_2016.xlsm
    122.5 KB · Affichages: 24

eriiic

XLDnaute Barbatruc
Re : Problème de tri en VBA

Bonjour,

Effectivement, TopLeftCell ne semble pas mis à jour sur un tri (également constaté sur un tri manuel).
Au risque d'insister j'évite de mettre trop d'objets sur les feuilles, trop souvent source d'instabilité.
Tu pourrais, sur clic-droit ou double-clic, afficher ton UF avec un bouton 'Supprimer la ligne' et un autre 'Modifier' que tu rends Enabled si un champ est édité.
Du même coup ça règle ton problème.
eric
 

cvasse

XLDnaute Nouveau
Re : Problème de tri en VBA

Merci Eric pour ta réponse. Je suis par contre surpris car lorsque je fais le tri manuellement, tout se passe super bien. Même pour la case à cocher.
Mais le code généré est le même que celui que j'ai tapé.
Si je ne trouve pas mieux, je suivrai ton avis et ajouterai ces boutons en UF.

bonne journée.
 

Discussions similaires

Réponses
3
Affichages
658

Statistiques des forums

Discussions
312 844
Messages
2 092 762
Membres
105 529
dernier inscrit
StarExcel