Extraction compliquée de caractère dans une même colonne

gregorio

XLDnaute Nouveau
Bonjour à tous,
dans une colonne j'ai des nombres collés à des noms et prénom et collé derrière des nombres , tous les nombres de devant et derrières ont des tailles différentes, je voudrais extraire dans 3 colonnes différentes les nombres de devant,
les noms prénoms, les nombres de derrières.

je connais les fonctions à gauche à droite stxt de bases mais je ne sais comment écrire puisque les nombres de devant on jamais le même nombres de caractères et sont collés au prénom
j'espère avoir était assez claire, une partie de mes 6500 lignes en PJ.

Merci à ceux qui m'aideront, la solution m'intéresse beaucoup car s'il y en a une chapeau Excel !

Cordialement à tous
dans l'attente de vous lire ...
Greg
 

Pièces jointes

  • ESSAI.xls
    24 KB · Affichages: 41
  • ESSAI.xls
    24 KB · Affichages: 39

CISCO

XLDnaute Barbatruc
Re : Extraction compliquée de caractère dans une même colonne

Bonjour

Cf. une possibilité en pièce jointe.

Pour raccourcir les formules, j'ai nommé certaines parties des formules. Cf. dans le gestionnaire de noms.

En colonne B et C, il y a des formules matricielles. Il faut donc les valider avec Crl+maj tempo+entrer, ce qui met des {} devant et derrière ces formules.

Si tu veux avoir des nombres dans les colonnes B et D, et pas du texte, il faut écrire =1*(formule) à la place de la formule qui se trouve dans la cellule.

@ plus
 

Pièces jointes

  • ESSAI.xls
    35.5 KB · Affichages: 25
  • ESSAI.xls
    35.5 KB · Affichages: 24

david84

XLDnaute Barbatruc
Re : Extraction compliquée de caractère dans une même colonne

Bonjour et le salut à Cisco,
pour les n° de gauche :
Code:
=SI(A1<>"";GAUCHE(A1;EQUIV(FAUX;ESTNUM(STXT(SUBSTITUE(A1;",";0);LIGNE($1:$255);1)*1);0)-1);"")
Pour ceux de droite :
Code:
=SI(A1<>"";DROITE(A1;EQUIV(FAUX;ESTNUM(STXT(SUBSTITUE(A1;",";0);NBCAR(A1)-LIGNE($1:$255);1)*1);0));"")
Pour le nom :
soit
Code:
=SI(A1<>"";STXT(A1;EQUIV(FAUX;ESTNUM(STXT(SUBSTITUE(A1;",";0);LIGNE($1:$255);1)*1);0);NBCAR(A1)-EQUIV(FAUX;ESTNUM(STXT(SUBSTITUE(A1;",";0);NBCAR(A1)-LIGNE($1:$255);1)*1);0)-EQUIV(FAUX;ESTNUM(STXT(SUBSTITUE(A1;",";0);LIGNE($1:$255);1)*1);0)+1);"")
soit
Code:
=SUBSTITUE(SUBSTITUE(A1;B1;"");C1;"")
(la colonne B contient les chiffres de gauche et C ceux de droite dans mon exemple).

Les 3 premières formules sont à valider en matriciel (Ctrl, Maj et entrée).

A+
 

Paf

XLDnaute Barbatruc
Re : Extraction compliquée de caractère dans une même colonne

Bonjour gregorio, CISCO, david84


une version macro

Code:
Sub Decompose()
 Dim i As Long, j As Integer, k As Integer, Deb As Integer, MaChaine As String

 With Worksheets("Feuil2")
 For i = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
    MaChaine = .Cells(i, 1)
    If MaChaine <> "" Then
        For j = 1 To Len(MaChaine)
            If Not IsNumeric(Mid(MaChaine, j, 1)) And Mid(MaChaine, j, 1) <> "," Then
                .Cells(i, 2) = CDbl(Left(MaChaine, j - 1))
                Exit For
            End If
        Next
        Deb = j
        For k = j To Len(MaChaine)
            If IsNumeric(Mid(MaChaine, k, 1)) Then
                .Cells(i, 3) = Mid(MaChaine, Deb, k - Deb)
                Exit For
            End If
        Next
                
        .Cells(i, 4) = CDbl(Right(MaChaine, Len(MaChaine) - (k - 1)))
    End If
 Next
 End With
End Sub

A+
 

gregorio

XLDnaute Nouveau
Re : Extraction compliquée de caractère dans une même colonne

Re Bonjour à tous,
Un grand et chaleureux merci à tous pour vos réponses.
Je suis vraiment impressionné par vos compétences, je ne comprend même pas toutes les formules, j'applique bêtement sur mon fichier je l'avoue ...
Ce forum et les personnes qui le font vivre sont vraiment de "belles personnes" qui donnent de leurs temps et de leurs compétences
Encore merci à vous
Greg l'impressionné qui va mettre du temps à s'en remettre !
 

david84

XLDnaute Barbatruc
Re : Extraction compliquée de caractère dans une même colonne

Et une petite fonction utilisant une expression rationnelle histoire de saluer les VBAistes (dont pierrejean !) :
Code:
Function Découper(Chaine As String, N As Byte) As String
Dim oRegExp As Object, oMatches As Object

Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
    .IgnoreCase = True
    .Pattern = "(\d+,\d+)(\D+)(.+)"
    If .test(Chaine) = True Then
      Set oMatches = .Execute(Chaine)
      Découper = oMatches(0).submatches(N - 1)
    End If
End With
End Function

Code:
=Découper(LC1;COLONNE(C(-1)))
à placer en B1 et à tirer vers la droite et le bas.

A+
 

Discussions similaires

Réponses
5
Affichages
176

Statistiques des forums

Discussions
312 488
Messages
2 088 861
Membres
103 979
dernier inscrit
imed