CHERCHE : obtenir position de la fin de la séquence?

Bonjour à tous, merci par avance pour votre aide précieuse,

Je suis à la recherche d'un moyen pour déterminer directement la position du dernier caractère au sein d'une séquence cherchée avec la fonction =cherche ou =trouve, mais mon problème est que je ne peux pas passer par la soustraction de la position d'une deuxième chaine de caractère servant de fin, étant donné qu'il n'y a aucune chaine qui ne se répète pas plusieurs fois après la valeur que je veux extraire, donc la position de fin déterminé avec cette méthode ne sera pas fiable.

Concrètement, voici un exemple du contenue d'UNE de mes cellules à trier, dans lesquelles il y aura des valeurs de taxes à sortir :

[('TGC 22%', 1100.0, 5000.0, '1\xa0100 XPF', '5\xa0000 XPF', 3, 6), ('TGC 11%', 550.0, 5000.0, '550 XPF', '5\xa0000 XPF', 3, 5), ('HT', 0.0, 5000.0, '0 XPF', '5\xa0000 XPF', 3, 7)]

4test.xlsx (9.69 Ko)

Je souhaite extraire le premier chiffre après chaque taxes, exemple sur "TGC 22%" c'est la valeur "1100.0", sur "TGC 11%" c'est "550.0", pour ensuite pouvoir faire une somme totale de tous les montant de taxes à 22%, une à 11% etc.

J'ai bien réussi avec =stxt et =cherche à sortir la valeur "1100.0", mais cela fonctionne uniquement pour la première taxe dans la liste, impossible de déterminer la position de fin pour les TGC qui viennent après la 1ere, car si "22%" pour servir de départ est une occurrence unique, le ", " qui vient juste après la valeur "1100" n'est pas unique, il y en a partout

Je précise que l'on ne peut pas compter sur les autres chiffres qui changent tout le temps, la seule occurrence fiable et unique pour déterminer chaque position c'est le code de taxe "TGC **%"

Je précise aussi que l'on ne peux pas se servir de la taxe suivante dans la liste comme position de fin, car j'ai en tout 4 taxes, et donc selon les factures, différents codes seront dans la liste, comme vous verrez dans le fichier test en piece jointe. Il faut également prendre en compte que la longeur du chiffre a extraire est variable, etant donne que c'est une valeur monétaire.

PS : je n'ai pour l'instant aucuns moyen de fractionner chaques taxes dans une collone séparé depuis mon logiciel source, le fichier en piece jointe est l'extraction brute de mon erp

Bonne journée

Si j'utilise

=CHERCHE("22%', *, ";M4)

il trouve bien la position de debut sur le 1er 2, mais je cherche deuxieme formule qui me donne aussi la position au niveau du ", " de fin de séquence.

Si il trouve bien ma valeur "22%', *, " et peux afficher la position de début, excel doit bien etre capable d'afficher la position de fin aussi?

ou alors un moyen d'afficher le nombre de charactere dans la valeur "22%', *, " ? a partir de la je pourrais faire un =stxt directement avec le bon nombre de characteres a afficher?

l'etoile correspond a l'inconnue de la valeur de taxe

Bonjour,

Si VBA vous est autorisé. Dans un module standard :

Option Explicit

Function SplitParenthese(ByVal ChaineATraiter As String, ByVal Position As Integer) As Variant

Dim I As Integer
Dim TabChaine As Variant, TabVirgule As Variant

    If InStr(1, ChaineATraiter, "(", vbTextCompare) = 0 Then Exit Function

    TabChaine = Split(ChaineATraiter, "(")

    For I = LBound(TabChaine) To UBound(TabChaine)
        If Left(TabChaine(I), 4) = "'TGC" And I = Position Then
           Debug.Print TabChaine(I)
            SplitParenthese = Val(Split(TabChaine(I), ",")(1))
            Exit Function
         End If
    Next I

End Function
capture

Bonjour, merci je vais essayer

Je ne suis pas sur de comprendre votre script, comment sort t'il la veleur 550?

Parce que il y a plusieurs valeur a sortir de la ligne, 550, 1100

pour la ligne du dessus par exemple c'est 120 et 120

J'arrive bien a sortir la meme valeur que vous "550" avec la macro, mais je ne comprend pas comment elle marche, enfaite il faudrait que je puisse afficher ce 550 dans une collone "11%", 1100 dans une collone "22%" etc, pour la cellule du dessus, M3, c'est 120 dans 6% et 120 dans 3%

capture

Bonjour à tous,

Une proposition via Power Query (à consommer sans modération.....) :

@Eric, la macro fonctionne mais pas pour mon soucis, effectivement en metant 2 ou 3 a la place du 1 dans splitparenthese(m4;1), cela me reporte la valeur de la 1ere, 2eme ou 3eme parenthese, mais le soucis est que les taxes ne seront pas dans le meme ordre selon les lignes, l'ordre des taxes est aleatoire, par exemple 22% va etre la 1ere parenthese de la 3eme ligne, mais il aurait aussi bien put se trouver a la place de 11%...

capture ci joint du comportement que je cherche :

capture d ecran 2022 02 23 204740

@JFL merci pour ce retour, cela m'a l'air tres bien sauf que vous faites une somme des montant a la fin? hors je cherche a avoir chaques pourcentage dans une collone séparée? ou est le code qui vous permet d'obtenir les valeurs? je ne vois rien quant je clique sur les cellules

il faut que la detection se fasse indépendament de l'odre des parentheses, exemple :

ligne 1 [('TGC 22%', 1100.0, 5000.0, '1\xa0100 XPF', '5\xa0000 XPF', 3, 6), ('TGC 11%', 550.0, 5000.0, '550 XPF', '5\xa0000 XPF', 3, 5), ('HT', 0.0, 5000.0, '0 XPF', '5\xa0000 XPF', 3, 7)]

ligne 2 [('TGC 11%', 550.0, 5000.0, '550 XPF', '5\xa0000 XPF', 3, 5),('TGC 22%', 1100.0, 5000.0, '1\xa0100 XPF', '5\xa0000 XPF', 3, 6) , ('HT', 0.0, 5000.0, '0 XPF', '5\xa0000 XPF', 3, 7)]

l'odre n'est plus le meme

Bonjour de nouveau,

La requête Power Query (nativement intégré à votre version Excel) retourne le résultat conformément à votre demande : "Je souhaite extraire le premier chiffre après chaque taxes, exemple sur "TGC 22%" c'est la valeur "1100.0", sur "TGC 11%" c'est "550.0", pour ensuite pouvoir faire une somme totale de tous les montant de taxes à 22%, une à 11% etc."

Pour étudier les différentes étapes appliquées à votre Tableau1, faire un clic droit sur le tableau retourné par Power Query puis "Table / Modifier la requête". Les étapes sont affichées à droite de l'éditeur Power Query.

Vous devriez vous approprier cet outil......

J'ai du mal formuler ma demande, je veux rassembler les montant par types de taxes, a savoir 4 types différents, 22, 11, 6 et 3%, je voullais dire faire une somme pour chacune d'entres elles, la somme de tous les 22, celle de tous les 11, etc

capture
Function SplitParenthese2(ByVal ChaineATraiter As String, ByVal TauxTgc As String) As Variant

Dim I As Integer
Dim TabChaine As Variant, TabVirgule As Variant

    SplitParenthese2 = ""
    If InStr(1, ChaineATraiter, TauxTgc, vbTextCompare) = 0 Then Exit Function
    TabChaine = Split(ChaineATraiter, "(")
    For I = LBound(TabChaine) To UBound(TabChaine)
        If InStr(1, TabChaine(I), TauxTgc, vbTextCompare) > 0 Then
           Debug.Print TabChaine(I)
           SplitParenthese2 = Val(Split(TabChaine(I), ",")(1))
           Exit Function
        End If
    Next I

End Function

Bonjour à tous,
Une autre proposition Power Query.
Cdlt.

2test.xlsx (25.29 Ko)

la deuxieme propostion de @Erik fonctionne parfaitement merci beaucoups, c'est exactement ce qu'il me fallait

Merci aussi pour les solutions querry, mais comme il faut que le fichier puisse etre le plus compatible possible sur différentes version d'excel, je pense qu'il vaut mieux que je parte sur la solution la plus legere

Rechercher des sujets similaires à "cherche obtenir position fin sequence"