Tri automatique

Bonjour à tous,

Je suis totalement novice en macro, j'ai néanmoins besoin de l'utiliser cette programmation dans un tableau.

Il s'agit d'un tableau de classement pour des régates de voiliers radio-commandés.

Dans le tableau joint ( le récapitulatif ), j'ai besoin de trier les différentes lignes et les positionner en face de leur place respective pour déterminer le classement et le lire directement sans chercher les lignes.

En face du premier, devra se positionner la ligne sur laquelle est indiquée le plus petit nombre de points. En face de la deuxième place , la ligne dont le nombre de points est immédiatement supérieur au précédent et ainsi de suite.

Il serait intéressant que rien n'apparaisse sur les lignes pour lesquelles aucun N° de voile n'est saisi et que le classement se limite au nombre de N° de voiles enregistré (exemple : 4 N° de voile enregistrés, le classement se limite à 4 positions).

Par avance merci pour l'aide que vous pourrez m'apporter. C'est d'ailleurs plus que de l'aide puisque cela est totalement en dehors de mes compétences.

Bien cordialement

Bonjour,

Il n'a à pas de spécialiste inspiré par mon tableau ?

Je n'ai peut être pas été suffisamment clair dans mon explication.

Je vous souhaite une agréable journée à tous.

Bonjour,

je n'en fais pas partie de ces "spécialistes" mais ton tableau et ton explication ne sont peut être pas clairs

Je dis ça ...

P.

bonjour,

une proposition

Sub aargh()
    dl = 2
    While Cells(dl, 2) <> ""
        dl = dl + 1
    Wend
    dl = dl - 1
    Range("B2:AB" & dl).Sort key1:=Range("C2"), order1:=xlAscending, Header:=xlYes
End Sub

Bonjour,

Merci pour ta proposition, hélas je ne sais pas l'utiliser.

Comment dois-je procéder. Je me suis positionné sur la feuille "classement", puis sur "visualiser le code". J'y ai collé ta proposition mais rien ne se passe.

Je dois passer à coté de quelque chose.

Peux tu m'ai der davantage STP ?

Par avance merci.

Bonjour à tous

Si je peux me permettre d'intervenir...

Ce que tu as fait est bien et pour l'utilisation :

capture

Bye !

Bonjour,

Merci pour ton aide, malheureusement je n'ai pas d'onglet développeur sur mon excel 2013.

Comment puis-je contourner cela.

Merci

"Fichier - Option"

capture 1 capture 2

OK ?

Bye !


Mais tu peux aussi mettre un bouton de commande sur ta feuille pour actionner la macro :

Bouton de commande

Pour personnaliser un bouton de commande, on peut le dessiner avec l'outil de dessin : "INSERTION – Texte - Zone de texte"

* On saisie le texte qu’on veut voir écrit sur le bouton. Ex : ‘’Lancer la macro’’

* On sélectionne ensuite l'objet en cliquant sur sa bordure et en faisant attention à ce que ce soit bien l'objet qui soit sélectionné et non le texte à l'intérieur.

*On sélectionne les outils de dessin :’’OUTILS DE DESSIN’’ (en haut et teinté en orange)

* On choisit si un style de forme, si on veut un dégradé de couleur : clic sur l’un des boutons ‘’Abc’’

* Si on veut on clique et on modifie la forme du bouton : ‘’Modifier la forme – Modifier la forme’’

* On retourne dans le menu ‘’Accueil’’ du bandeau

* On applique les formats que l’on veut : centrage du texte, couleur du fond, couleur de la police…

* On positionne l'index de la souris sur le bord de l'objet sélectionné : l'index doit prendre la forme de 4 petites flèches en croix

* On fait un clic droit et dans la fenêtre qui s'ouvre on choisit "Format de la forme’’

* On clique sur le 3° icone des ‘’Options de forme’’

* On clique sur ‘’PROPRIETES’’

* on clique sur ‘Ne pas déplacer ou dimentionner avec les cellules’’

* On décoche la case ‘’Imprimer l’objet’’

* On ferme la fenêtre

* On sélectionne à nouveau l’objet et on y fait un clic droit

* Dans la fenêtre qui s'ouvre on choisit maintenant "Affecter une macro". Attention, il faut parfois recommencer plusieurs fois l'opération pour ouvrir la bonne fenêtre...

* On sélectionne la macro que le bouton doit déclencher

* On clique sur "OK"

On a alors un bouton de commande que l'on peut remodifier à son goût en faisant dessus un clic droit.

bonjour,

une autre façon de faire pour executer la macro

faire alt-f8 puis choisir la macro

Rebonjour,

Super ça fonctionne !!!

je souhaiterais malgré tout une petite amélioration : Pour que le tri s'exécute il faut que je lance la macro.

Je pense qu'il est possible que cela se fasse automatiquement dès lors qu'une modification intervient dans le tableau.

J'espère ne pas abuser de votre temps.

Par avance merci.

Bien cordialement

bonjour,

code à mettre dans le module de la feuille

Private Sub Worksheet_Change(ByVal Target As Range)
    dl = 2
    While Cells(dl, 2) <> ""
        dl = dl + 1
    Wend
    dl = dl - 1
   application.enableevents=false
    Range("B2:AB" & dl).Sort key1:=Range("C2"), order1:=xlAscending, Header:=xlYes
    application.enableevents=true
End Sub

Bonjour,

J'ai copié et collé la macro que tu as écrite sur la feuille onglet "visualiser le code". Je n'ai fait aucune autre action.

Rien ne se passe quand je change une donnée du tableau.

J'ai peut être oublié quelque chose d'important.

Le tableau est verrouille de façon à ce que aucun concurrent puisse intervenir. Le mot de passe de protection "vrc"

Par avance merci, je suis gêné d'abuser de ton temps de la sorte.

Bien cordialement

Bonjour,

voici une version de la macro adaptée à ton fichier

Bonsoir,

C'est super génial, cela fonctionne merveilleusement bien.

Je vais oser une dernière demande :

Comme tu as vu sur le tableau, on retire la plus mauvaise manche toutes les 4 manches( le plus gros nombre de points)

Puis sur 8 manches on retire les deux plus mauvais scores, sur 12 manches les 3 plus mauvais scores, sur 16 manches les 4 plus mauvaises et enfin sur 20 manches les 5 plus mauvaises.

Ce qui donnes les colonnes de retrait sur la droite.

Est il possible de barrer avec un trait par dessus le score sur la gauche du tableau dans les colonnes de 1 à 20 les scores qui ont été retirés dans les colonnes de droite, et cela automatiquement ?

Par avance merci.

Bien cordialement

Bonjour,

J'ai ajouté deux lignes au dessus de mon tableau (que je joins à nouveau) et ...... bien entendu la macro ne fonctionne plus.

J'ai essayé de changer les valeurs de la macro, hélas sans succès.

Peux tu remédier à mon problème s'il te plait ?

J'ai bien conscience de t'ennuyer. Combien de temps faut il pour une personne normale pour acquérir les bases du VBA ?

Je suis retraité, j'ai du temps devant moi et je suis persuadé que cela me plairait de savoir manipuler ce langage.

Par avance merci.

Bien cordialement

bonjour,

pour tenir compte du fait qu'il y a 2 lignes supplémentaires d'entête.

remplace la procédure par celle-ci

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 'on recherche la dernière ligne contenant une voile 
 dl = 4 ' on part de la ligne 4
    While Worksheets("classement").Cells(dl, 2) <> "" 'tant qu'il y a une voile
        dl = dl + 1 'ajoute 1 au pointeur de ligne
    Wend
    dl = dl - 1 ' on corrige, car on est une ligne trop loin
    Worksheets("classement").Unprotect "vrc" ' on déprotège la feuille
    Application.EnableEvents = False ' on interdit les événements
    Worksheets("Classement").Range("B4:AB" & dl).Sort key1:=Worksheets("Classement").Range("C4"), order1:=xlAscending,Header:=xlYes ' on trie le tableau 
    Worksheets("classement").Protect "vrc" 'on rereprotège la feuille
    Application.EnableEvents = True 'on réactive la gestion des événements
End Sub

Merci beaucoup, ça fonctionne à nouveau.

Je vais regarder de prêt les modifications que tu as apportées pour comprendre ce que tu as fait.

La modification dont je t'ai parlé hier, qui consistait à barrer les scores qui sont retranché sur sur la partie droite est - elle réalisable STP ?

Par avance merci.

Bonsoir,

code à mettre dans le module du classeur

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    dl = 5 'on parcourt toutes les lignes contenant une voile, on commence à la ligne 5
    With Worksheets("classement") ' on travaille avec la feuille classement
        .Unprotect "vrc" 'on déprotège la feuille
        While .Cells(dl, 2) <> "" ' tant qu'il y a une voile
        .Range("D" & dl & ":W" & dl).Font.Strikethrough = False
            For Each score In .Range("X" & dl & ":AB" & dl) ' on prend chauqe score retranché
                If score <> "" Then ' si score <>""
                    For j = 4 To 23 ' on recherche dans le tableau le score à barrer
                        If Abs(score) = .Cells(dl, j) And Not (.Cells(dl, j).Font.Strikethrough) Then
                            .Cells(dl, j).Font.Strikethrough = True 'on barre le score
                            Exit For ' on a terminé pour ce score
                        End If
                    Next j 'on passe au score suivant dans le tableau
                End If
            Next score ' on passe au score retranché suivant
            dl = dl + 1 ' on passe à la voile suivante
        Wend
        dl = dl - 1 'on ajuste le numéro de ligne de la dernière voile
        Application.EnableEvents = False
        .Range("B4:AB" & dl).Sort key1:=.Range("C4"), order1:=xlAscending, Header:=xlYes
        .Protect "vrc" ' on trie selon les points
        Application.EnableEvents = True
    End With
End Sub

Merci du travail que tu as fourni. Je ne peux pas en dire autant de ma part de travail !!

J'ai fait plusieurs essais pour placer ta macro, mais hélas je ne parviens à rien de bon.

Je vais demander une fois de plus ta collaboration pour me positionner ta macro et l'activer comme ils se doit.

Je joins une nouvelle fois mon fichier.

Quelle tristesse d'être aussi ignorant dans ce domaine.

Par avance merci

Bien cordialement

bonsoir,

pour mettre le code dans le module du classeur ("thisworkbook")

faire alt-F11, double-clic sur thisworkbook puis faire un copier-coller du code.

cette opération est faite dans le fichier joint.

Rechercher des sujets similaires à "tri automatique"