• Publicité

Excel 2007 tri automatique en VBA

Dans ce forum, vous pouvez poser toutes vos questions concernant l'utilisation de logiciels de bureautique (Microsoft Office, Open Office, etc.)

Modérateurs: Sebastien, Stéphane, Christophe

Excel 2007 tri automatique en VBA

Messagepar mklmbb » 24 Nov 2012 01:09

Bonjour à tous,
Je désirerai faire un tri par ordre numérique, du plus grand au plus petit, mais je voudrai que ce tri se fasse automatiquement dès qu’un nombre d’une formule est modifié.
Je ne connais pas le VBA. Pouvez-vous m’aider ? Merci d’avance. Mon fichier se nomme « Tir de précision MB » Dans nom fichier, la feuille se nomme « Tirs ».
Le tableau est composé de 29 colonnes de (A :AC) et un nombre de ligne : début 14 à 49, voir plus…
Cela commence en :
Ligne 14 colonne A=(Classement)
Ligne 14 colonne B=(Date)
Ligne 14 colonne C=(Nom)
Ligne 14 Colonne D=(Cellule de remplissage numérique avec comme choix : 0/1/3 ou 5
Idem pour les colonnes E,F,G.
La ligne 14 colonne H= Cellule qui contient une formule ( somme(D14 :G14)
Idem pour les colonnes(I,J,K,L)M, (N,O,P,Q)R, (S,T,U,V)W, (X,Y,Z,AA)AB.
Sauf pour la ligne « 14 :49… » des colonnes (X,Y,Z,AA)AB Ou le choix est 0/3/ ou 5.
Répéter de même pour les lignes :15à 49…
La colonne « AC » est celle qui totalise les colonnes (H,M,R,W,AB)
En « A » mettre le classement : 1er, 2ème, 3ème…et si Ex aequo le préciser.
Merci.
Ps : je vous envoi le fichier en pièce jointe.


http://www.cjoint.com/?0Kyac5QmJiE
Michel.
mklmbb
No0b
No0b
 
Messages: 3
Enregistré le: 21 Nov 2012 10:18

Re: Excel 2007 tri automatique en VBA

Messagepar Sebastien » 24 Nov 2012 16:43

Bonjour,

mklmbb a écrit:Je désirerai faire un tri par ordre numérique, du plus grand au plus petit, mais je voudrai que ce tri se fasse automatiquement dès qu’un nombre d’une formule est modifié.

Il est possible de lancer un tri automatique lorsqu'une valeur est insérée ou modifiée dans une cellule. Pour cela, depuis Excel, lancez le module Microsoft Visual Basic en utilisant la combinaison de touche ALT + F11.

Sélectionnez l'objet Feuil2(Tirs) et insérez le code suivant dans la partie droite de la fenêtre :
Code: Tout sélectionner
Private Sub Worksheet_Change(ByVal Target As Range)
    Call macro_tri
End Sub


Ensuite, dans un module VBA (barre d'outil > Insertion > Module), collez le code suivant :
Code: Tout sélectionner
Sub macro_tri()
''
    Range("A13:AC49").Select
    ActiveWorkbook.Worksheets("Tirs").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tirs").Sort.SortFields.Add Key:=Range("AC14:AC49") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Tirs").Sort
        .SetRange Range("A13:AC49")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


A chaque fois qu'une valeur sera insérée ou modifiée dans la feuille Tirs, la macro lancera un tri sur la place de cellule A13:AC49, sur la colonne Total par ordre décroissant.

Par contre, le fait de lancer ce tri en automatique risque d'être pénible à la saisie. Le tri se faisant à chaque saisie, le classement peut bouger à chaque saisie.

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5564
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: Excel 2007 tri automatique en VBA

Messagepar mklmbb » 24 Nov 2012 17:50

Merci Sébastien, pour la rapidité de la solution et cela fonctionne.
Vous avez raison, cela est pénible à la saisie, d'ou ma nouvelle demande de modification du programme.
Faire un tri automatique dès la fin de saisie d' une ligne.
Exemple: Ligne (D14:G14, I14:L14, N14:Q14, S14:V14, X14:AA14)
Idem pour toutes les lignes suivantes (49)
Et faire un classement dans la colonne (A): 1er, 2ème, 3ème....etc. avec si possible indiquer les Ex aequo.

Encore Merci.

Michel.
Michel.
mklmbb
No0b
No0b
 
Messages: 3
Enregistré le: 21 Nov 2012 10:18

Re: Excel 2007 tri automatique en VBA

Messagepar Sebastien » 25 Nov 2012 17:13

Bonjour,

Pour le classement, pas besoin de macro. Il suffit d'utiliser la fonction RANG qui permet d'effectuer un classement et gère les ex-æquo.
Vous trouverez sur cette page des exemples d'utilisation : Les fonctions statistiques : RANG.

Dans votre cas, vous pouvez utiliser la formule ci-dessous, dans la cellule A14 (Affiche du vide si le total est de zéro, sinon affiche le rang). Formule à incrémenter jusqu'à A49.
Code: Tout sélectionner
=SI(AC14=0;"";RANG(AC14;$AC$14:$AC$49;0))


Pour la macro relative à l'objet Feuil2(Tirs), le code à insérer dans la partie droite de la fenêtre :
Code: Tout sélectionner
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("AA14:AA49")) Is Nothing Then Exit Sub
Call macro_tri
End Sub


La macro de tri ne se déclenchera que si une valeur est saisie dans une cellule se trouvant dans la plage AA14:AA49 (la dernière valeur saisissable d'une ligne).

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5564
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: Excel 2007 tri automatique en VBA

Messagepar mklmbb » 25 Nov 2012 17:58

Bonjour Sébastien,
Super, très bon travail! Je te remercie pour ta disponibilité.
Bravo pour ce Forum.
A bientot.

Michel.
Michel.
mklmbb
No0b
No0b
 
Messages: 3
Enregistré le: 21 Nov 2012 10:18


Retourner vers Forum d'entraide : Bureautique

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

  • Publicité
cron