VBA - Problème de tri
Bonjour,
Dans le fichier ci-joint, j'ai la macro ci-dessous :
Option Explicit
Sub Nouvelle_saisie()
Application.ScreenUpdating = False
With Sheets("Base")
' Préparation pour la ListBox1
.Range("B8:B" & .Range("B" & Rows.Count).End(xlUp).Row).Copy .Range("Z1")
.Range("Z1:Z" & Rows.Count).Sort Key1:=.Range("Z1"), Order1:=xlAscending, Header:=xlNo
ActiveWorkbook.Names("Liste_Noms").RefersToR1C1 = "=Base!R1C26:R" & .Range("Z" & Rows.Count).End(xlUp).Row & "C26"
'UserForm1.Show
.Range("Z:Z").ClearContents
End With
End SubOr, si elle fonctionne parfaitement sur mon ordinateur, elle bloque sur deux autres machines, à la ligne
.................
.Range("Z1:Z" & Rows.Count).Sort Key1:=.Range("Z1"), Order1:=xlAscending, Header:=xlNo
......... Savez-vous comment y remédier ?
Cordialement.
re,
un fichier ancien avec +65K lignes au lieu de +1.048K lignes, feuille protégée, ... ?
Pourquoi trier toute la colonne Z, s'il n'y a que 17 cellules ?
Sub Nouvelle_saisie()
Dim N, c As Range
Application.ScreenUpdating = False
With Sheets("Base")
' Préparation pour la ListBox1
Set c = .Range("B8:B" & .Range("B" & Rows.Count).End(xlUp).Row) 'votre plage
N = c.Rows.Count 'nombre de cellules
c.Copy .Range("Z1")
With .Range("Z1").Resize(N)
.Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo
.Name = "Liste_Noms"
End With
'UserForm1.Show
.Range("Z:Z").ClearContents
End With
End SubVu nos antécédents, je ne comprends pas que tu interviennes sur un de mes fils ; je te serais reconnaissant de bien vouloir les éviter, comme je te l'ai déjà demandé. Je préfère ne pas recevoir de réponse que d'en recevoir une de ta part. Merci de respecter mon choix.
re,
comme d'habitude, j'attends une journée avant de réagir, mais je commence à me mettre en colère. Je veux simplement vos excuses pour votre langage dans des MPs.
"Vu nos antécédents,"
Vous faites 2 erreurs,
1. ceci est un forum publique, cela veut dire que tout le monde peut demander des questions et tout le monde peut réagir. Il n'y a pas des privilèges pour celui qui répond le premier. Cela n'a rien à voir avec "écraser" une personne. On avait une question "assez complexe" cette semaine à laquelle vous avez commencer à répondre, mais le niveau de la question est, même pour moi, exceptionel haut. Quand je les lis, en général, vos premières réactions sont restrictives, on peut pas faire çà ou çà. Bon la question est comme elle est, si vous ne savez pas la répondre, les 2 parties perdent leur temps. Vous avez quitté la discussion avec du mépris, bon, et alors ??? Vous aviez pas de la valeur ajoutée. L'autre discussion avec ces "salles", je lis vos réactions et je vous laisse faire, mais après quelque réponses, je vous donne simplement le conseil de le faire d'une manière que la solution soit plus solide, mais, vous refusez d'écouter et vous quittez de nouveau la discussion et continuez en MP, ce qui n'est pas vraiment la politique de ce site. Finalement cette discussion, çà, c'est vraiment amusant, je vous donne la réponse (j'avais oublié de dire que votre faute était un simple point en face de "rows", mais à ce moment, cela me semblait "vous écraser"). Depuis personne autre a répondu, cela veut dire, je suppose, que ma réponse était correcte. Je n'ai jamais eu l'intention de vous écraser, le but final de ce site est de résoudre les problèmes posées dans un delai acceptable et qu'il n'y a pas des frictions et tensions entre les parties, de manière qu'on a besoin de la modération.
2. je n'ai pas lu le manual du site mais en général dans tous les sites auxquels je participe, on n'utilse pas un langage abusif, d'insultes ou de commentaires discriminatoires. Dans les autres site, on est plutôt direct, moins de tracas, moins de formules de politesse, ceci est une conclusion et non une conviction. Bon, je m'amuse encore avec la façon dont vous me mettez en dehors des "grands du site" et même dans le catégorie des "petits du site". Ces jugements sont toujours relatives. Mais dans la partie publique vous utilisez un langage offensif en disant que c'est "ma" question et vous devez garder vos distances et puis dans les MPs vous continuez d'une manière dégoûtante. C'est comme un petit enfant dans une aire de jeux qui s'approprie tous les jouets en produisant le plus de décibels possible en éspèrant que l'autre personne reste silencieuse. Bon, un moment, je n'ai plus lu tout ça, j'avais marre. Je demandais simplement vos excuses et je n'ai pas l'intention de vous visiter en Suisse pour vérifier si cela n'est pas un mensonge. Bon, vous ne voulez pas et vous déposez une plainte au modérateur que moi, je suis une personne désagréable. Je lui ai transmis les MPs. Pour lui, c'est aussi ambetant, une discussion entre 2 égos. J'étais d'accord de vous laisser tranquille, à condition des excuses (en MP ou publique). Vous refusez depuis une semaine, au lieu vous hurlez comme un cochon sevré.
Je ne répète qu'une phrase, soyez adulte, excusez-vous simplement ... et tout s'arrête
PS. les excuses ne contiennent jamais le mot "mais" et sans conditions, sinon ce ne sont pas des excuses.
Bonsoir,
Comment peut-on encore avoir des plages de données sans structure ? Donc votre liste est sous tableau structuré, bon il est vrai que cela vous oblige à entrer à la main la valeur chrono d'enregistrement, mais ce n'est pas grand chose.
Donc après pour garder l'ordre chrono tout en ayant un ordre alphabétique dans le USF, il vous suffit de trier les noms en croissant, faire la copie de la colonne en Z, et trier le tableau par la première colonne pour retrouver l'ordre des enregistrements.
Liste_Noms est modifié par cette formule : =DECALER(Base!$Z$1;;;NBVAL(Base!Z:Z);) qui permet d'avoir une liste dynamique. La cellule en E1permet de faire la vérification.
Le fichier :
@ bientôt
LouReeD
NB : Pas de bol c'est moi qui répond...