SPLIT

Comment par VBA répartir dans plusieurs colonnes des mots séparés par ""

Si dans la colonne A tu as des données du type
C:\mondossier\mon_sous_dossier\mondocument.xls .

sub répartir
 For Each cel In Range("A:A")
 If cel.Value <> "" Then
 c = cel.Address
 Données = Split(Range(c).Value, "")
 range(c).offset(0,1).value=Données(0)
 range(c).offset(0,2).value=Données(1)
 range(c).offset(0,3).value=Données(2)
 range(c).offset(0,4).value=Données(3)
 End If
 Next cel
 end sub

La fonction split crée un tableau dont le premier élément d'index 0 contient les signes avant le premier séparateur, (ici \).
Si on ne connait pas le nombre d'éléments maximum de ce tableau c'est à dire par exemple le nombre de sous dossiers imbriqués, utilise

 For i = 0 To UBound(Données)
 Range(c).Offset(0, i + 1).Value = Données(i)
 Next i
  

à la place des 4 range (c).offset...
Ubound renvoie le nombre maximum d'éléments dans le tableau

Cette macro écrit donc
en colonne B : C:\
en col C : Mondossier
En col D : mon sous_dossier
en col E : mondocument.xls

La fonction Split de VBA existe pour excel 2000 et XP mais pas pour excel 97 ... alors voici une macro de Pierre :

 Function Split97(chaine As String, Separateur As String)
   Dim i As Integer,
 NbreTab As Integer
   Dim Debutchaine As Integer
   Dim Tableau()
 
 NbreTab = 0
   Debutchaine = 1
   For i = 1 To Len(chaine)
     If
 Mid(chaine, i, 1) = Separateur Then
       NbreTab = NbreTab + 1
 
  ReDim Preserve Tableau(1 To NbreTab)
       Tableau(NbreTab) = _
 
     Mid(chaine, Debutchaine, i - Debutchaine)
       i = i + 1
 
    Debutchaine = i
     End If
   Next i
   If i > Debutchaine Then
 
    NbreTab = NbreTab + 1
     ReDim Preserve Tableau(1 To NbreTab)
 
  Tableau(NbreTab) = _
       Mid(chaine, Debutchaine, i - Debutchaine)
 
    End If
   If NbreTab = 0 Then
     ReDim Tableau(1)
 
 Tableau(1) = chaine
   End If
   Split97 = Tableau()
 End Function

Auteurs : , , ,

Mots clefs associés à cette page : ,