Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Power QueryExtraire chiffre en fonction de leur position power query
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
let
A = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
B = Table.TransformColumns(A, {"Column1", each
[
a = Text.Split(_," "),
b = List.PositionOf(List.Transform(a, (x)=> Text.Length(x)), 7, Occurrence.Last),
c = List.Range(a,b + 1, 2),
d = if Text.Length(c{0}) = 1 then Text.Combine(c, " ") else c{0}
] [d]
})
in
B
Hello
une fois importé ton tableau dans PQ, tu as une option de fractionnement "Texte vers Non texte"
ca te permet déjà d'éliminer le texte de début..
après.. pour la suite...
let
A = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
B = Table.TransformColumns(A, {"Column1", each
[
a = Text.Split(_," "),
b = List.PositionOf(List.Transform(a, (x)=> Text.Length(x)), 7, Occurrence.Last),
c = List.Range(a,b + 1, 2),
d = if Text.Length(c{0}) = 1 then Text.Combine(c, " ") else c{0}
] [d]
})
in
B
Avec cette fonction VBA c'est classique et très simple :
VB:
Function Extract$(c As Range)
Dim i%
For i = 1 To Len(c)
With c.Characters(i, 1)
If .Font.Color <> vbBlack Then Extract = Extract & .Text
End With
Next
End Function
Bon d'accord alors utilisez ceci mais c'est bien moins compréhensible :
VB:
Function Extract$(x$)
Dim i%, j%
i = InStrRev(x, ",", Len(x) - 3)
For j = i - 1 To 1 Step -1
If Not IsNumeric(Mid(x, j, i - j + 1)) Then Extract = Mid(x, j + 7, i - j - 4): Exit For
Next
End Function
Hello,
En VBA en utilisant les expressions régulières :
VB:
Function ExtractNum$(n$)
Dim regex As Object
Dim matches As Object
ExtractNum = ""
On Error Resume Next
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "\d* \d+,\d+"
regex.Global = True
Set matches = regex.Execute(n)
If matches.Count > 1 Then
ExtractNum = Trim(matches(matches.Count - 2).Value)
End If
End Function
Explication du motif "\d* \d+,\d+"
on capture ce qui commence par 0 ou plus chiffre suivi d'un espace suivi d'un ou plus chiffres suivi d'une virgule suivi d'un ou plus chiffre. Le Global à True c'est pour capturer toutes les occurrences.
le matches(matches.Count - 2).Value c'est pour capturer l'avant-dernière occurrence.
Je trouve les mêmes résultats que le VBA de job75.
Ami calmant, J.P
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD