XL 2010 Tri désorganisé

Blafi

XLDnaute Occasionnel
Bonjour le forum,

J'ai un problème dont je ne m'explique pas la cause :
J'ai une base de données de 1400 adhérents et j'ai écrit une macro qui permet de rentrer un nouvel adhérent grace à une boite de dialogue. Quand toutes les rubriques de la boite de dialogue sont remplies, la macro entre les infos dans les colonnes adéquates de la BdD puis trie la base afin de classer les adhérents par ordre alphabétique sur le nom et le prénom.
Tout va bien depuis 4 ou 5 ans, mais depuis quelques jours, lorsque ça lui prend, le tri se fait aussi avec la ligne des têtes de colonnes, sans que j'ai changé quoi que ce soit dans la macro, la ligne en question et quelques fois la ligne au dessus (qui contient des boutons macros) sont triées avec le reste de la base et se retrouvent au milieu de la base (à hauteur des noms commençant par No..), semant la zizanie pour l'utilisateur et la suite des opérations...

Ce problème ne se produit pas tout le temps : on peut entrer plusieurs nouveaux adhérents sans problème et puis tout d'un coup c'est la cata !
Je ne vois pas ce qui peut expliquer cette folie soudaine.... Quelqu'un aurait-t-il une explication ?
Merci de vos réponses et à bientôt.
 

Blafi

XLDnaute Occasionnel
Re,
Pour compléter mon message précédent les têtes de colonne sont dans l'ordre des colonnes A,B, etc...
N° Adh- Mme ou M - Nom (ou Tuteur)- Prénom -Adhésion - Activité 1- Activité 2- Activité 3- Activité 4- Parent- inscription-paiement - An Nais -Résidence -Rue -Cde Post - Ville- Tél fixe- Tél mobile- Mail -Nom enf -Prénom Enf- An nais enf -Obs- Adhésion

Et la macro de tri est : (précision Derligne est la variable qui calcule la dernière ligne remplie de la base) :
Range("A3:Z" & DerLigne).Sort Key1:=Range("C3"), Order1:=xlAscending, Key2:=Range _
("D3"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal

Rien d'anormal car ça fonctionne 9 fois sur 10 mais des fois ça bug. Bizarre...
Je vais essayer de remplacer header suivant les indications de Patrice33740 et je verrai si ça change quelque chose.
Si vous avez d'autres explications après ce dernier post.. merci d'avance.
 

Blafi

XLDnaute Occasionnel
Encore bonjour,

Ci-dessus j'aurai dû préciser que la première ligne de la feuille ou se situe la base est assez large et contient différents boutons lançant des macros et que la 2ème ligne contient, elle, les têtes de colonnes (header en anglais?)
Ainsi, j'ai peur si je mets header à xlyes que ce soit la 1ère ligne de ma base qui soit prise en compte c'est à dire celle des boutons... Cela sera-t-il le cas ?

Merci de vos réponses et à bientôt.
 

Modeste

XLDnaute Barbatruc
Je vais essayer de remplacer header suivant les indications de Patrice33740 et je verrai si ça change quelque chose
Ben ça dépend: tes titres sont en ligne 2 ou 3?

... et je vois que tu réponds en même temps! Pense à la manière dont tu ferais un tri (sans macro): si tu te positionnes dans ta liste (et que celle-ci est bien construite!!) Excel se charge de déterminer s'il "repère" des titres de colonnes (ça équivaut au paramètre Header:=XlGuess) et il coche (ou pas) la case concernée.
Ici, tu n'as apparemment pas sélectionné les titres, alors définis ce paramètre à XlNo
... ou alors sélectionne-les au départ Range("A2:Z" & DerLigne).Sort et définis le Header à XlYes

Re-teste ensuite
 

Patrice33740

XLDnaute Impliqué
Re,

Lorsque tu mets Header:=xlGuess, tu laisse Excel choisir si il y a un en-tête ou pas d'où ton problème !
Avec Header:=xlYes tu indiques que ton tableau possède une ligne d'en-tête
Avec Header:=xlNo tu indiques que ton tableau ne possède pas de ligne d'en-tête
Excel détecte automatiquement le tableau.

Donc la bonne syntaxe est :
Range("A2:Z" & DerLigne).Sort Key1:=Range("C3"), Order1:=xlAscending, Key2:=Range _
("D3"), Oder2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase _
:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal

Avec A2 au lieu de A3 et xlYes au lieu de xlGuess

Edit : pour éviter tout problème il est préférable que la ligne située au dessus du tableau ne contient aucune donnée (ni formule), dans ton cas, seulement les boutons
 

Blafi

XLDnaute Occasionnel
Merci Modeste et Patrice33740,
J'avais écrit cette macro en l'enregistrant automatiquement et il est vrai que j'avais sélectionné uniquement les lignes du tableau sans tenir compte de la ligne d'en-têtes. Toutefois en utilisant le tri personnalisé et en enregistrant la macro, on doit bien préciser sur quels champs doit se faire le tri, à savoir Nom et Prénom. Dans ce cas j'ai obtenu ce code, ce qui explique les header=xlguess et les sélection sur C3 et D3..
Je vais donc rectifier ce code suivant vos indications..
Merci pour votre aide. Bon courage et à bientôt.
 

Blafi

XLDnaute Occasionnel
Bonjour,
J'ai apporté les modifications demandées à mon code..... et c'est encore pire qu'avant car excel procède alors à chaque fois au tri de la ligne d'entête avec le reste des données...
Je ne sais plus quoi faire et je m'interroge sur l'existence d'un bug dans mon excel ou le VBA...
Merci de vos suggestions..
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
489

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 845
Messages
2 092 770
Membres
105 529
dernier inscrit
StarExcel