tri du contenu des cellules

  • Initiateur de la discussion Sushi
  • Date de début
S

Sushi

Guest
bonjour a tous;
je voudrais savoir comment trier le contenu d'une série de cellules (une colonne par exemple) par ordre alphabétique.
par exemple si dans la cellule j'ai le mot maison j'aimerais qu'il m'affiche les lettres de 'maison' par ordre alphabétique soit 'aimnos'.
merci si quelqu'un peut m'aider, et repondre d'une facon simple car je suis très nul dans le maniement d'excel, vu que je m'en sers une fois par an en gros, merci :)
 

andré

XLDnaute Barbatruc
salut Suhsi,

Ta question est claire, mais une réponse simple n'est pas évidente !

A première vue j'aurais tendance à dissocier chaque lettre du mot, à en chercher le numéro de code, à trier ces numéros, puis à recomposer le mot sur base des valeurs respectives des lettres.

Toutefois deux questions se posent :
Que fait-on des doublons éventuels ?
Les majuscules doivent-elles être triées à part ou bien peuvent-elles être renvoyées en tant que minuscules ?

Une solution par formule me semble complexe, mais faisable, par macro se sera peut-être plus simple.

Ândré.
 
G

globinours

Guest
Salut,
Si tu mets ton mot dans la cellule A10 tu récupéreras le mot trier
dans la cellule A11 avec cette macro

Sub tri()
Dim essai As String
Dim essai2 As String
essai = Cells(10, 1).Text
essai2 = ''
For i = 1 To Len(essai) - 1
If Asc(Mid(essai, i, 1)) > Asc(Mid(essai, i + 1, 1)) Then
essai = essai2 & Mid(essai, i + 1, 1) & Mid(essai, i, 1) & Right(essai, Len(essai) - i - 1)
i = 0
End If
essai2 = Left(essai, i)
Next i
Cells(11, 1) = essai
End Sub
 
S

Sushi

Guest
merci beaucoup pour ces reponses rapides;
pour repondre a herve, il n'y a pas a tenir compte des majuscules ou minuscules, en fait c'est une colonne d'environ 2000 cellules contenant chacune un mot de 6 lettres dont tous les caractères ont la même casse, et je voudrais obtenir les 2000 mots avec toutes leurs lettres mais dans l'ordre alphabetique, donc on garde les doublons, triplets, etc..
par contre comme je disais plus haut je n'y connais rien a excel, et je ne sais meme pas me servir d'une macro, mais bon je vais essayer de chercher pour voir comment on les utilise, encore merci ;)
 

andré

XLDnaute Barbatruc
Resalut Sushi,

Voici une solution par formules, qui vaut ce qu'elle vaut !

Comme il n'y a pas de majuscules, voilà déjà un problème de résolu.
Mais il reste le problème des accents sur les voyelles, celui-là est non résolu, en espérant qu'il n'y en a pas.

Les colonnes B à M peuvent être masquées.
Les colonnes H à M pourraient être supprimées en répétant sept fois cette formule en colonne N (qui deviendra dès lors la colonne H), mais est-ce bien nécessaire ?

Bonne journée.
Ândré [file name=suhsiV1.zip size=2684]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/suhsiV1.zip[/file]
 
S

Sushi

Guest
j'ai réussi a faire marcher la macro, et ca marche :)
malheureusement ca ne marche que pour la cellule A10.
ce que je voudrais ca serait qu'il me transforme toute une colonne, par exemple la colonne A vers la colonne B ou sinon qu'il remplace directement le contenu des cellules de la colonne directement par leurs anagrammes triés.
si quelqu'un pourrait voir si il peut me modifier la macro pour qu'elle me fasse ca, ca serait vraiment sympa ;)
 
S

Sushi

Guest
bon j'ai trifouillé un peu la macro, et au lieu qu'il me transforme la cellule A10 vers la cellule A11, il me transforme de la cellule A1 vers la cellule B2en la modifiant comme ceci:

Sub tri()
Dim essai As String
Dim essai2 As String
essai = Cells(1, 1).Text
essai2 = ''
For i = 1 To Len(essai) - 1
If Asc(Mid(essai, i, 1)) > Asc(Mid(essai, i + 1, 1)) Then
essai = essai2 & Mid(essai, i + 1, 1) & Mid(essai, i, 1) & Right(essai, Len(essai) - i - 1)
i = 0
End If
essai2 = Left(essai, i)
Next i
Cells(1, 2) = essai
End Sub

malheureusement je voudrais qu'il me transforme directement toute la colonne A vers la colonne B, je suppose qu'il y a juste une petite connerie a modifier mais n'y connaissant rien au langage utilisé pour les macros je ne sais pas comment faire, je suppose qu'il faudrait remplacer le 'cells(1,1)' et le 'cells(1,2)' par un truc du style 'cells(n1,1)' et 'cells(n2,2)' enfin un truc tout con quoi..

si quelqu'un peut me le dire, merci
 
S

sushi

Guest
je voulais dire de la cellule A1 vers la cellule B1
je vois que pour designer une cellule on utilise la commande 'cells', sous quelle commande designe t'on les colonnes et sous quelle forme l'utilise t'on?
en fait en remplacant 'cells(1,1)' par un truc du genre 'columns(A)' et 'cells(1,2)' par 'columns(B)' ca pourrait peut etre marcher :huh:
 

Hervé

XLDnaute Barbatruc
bonjour le forum, shushi,andré, globinours

shushi une cellule se référance en vba soit par range('b1') par exemple soit par cells(1,2) en clair cells(ligne, colonne).

Une autre proposition, plus faite pour m'amuser avec des tableaux dynamiques car j'ai le meme souci, ces satanés accents (mais j'ai pas dit mon dernier mot).

Sub Bouton1_QuandClic()
Dim i As Byte, j
Dim l As Integer, k
Dim temp As Variant
Dim tablo()

ReDim tablo(1 To Range('a65536').End(xlUp).Row, 1 To 8)

For i = 1 To Range('a65536').End(xlUp).Row
    tablo(i, 1) = Cells(i, 1)
Next i

For k = 1 To UBound(tablo)
   
For j = 2 To 7
        tablo(k, j) = Mid(tablo(k, 1), j - 1, 1)
   
Next j

   
For i = 2 To 7
       
For j = 2 To 7
           
If tablo(k, i) < tablo(k, j) Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp = tablo(k, j)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tablo(k, j) = tablo(k, i)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tablo(k, i) = temp
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Next j
&nbsp; &nbsp;
Next i

&nbsp; &nbsp;
For i = 2 To 7
&nbsp; &nbsp; &nbsp; &nbsp; tablo(k, 8) = tablo(k, 8) & tablo(k, i)
&nbsp; &nbsp;
Next i
&nbsp; &nbsp; Range('b' & l + 1) = tablo(k, 8): l = l + 1
Next k

End Sub


Salut
[file name=Classeur3_20050604194516.zip size=8512]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur3_20050604194516.zip[/file]
 

Pièces jointes

  • Classeur3_20050604194516.zip
    8.3 KB · Affichages: 15
S

Sushi

Guest
super !! :)
merci Herve ca marche
par contre j'ai un message d'erreur m'indiquant erreur d'execution '6' depassement de capacité si je veux traiter beaucoup de cellules a la fois, mais bon si on peut rien faire contre ca c'est pas tres grave je peux le decouper en morceaux plus petits.
encore merci
 
S

Sushi

Guest
merci hervé :)
maintenant ca marche pour toute la colonne, en fait ca faisait 2326 cellules, j'avais un peu arrondi.
pour les accents, je n'ai pas a m'en occuper tout simplement parce qu'il y en a pas
encore merci, ca m'a vachement dépanné
 
S

Sushi

Guest
bon ben me revoilà :unsure:
bon la macro marche super bien, mais malheureusement je me suis rendue compte que pour des mots superieurs ou egaux a 7 lettres ca ne marche plus il affiche que les 6 premieres lettres triées et pas la septieme.
et j'ai le meme type de liste a trier avec des mots de 7 lettres, de 8 lettres et une autre de neuf lettres, voila voila.
si herve ou quelqu'un d'autre pourrait me dire quoi changer ca me depannerait bien, merci

:)
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Modifies légèrement le code de HErvé

ReDim tablo(1 To Range('a65536').End(xlUp).Row, 1 To 8)
par ReDim tablo(1 To Range('a65536').End(xlUp).Row, 1 To ton nombre de lettres + 2)

For j = 2 To 7
par For j = 2 To ton nombre de lettres +1

idem pour les autres For j = 2 To 7

et

tablo(k, 8) = tablo(k, 8) & tablo(k, i) ainsiq ue

Range('b' & l + 1) = tablo(k, 8): l = l + 1

Où tu remplaces le 8 par ton nombre de lettres +2

Bon courage
 

Discussions similaires

Statistiques des forums

Discussions
312 428
Messages
2 088 331
Membres
103 815
dernier inscrit
SANOU ANSELME