Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Power Query Extraire 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 !

Maverick59264

XLDnaute Nouveau
Bonjour,

Par power query est il possible de récupérer les chiffres que j'ai mis en rouge
Compliqué de trouvé une solution, merci d'avance

Cordialement,
 

Pièces jointes

Solution
Bonsoir à tous,


PowerQuery:
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

Bonne soirée à tous.
Bonsoir à tous,


PowerQuery:
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

Bonne soirée à tous.
 
Bonjour à tous,

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
A+
 

Pièces jointes

Hello @job75
je crois que la coloration rouge des nombres à extraire a été mise par le demandeur pour montrer ce qu'il souhaitait récupérer 😉
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
 

Pièces jointes

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
 
Bonjour le forum,

J'explique quand même comment fonctionne la fonction de mon post #10.

Elle recherche les positions de l'avant dernière virgule (i) et de l'avant-avant dernière virgule (j).

Ensuite on constate que le texte recherché commence toujours 7 caractères à droite de j et se termine toujours 2 caractères à droite de i.

Ce n'est pas un hasard bien sûr mais il faut avouer que sur le plan logique c'est assez capillotracté.

A+
 
Ah mais il n'y a même pas besoin de VBA, c'est très simple par formule.

Sélectionner B1 et définir les 3 noms :

i =TROUVE(",";TEST!$A1)
j =TROUVE(",";TEST!$A1;i+1)
k =TROUVE(",";TEST!$A1;j+1)

Formule très simple en B1, à tirer vers le bas =STXT(A1;j+7;k-j-4)
 

Pièces jointes

- 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

Discussions similaires

  • Question Question
Microsoft 365 Power Query
Réponses
2
Affichages
67
Réponses
1
Affichages
41
  • Question Question
Microsoft 365 Power Query
Réponses
8
Affichages
112
Réponses
8
Affichages
391
Réponses
2
Affichages
448
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…