changer l'ordre des mots dans une cellule

timmi88

XLDnaute Nouveau
Bonjour, bonjour

voila, je travaille actuellement sur une base de donnée de 1000 lignes, et souhaiterai effectuer l'action suivante:

sur chacune de mes lignes se trouve une suite d'opération, séparées par un ;

exemple:

ligne 1: protection, perçage, peinture, marquage,contrôle
ligne 2: peinture, marquage contrôle, protection,perçage
ligne 3: peinture, marquage, équipement, contrôle, protection, ajustage
ligne 4:.....


note1:le nombre d'opération d'une ligne à l'autre peut être différent
note2:les noms d'opérations ne sont pas exhaustifs

je souhaiterai, de façon à pouvoir les classer (grâce à un filtre par exemple, mais je me suis pas encore décidé) changer l'ordre des mots:

je m'explique:
je souhaiterai avoir par exemple, a la fin de chaque ligne, si elle contient les opérations bien sur :D, la suite d'opération suivante: peinture, contrôle, protection

ce qui me permettrait d'obtenir
ligne1: perçage, marquage,peinture, contrôle, protection
ligne2:marquage,perçage,peinture, contrôle, protection
ligne 3:marquage, équipement, ajustage,peinture, contrôle, protection


je ne suis pas sur d'avoir été bien clair...... j'espère que c'est compréhensible
et que vous pourrez me donner un coup de main


merci par avance

timmi
 

job75

XLDnaute Barbatruc
Re : changer l'ordre des mots dans une cellule

Bonjour timmi88,

Voyez le fichier joint avec cette macro (Alt+F11) :

Code:
Sub Classer()
Dim cel As Range, s, ub As Integer, tablo(), i As Integer, txt$
Application.ScreenUpdating = False
For Each cel In Range("A1", Range("A65536").End(xlUp))
  s = Split(Replace(cel, " ", ""), ",")  'séparateur la virgule
  ub = UBound(s)
  ReDim tablo(ub + 3)
  For i = 0 To UBound(s)
    Select Case s(i)
      Case "peinture": tablo(ub + 1) = s(i)
      Case "contrôle": tablo(ub + 2) = s(i)
      Case "protection": tablo(ub + 3) = s(i)
      Case Else: tablo(i) = s(i)
    End Select
  Next
  txt = ""
  For i = 0 To ub + 3
    If tablo(i) <> "" Then txt = txt & IIf(txt = "", "", ", ") & tablo(i)
  Next
  cel.Offset(, 2) = txt 'restitution en colonne C
Next
End Sub

Tous les mots doivent être séparés par une virgule.

S'il y a des mots composés, mettre un trait d'union plutôt qu'un espace.

Edit : déclaré ub As Integer (en cas de cellule vide).

A+
 

Pièces jointes

  • Classer(1).xls
    41 KB · Affichages: 104
  • Classer(1).xls
    41 KB · Affichages: 108
  • Classer(1).xls
    41 KB · Affichages: 106
Dernière édition:

job75

XLDnaute Barbatruc
Re : changer l'ordre des mots dans une cellule

Bonjour timmi88, le forum,

Si en outre on veut que l'espace soit, comme la virgule, considéré comme un séparateur, écrire au début :

Code:
s = Split(Replace(Replace([COLOR="Red"]LCase[/COLOR](cel), " ", "[COLOR="Red"][SIZE="3"],[/SIZE][/COLOR]"), "controle", "contr[COLOR="red"]ô[/COLOR]le"), ",") 'séparateur la virgule ou l'espace

Ce code traite les oublis de virgules, l'accent circonflexe, [Edit] et les majuscules...

A+
 

Pièces jointes

  • Classer(2).xls
    42 KB · Affichages: 82
Dernière édition:

Discussions similaires

Réponses
16
Affichages
1 K

Statistiques des forums

Discussions
312 489
Messages
2 088 852
Membres
103 974
dernier inscrit
chmikha