Problème de tri sur Excel 2007
Bonjour à tous,
Je tente de faire un tri d'un tableau selon plusieurs critères type nom puis si nom identique prénom puis si les 2 identiques date de naissance via une macro sur excel 2007.
J'ai enregistré ma macro en faisant l'opération pour avoir le bon codage.
Le problème est que quand j'affecte ma macro à un bouton poussoir et que j'appuie dessus, les valeurs de mes cellules sont modifiées.
Il faut savoir que les cellules à triés sont toutes des formules du type "somme" ou "si" liées à d'autres cellule.
Exemple:
* formule de base
=SOMME(H4:J4;K5:M5;K8:M8)
* formule après tri
=SOMME(H1:J1;K2:M2;K5:M5)
Dans VBA j'ai cette programmation:
Sub tri_élèves()
'
' tri_élèves Macro
'
'
Range("T3:Y7").Select
ActiveWorkbook.Worksheets("élè ves").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("élè ves").Sort.SortFields.Add Key:= _
Range("V4:V7"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("élè ves").Sort.SortFields.Add Key:= _
Range("Y4:Y7"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("élè ves").Sort.SortFields.Add Key:= _
Range("W4:W7"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("élè ves").Sort
.SetRange Range("T3:Y7")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Sauriez-vous me donner une astuce pour conserver mes formules lors d'un tri?
Merci d'avance.
Salu et bienvenue sur le Forum,
Selon moi tu dois étendre ta sélection à toutes les colonnes concernées, y compris celles dans lesquelles se trouvent tes données concernées par les formules (donc apparemment au minimum les colonnes H à S en plus des colonnes sélectionnées T à Y).
Mais le problème ne vient pas de la macro. Lorsque tu as effectué le tri que tu as enregistré, tu avais également des erreurs dans les résultats des formules.
Si jamais fournis-nous ton fichier et l’on pourra t’aider mieux.
Cordialement.
Voilà le fichier sur lequel je travail.
Il s'agit d'un tableau tout simple pour la coupe du monde de football que j'essaie de mettre en place pour des élèves.
J'essaie de trouver un moyen ludique de les intéresser à excel.
Vous pouvez voir le problème sur le bouton de commande du groupe A.
Ton fichier n'est pas passé.
Peut-être est-il trop gros ? Essaie alors de le comprimer, sinon passe pas le site CJoint http://www.cjoint.com/
voilà le lien:
A première vue, tes formules dans la plage triée sont des formules individuelles (non incrémentées) que tu as écrites l’une après l’autre d’une manière manuelle, sans faire référence dans la formule elle-même au nom de l’équipe dans la colonne T par exemple.
Donc si tu déplaces tes lignes de cette plage sélectionnée, c’est normal que le résultat devienne n’importe quoi.
Une solution serait que tu utilises dans toutes tes formules de la plage triée des références absolues. Pour ce faire tu sélectionnes la formule complète dans la barre de formule et tu actionnes la touche F4. Ceci pour chacune des formules individuellement
Une autre solution serait que tu remplaces en une seule fois (et pourquoi pas par des instructions VBA en début de ta macro) tes formules par des valeurs par un copier-coller spécial. Si tu ne sais pas comment le faire mais que ça t’intéresserait, fais-le-moi savoir. Cette solution ne serait pas si bête puisque de toute façon tu vas devoir inscrire une prochaine fois manuellement les formules nécessaires à un autre classement. Une telle opération pourrait être faite en une seule fois pour plusieurs tableaux (par exemple pour la plage U4:Y63).
Enfin la dernière possibilité serait de modifier tes formules afin qu’elles fassent référence à une équipe bien précise et que le déplacement de celle-ci dans ton tableau n’empêche pas de trouver toujours les bonnes valeurs de base la concernant. Mais cela prendrait un temps assez considérable et je ne sais pas si le jeu en vaut la chandelle.
Amicalement.
En effet j'aimerai bien que tu m'explique comment faire avec les instructions BVA car je n'ai pas la moindre idée de comment procéder.
Merci d'avance.
Re,
As-tu pris le temps d’étudier toutes les possibilités proposées ou as-tu rapidement choisie la plus simple, soit de me demander d’effectuer le boulot ?
Si tu places un code tel que celui-ci-dessous (en adaptant les références aux cellules) au début de ta macro, avant le tri, ça devrait faire l’affaire.
Range("E5:G13").Copy
Range("E5").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = FalseA te relire.
J'ai essayé en mettant des "$" pour faire des références absolues sauf dans la colonne "+/-" car sa n'allait pas si je l'incluait dans cette modification et sa fonctionne mais il est vrai que se serai plus simple avec une macro.
J'ai donc pu créer un poussoir qui me met à jour tout les tableau d'un coup.
Pour ton code la première valeur de range correspond au tableau à actualiser c'est sa? Par contre la seconde valeur correspond à quoi?
Je te joint le tableau modifié:
Si cela ne te dérange pas, saurais-tu me dire comment mettre à jour les tableaux par cette macro dès qu'une cellule est modifié sans passer par un poussoir?
Salut,
xabino a écrit :J'ai donc pu créer un poussoir qui me met à jour tout les tableau d'un coup.
Je ne sais pas ce que tu entends par poussoir. Parles-tu de l'icône de la Fifa vers la cellule Q30 de la feuille 'Coupe du monde 2014' ? Comme tu as placé une protection de la feuille par mot de passe, je ne peux pas voir à quel code est reliée cette forme
xabino a écrit :Par contre la seconde valeur correspond à quoi?
Je ne sais pas de quelle deuxième valeur tu parles. Si tu me demandes ce que réalisent mes lignes de code, la première copie un tableau bien précis et la deuxième colle LES VALEURS copiées à un emplacement précis, ici au même endroit que le tableau de base (seul le renseignement sur la première cellule en haut à gauche de l’emplacement désiré est nécessaire).
xabino a écrit :Saurais-tu me dire comment mettre à jour les tableaux par cette macro dès qu'une cellule est modifié sans passer par un poussoir?
Pour une telle mise à jour automatisée, il faut passer par une macro événementielle (par exemple l'évènement Worksheet_
Change). Si tu n’as aucune idée, ça risque d’être compliqué à t’expliquer. Regarde alors déjà le cours VBA proposé par ce site.
A te relire.