Bonsoir à tout ce fil
Bon ben tant qu'on est sur un fil long, je vais y mettre ma couche !! lol
Bon alors deux trois remarques comme çà à la volée...
Nom des Fichiers Postés
Vu que Laurent tu as l'air aimer produire des fichier et des versions...
Si tu as l'intention de t'y retrouver et que les autres suivent tes Fichiers et surtout leur évolution, il est important de ne pas poster TRiAlphaTbt à plusieurs reprises et reprises avec le même nom.
Surtout pour un fichier que tu souhaites faire évoluer et pour lequel tu demandes participation.
Le même nom, provoque
1: On ne peut ouvrir les deux en même temps pour voir la différence...
2: On finit par plus savoir de quelle version on parle, ou on finit par poster la vieille version (voir juste ici
)
L'implémentation standard des noms de versions s'effectue comme ceci
TriAlphaTbt => fichier de départ ou base de donnée
TriAlpha01 => Premier Programme
TriAlpha01.01 => Premiere Version Corrigée du Premier Programme (pour un rectificatif de bug)
TriAlpha02.00 => Deuxième Version du Programme (Ajout de Fonctionnalités)
TriAlpha02.01 => Première Version Corrigée de la Version Deux... etc etc...
C'est pas pour la frime et se prendre pour Bill c'est vraiment important si tu veux t'y retrouver...
Pour ce qui est de ta Question Variable or Not Variable
D'ailleurs personne ne t'a encore répondu.
En fait il ne faut pas croire que le fait d'utiliser des Variables va ralentir un code... Si tu déclares et définis bien tes variables et surtout clairement tu y gagnera en lisibilité du code. De plus si je me souviens les leçons de Ti, il a dit quelque chose dans le sens que dans les languages compilés même si on n'écrit pas nous même les variables, les compilateurs en créé eux-même des temporaires.
De plus comme dans tout langage, le fait de pouvoir utiliser une variable, peut permettre une mise à jour en masse d'un code en ne changeant qu'une ligne de code... Donc un programme bien construit avec des variables sera toujours plus facilement évolutif.
Un dernier avantage, avec option Explicit, et des variables rééllement déclarées (pas juste Dim Toto..... Mais As Kekchose) te permettra de voir de suite où ton code plante.
Pour la gestion d'erreur...
Là je ne sais pas trop, et surtout je ne vois pas la raiZon de la proposition de Zon...
Dans certains cas une gestion d'erreur est nécessaire si par exemple il y a un facteur risque que le user ait encore la possibilité de faire un action qui planterait l'execution du déroulement d'une procédure. (Par exemple on click sur un Bouton de UserForm et on a pas rempli ce qu'il fallait avant.... et donc la gestion d'erreur fait qu'on n'exécute pas le code de Validation par exemple)
Mais sur une procédure comme la tienne et donc comme ceci, non je suis plutôt de ton avis, on pourrait avoir un plantage mais le User pourrait du coup ne pas le voir et avoir des données dont l'intégrité seraient plus que douteuses... Donc, non, je ne vois pas la nécessité de gestion d'erreur ici. (il ne faut pas cacher le erreurs... si on supprime la feuille 2, ben c'est la faute du couillon qui l'a virée pas celui qui a écrit le code !!!) lol
Pour les Select...
Je pense que la question est réglèe
Mais je n'insisterais jamais assez, enregistrez tout ce que vous voulez, mais virez les Select !!! lol
(Myta en sait quelque chose !)
Pour la formule utilisée dans ce programme...
Range("A1").FormulaR1C1 = _
"=IF(CODE(UPPER(Feuil1!RC1))=64+COLUMN(RC),Feuil1!RC1,"""")"
Chapeau Laurent !! je ne suis pas arrivé à l'écrire en VBA, en passant par des calcul VBA j'entends (par WorksheetFunction).
Et bravo aussi pour l' AutoFill et les Resize(NbreDonnées, 26)... bien vu.
Toutefois je ne suis pas partisant de faire écrire des formules en dûr sur des cellules par VBA pour pouvoir exécuter une macro et les effacer ensuite... Mais j'ai pas trouvé vraiment mieux !
Enfin voici moi comment j'aurai procédé avec une boucle classique qui à l'avantage de laisser les datas dans l'ordre où elles se trouvaient initialement, et aussi de ne pas mettre #VALEUR! dans toutes les colonnes si jamais il y a une rupture (cellule vide) dans la plage :
Sub MiseEnOrdreAlpha()
Dim Plage As Range, Cell As Range, C As String, L As Integer
Set Plage = Sheets(1).Range("A1:" & Sheets(1).Range("A65536").End(xlUp).Address)
For Each Cell In Plage
If Not IsEmpty(Cell) Then
C = Left(UCase(Cell), 1)
L = Sheets(2).Range(C & "65536").End(xlUp).Row + 1
Sheets(2).Cells(L, C) = Cell
End If
Next Cell
End Sub
J'ai aussi essayé une autre méthode, avec ceci
'C = Asc(UCase(Cell)) - 64
'L = Sheets(2).Columns(C).End(xlUp).Row + 1
Les deux semblent possibles, mais cette dernière me fait un sbinz pour l'incrémentation des ligne d'écriture. Mais bon... vu l'heure çà ira
Ah oui la macro ci dessus démarre à la ligne Deux, j'ai laissé aussi, c'est juste pour l'idée en fait...
Bon et bien bonne nuit
@+Thierry