déconcaténner le contenud'uunne cellule

S

sik

Guest
Bonjour,
je souhaiterais trouver une formulee qui convertisse le contenu d'1 cellule en pluieurs :

- ,,,,,,

deviendrais

- - - - - - -

Ou plus simplement convertir un fichier word qui contient ligne par ligne les informations citées plus haut
 

andré

XLDnaute Barbatruc
Salut,

Un peu laconique comme explication.

Que veux-tu déconcatener ?
Un mot en ses caractères,
Une phrase en ses mots,
Un texte en ses séparations par des virgules
Ou encore autre chose.

Un exemple concret sreait plus facile pour la compréhension.

Â+
 

Hellboy

XLDnaute Accro
Bonsoir sik

Voici une suggestion par code.( doit avoir Office 2000 minimum)



Private Sub CommandButton1_Click()
Dim strTableauMot()  As String
With
ActiveCell
        strTableauMot() = Split(.Value, ',')
        Range(Cells(.Row, .Column + 1), Cells(.Row,
UBound(strTableauMot) + .Column + 1)) = strTableauMot
End With

End Sub


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

Message édité par: Hellboy, à: 11/12/2005 19:00
 

Pièces jointes

  • classeur1_20051211052100.zip
    8.6 KB · Affichages: 33

KIM

XLDnaute Accro
Bonjour Helboy, andré, sik et le forum,
J'en profite du fil de sik pour demander votre aide dans la deconcatenation de 2 colonnes et vous en remercie d'avance.
1- Col A de type (06910)/70V031
vers col C = 06910 c-a-d tout ce qui'il y a entre les 2 parentheses,
vers col D = 70V031 c_a_d tout ce qu'il y a apres le car '/'

2- Col G de type 1MA00200A90003
vers col I = 1MA c-a-d 3 premiers car
vers col J = 0020 c-a-d les 4 car suivants
vers col K = 0A90003 c-a-d les 7 derniers car

Ci-joint fichier exemple, Mes colonnes font plus de 50 000 lignes,
Merci d'avance
KIM [file name=Notif.zip size=5726]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Notif.zip[/file]
 

Pièces jointes

  • Notif.zip
    18 KB · Affichages: 28

Hellboy

XLDnaute Accro
Bonjour a tous

Kim en réponce a ta demande, voici une solution par code:



Option Explicit

Private Sub CommandButton1_Click()
Dim strTableauMot()  As String

Dim
lngCells                As Long
        Application.ScreenUpdating =
False
       
On Error Resume Next
       
For lngCells = 5 To Cells(65536, 1).End(xlUp).Row
         
With Cells(lngCells, 1)
               
If InStr(1, .Value2, '//') > 0 Then
                    strTableauMot() = Split(.Value, ' ', 2)
                    Cells(.Row, .Column + 2) = strTableauMot(0)
               
Else
                    strTableauMot() = Split(.Value, '/')
                   
If InStr(1, strTableauMot(0), '(') > 0 Then
                      Cells(.Row, .Column + 2) = Mid(strTableauMot(0), 2, Len(strTableauMot(0)) - 2)
                   
Else
                        Cells(.Row, .Column + 2) = strTableauMot(0)
                   
End If
               
End If
                Cells(.Row, .Column + 3) = strTableauMot(1)
         
End With
         
If Err Then Err.Clear
       
Next lngCells
       
On Error GoTo 0
        Application.ScreenUpdating =
True

End Sub


Private Sub CommandButton2_Click()
Dim lngCells                As Long
        Application.ScreenUpdating =
False
       
For lngCells = 5 To Cells(65536, 7).End(xlUp).Row
         
With Cells(lngCells, 7)
                    Cells(.Row, .Column + 2) = Mid(.Value2, 1, 3)
                    Cells(.Row, .Column + 3) = Mid(.Value2, 4, 4)
                    Cells(.Row, .Column + 4) = Mid(.Value2, 8)
           
End With
       
Next lngCells
        Application.ScreenUpdating =
True

End Sub

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

Message édité par: Hellboy, à: 12/12/2005 09:43

Message édité par: Hellboy, à: 12/12/2005 09:44
 

KIM

XLDnaute Accro
Re-Bonsoir,
effectivement, j'ai besoin d'explications et merci d'avance.
1-quel est l'algorithme utilisé pour chaque deconcatenation?
2- Je n'ai pas compris les commandes InStr, split et Mid dans les lignes ci-dessous

If InStr(1, .Value2, '//') > 0 Then
strTableauMot() = Split(.Value, ' ', 2)
Cells(.Row, .Column + 2) = strTableauMot(0)
Else
strTableauMot() = Split(.Value, '/')
If InStr(1, strTableauMot(0), '(') > 0 Then
Cells(.Row, .Column + 2) = Mid(strTableauMot(0), 2, Len(strTableauMot(0)) -2)

3- Quelle la signification du 0 et 1 ci-dessous
strTableauMot(0)
strTableauMot(1)

4- Dans CommandButton2_Click
quelle est la signification du:
Cells(.Row, .Column + 2) = Mid(.Value2, 1, 3)
et Cells(.Row, .Column + 4) = Mid(.Value2, 8)

Merci d'avance
KIM
 

Hellboy

XLDnaute Accro
Bonsoir Kim

Si tu souhaite plus d'explication, réfère toi à l'aide dans le Visual Basic Editor.



Option Explicit

Private Sub CommandButton1_Click()
Dim strTableauMot()  As String
Dim
lngCells                As Long
        Application.ScreenUpdating =
False
       
On ErrorResumeNext
       
For lngCells = 5 To Cells(65536, 1).End(xlUp).Row
       
'  le With ici pointe sur la cellule qui est traité et l'on va pouvoir l'utiliser:
       
'  pour pointer tout au long de cette boucle sur
       
'  ça valeur (.Value)
       
'  ça Ligne  (.Row)
       
'  ça colonne(.Column)
       
'  à titre de référence pour inscrire les résultats
         
With Cells(lngCells, 1)
               
'  Instr: Renvoie une valeur de type Variant (Long) indiquant la position de la première occurrence d'une chaîne à l'intérieur d'une autre chaîne.
               
'  Split: Renvoie un tableau de base zéro à une dimension contenant le nombre spécifié de sous-chaînes
               
'  Mid: Renvoie une valeur de type Variant (String) contenant un nombre indiqué de caractères extraits d'une chaîne de caractères.
               
               
'  Dans ce cas-ci, j'ai décidé de vérifier en premier si il  y a occurence de
               
'  la présence du caractère '/' en double. Parce que si je cherche en premier
               
'  la présence simple du caractère '/' , rien ne me dit si on n'est pas en présence de la double.
               
'  Il faut donc éliminer en premier cette possibilité. Donc si instr retourne(trouve) une valeur plus
               
'  grande que 0, cela veut dire que l'on est en présence du de '//'
               
If InStr(1, .Value2, '//') > 0 Then
               
'  La logique que j'ai emprunté en regardant tes données, c'est que lorsque l'on
               
'  est en présence de '//', on retrouve une espace dans la string avant ces caractères.
               
'  Ex: 925 T900//R3  RC
               
'  Cet espace va servir de point de repère pour la commande Split(veut dire séparer en français).
               
'  La valeur 2 dans la commande, donne comme instruction de ne pas séparer la String de plus que
               
'  2 séparations. Pourquoi, parce qu'il y a plus de 1 espaces dans ta String. Alors sans la condition,
               
'  on verrait la String séparer en 3 donc pas a la bonne place
               
'  Une fois la commande lancé, les 2 résultats vont s'inscrire dans la variable tableau: strTableauMot()
                    strTableauMot() = Split(.Value, ' ', 2)
               
'  Ici, ont écrit dans la colonne C, la valeur de l'index 0(premier index commance a zéro) de la variable strTableauMot
                    Cells(.Row, .Column + 2) = strTableauMot(0)
               
Else
               
'  D'après tes données, si on est pas en présence de '//', c'est qu'on est forcément en présence de '/'
               
'  Étand données qu'il n'y a que '/' ceci qui doit séparer la sting, il n'y a donc pas d'instruction supplémentaire
               
'  pour la commande Split
                    strTableauMot() = Split(.Value, '/')
               
'  J'ai observé qu'il y a deux patron losque l'on a à faire à '/'. Soit qu'on à
               
'  (0697)/7LA031  ou
               
'  925 2516/DEST:RM ou 936362D/R10
               
'  Ce qui est important, et qui distingue les uns des autres, c'est ce caractères '(' Et basé sur ton exemple,
               
'  tu ne désire pas les conserver.
               
'  Donc, si ce caractère est présent
                   
If InStr(1, strTableauMot(0), '(') > 0 Then
               
'  On élimine le '(' en partant du 2 ième caractére de la string et on compte ne nombre de caractère
               
'  compris dans la string à l'aide de la commande Len et on soustrait 2 pour éliminer les 2 caractères '()'
               
'  (06910) -->  Mid((06910),2,7-2) = 06910
                      Cells(.Row, .Column + 2) = Mid(strTableauMot(0), 2, Len(strTableauMot(0)) - 2)
                   
Else
                        Cells(.Row, .Column + 2) = strTableauMot(0)
                   
End If
               
End If
               
' Finalement, ont inscrit les reste de la string qui est dans l'index 1 de la variable dans la colonne D
                Cells(.Row, .Column + 3) = strTableauMot(1)
         
End With
         
If Err Then Err.Clear
       
Next lngCells
       
On ErrorGoTo 0
        Application.ScreenUpdating =
True
End Sub


PrivateSub CommandButton2_Click()
Dim lngCells                As Long
        Application.ScreenUpdating =
False
       
For lngCells = 5 To Cells(65536, 7).End(xlUp).Row
         
With Cells(lngCells, 7)
               
'  Ici, je n'ai repris que ta logique pour séparer la String
                    Cells(.Row, .Column + 2) = Mid(.Value2, 1, 3)
' Partir a 1 et 3 caractères de long
                    Cells(.Row, .Column + 3) = Mid(.Value2, 4, 4)
' Partir a 4 et 4 caractères de long
                    Cells(.Row, .Column + 4) = Mid(.Value2, 8)   
' Partir a 8 et le reste
           
End With
       
Next lngCells
        Application.ScreenUpdating =
True
End Sub


a+

Message édité par: Hellboy, à: 12/12/2005 01:09
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 938
Membres
103 988
dernier inscrit
Feonix