XL 2019 Comment extraire séparément plusieures chaines de caractères ou chiffres/nombres depuis une cellule avec libellé complexe alpha numérique

Renardy

XLDnaute Nouveau
Bonjour à tous

D'emblée je trouve ce site super il nous permet à tous de progresser avec notre super outil qu'est EXCEL. J' y ai toujours eu reponse à mes (rares) demandes , et je vous remercie.
Voici une autre petite demande que je suis sur, beaucoup sauront resoudre avec la formule XTFC avec laquelle j'ai un peu de mal..

>>> Je souhaiterai extraire vers des cellules sur des colonnes adjacentes distinctes des "morceaux" de données (soit lettres, soit chiffres ), contenus entre parenthese dans un libellé global 'une cellule de la colonne B.
Voir l'exemple ci joint.

Merci pour votre aide concernant les formules à créer dans les colonnes C, D, E et F

bien cordialement
 

Pièces jointes

  • Excel exemple.xls
    53 KB · Affichages: 18
Dernière édition:

vgendron

XLDnaute Barbatruc
BOnjour

avec une fonction personnalisée
VB:
Function extraireEle(target, num) As Variant
    PU = Split(Split(target, "(")(1), ";")(num - 1)
    
    If num > 1 Then
        extraireEle = CDbl(Replace(PU, ")", ""))
    Else
        extraireEle = Replace(PU, ")", "")
    End If
End Function

sinon ca va etre avec une formule alambiquée à base de trouve, stxt, gauche; droite....
 

job75

XLDnaute Barbatruc
Bonsoir Renardy, vgendron,

Voyez le fichier joint et cette fonction VBA :
VB:
Function Ventiler(x$)
Dim deb%, fin%, s
deb = InStr(x, "(") + 1
fin = InStr(x, ")")
s = Split(Mid(x, deb, fin - deb), ";")
Ventiler = s 'vecteur horizontal
End Function
à placer impérativement dans un module standard.

Sélectionnez C3:F3, entrez la formule =Ventiler(B3) dans la barre de formule.
Puis validez en bloc matriciellement par les touches Ctrl+Maj+Entrée.
Tirez la plage C3:F3 vers le bas.

A+
 

Pièces jointes

  • Ventiler.xls
    39 KB · Affichages: 5

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Renardy :), @vgendron ;), @job75 ;), @Phil69970 ;),

Une proposition de solution avec une seule formule matricielle 🤪. A valider par la combinaison des trois touches Ctrl+Maj+Entrée. La validation peut se faire simplement par la touche Entrée sur les dernières versions d'Excel (2019 => je ne sais pas).

La formule suivante est à placer dans la cellule C3 puis à recopier vers la droite et vers le bas :
=SIERREUR(SIERREUR(1*STXT(";"&SUBSTITUE(SUBSTITUE(STXT($B3;CHERCHE("(";$B3)+1;9999);" ";"");")";"")&";";PETITE.VALEUR(SI(STXT(";"&SUBSTITUE(SUBSTITUE(STXT($B3;CHERCHE("(";$B3)+1;9999);" ";"");")";"")&";";LIGNE($A$1:$A$99);1)=";";LIGNE($A$1:$A$99);"");COLONNE(A1))+1;PETITE.VALEUR(SI(STXT(";"&SUBSTITUE(SUBSTITUE(STXT($B3;CHERCHE("(";$B3)+1;9999);" ";"");")";"")&";";LIGNE($A$1:$A$99);1)=";";LIGNE($A$1:$A$99);"");COLONNE(B1))-PETITE.VALEUR(SI(STXT(";"&SUBSTITUE(SUBSTITUE(STXT($B3;CHERCHE("(";$B3)+1;9999);" ";"");")";"")&";";LIGNE($A$1:$A$99);1)=";";LIGNE($A$1:$A$99);"");COLONNE(A1))-1);STXT(";"&SUBSTITUE(SUBSTITUE(STXT($B3;CHERCHE("(";$B3)+1;9999);" ";"");")";"")&";";PETITE.VALEUR(SI(STXT(";"&SUBSTITUE(SUBSTITUE(STXT($B3;CHERCHE("(";$B3)+1;9999);" ";"");")";"")&";";LIGNE($A$1:$A$99);1)=";";LIGNE($A$1:$A$99);"");COLONNE(A1))+1;PETITE.VALEUR(SI(STXT(";"&SUBSTITUE(SUBSTITUE(STXT($B3;CHERCHE("(";$B3)+1;9999);" ";"");")";"")&";";LIGNE($A$1:$A$99);1)=";";LIGNE($A$1:$A$99);"");COLONNE(B1))-PETITE.VALEUR(SI(STXT(";"&SUBSTITUE(SUBSTITUE(STXT($B3;CHERCHE("(";$B3)+1;9999);" ";"");")";"")&";";LIGNE($A$1:$A$99);1)=";";LIGNE($A$1:$A$99);"");COLONNE(A1))-1));"")

nota : pourquoi diable nous fournir un classeur au format Excel 2003 alors que vous utilisez XL 2019 ☹️ ! Bien évidemment la formule proposée ne fonctionne pas avec les très vieilles versions d'excel dont XL2003 (trop de niveaux d'imbrications de parenthèses). Cela faisait belle lurette que je n'avais pas été confronté à cette erreur. Que de bons souvenirs. Ah nostalgie quand tu nous tiens 😢 !


1722556173081.png
 

Pièces jointes

  • Renardy- formule extraction texte- v1.xlsx
    12.6 KB · Affichages: 7
Dernière édition:

Renardy

XLDnaute Nouveau
Bonjour à tous

@Renardy je te propose ce fichier

Merci de ton retour
grand merci à vous Phil69970 , je prend donc votre solution :)
en effet le type de formule
"=Result(STXT(B3;TROUVE("(";B3)+1;TROUVE(")";B3)-TROUVE("(";B3)-1);";";1)"
me satisfait parfaitement et s'est simple à "tirer" dans la plage car je vais avoir plus de 1000 lignes à encoder dans ce tableau..

plus facile que du VBA ou matriciel.. par contre comme on me le signale c'est par habitude que je l'ai publié encore en Excel 2003, je promets de passer en xlsx haha..

merci à tous et bon WE
Renardy
 

Renardy

XLDnaute Nouveau
BOnjour

avec une fonction personnalisée
VB:
Function extraireEle(target, num) As Variant
    PU = Split(Split(target, "(")(1), ";")(num - 1)
   
    If num > 1 Then
        extraireEle = CDbl(Replace(PU, ")", ""))
    Else
        extraireEle = Replace(PU, ")", "")
    End If
End Function

sinon ca va etre avec une formule alambiquée à base de trouve, stxt, gauche; droite....
merci pour votre aide, au vu de la facilité que propose Phil69970 j'ai privilégié sa solution..
Bon WE
Renardy
 

Renardy

XLDnaute Nouveau
re
sinon "à l'ancienne avec le filtre.xml
en c3

et tu étends jusqu’à "F"
et après tu étends vers le bas
Regarde la pièce jointe 1201365
merci pour votre aide, au vu de la facilité que propose Phil69970 j'ai privilégié sa solution..
Bon WE
Renardy
Bonjour @Renardy :), @vgendron ;), @job75 ;), @Phil69970 ;),

Une proposition de solution avec une seule formule matricielle 🤪. A valider par la combinaison des trois touches Ctrl+Maj+Entrée. La validation peut se faire simplement par la touche Entrée sur les dernières versions d'Excel (2019 => je ne sais pas).

La formule suivante est à placer dans la cellule C3 puis à recopier vers la droite et vers le bas :


nota : pourquoi diable nous fournir un classeur au format Excel 2003 alors que vous utilisez XL 2019 ☹️ ! Bien évidemment la formule proposée ne fonctionne pas avec les très vieilles versions d'excel dont XL2003 (trop de niveaux d'imbrications de parenthèses). Cela faisait belle lurette que je n'avais pas été confronté à cette erreur. Que de bons souvenirs. Ah nostalgie quand tu nous tiens 😢 !


Regarde la pièce jointe 1201361
merci pour votre aide, au vu de la facilité que propose Phil69970 j'ai privilégié sa solution.. et en effet j'ai ressorti un vieux 2003 ... a l'avenir ce sera du xlsx haha
Bon WE
Renardy
 

Renardy

XLDnaute Nouveau
Bonsoir Renardy, vgendron,

Voyez le fichier joint et cette fonction VBA :
VB:
Function Ventiler(x$)
Dim deb%, fin%, s
deb = InStr(x, "(") + 1
fin = InStr(x, ")")
s = Split(Mid(x, deb, fin - deb), ";")
Ventiler = s 'vecteur horizontal
End Function
à placer impérativement dans un module standard.

Sélectionnez C3:F3, entrez la formule =Ventiler(B3) dans la barre de formule.
Puis validez en bloc matriciellement par les touches Ctrl+Maj+Entrée.
Tirez la plage C3:F3 vers le bas.

A+
merci pour votre aide, au vu de la facilité que propose Phil69970 j'ai privilégié sa solution..
Bon WE
Renardy
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Une formule pour les lecteurs de ce fil qui sont passés à Office 365
=SUBSTITUE(FRACTIONNER.TEXTE(STXT(B3;CHERCHE("(";B3)+1;999);";";;VRAI);")";"")

EDITION
Une formule un plus courte qui utilise deux fonctions disponibles dans O365
FRACTIONNER.TEXTE et TEXTE.APRES
Code:
=FRACTIONNER.TEXTE(TEXTE.APRES(B3;"(");{";";")"})
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonsoir
le problème avec toutes ces versions c'est que selon le pc (et/ou) la version d'office, ca ne fonctionnera pas la mienne avec filtre.xml fonctionne dans toutes ainsi que toutes les propositions VBA
ce n'est pas un détail à négliger

à méditer
 

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba