Recherche de la premiere valeur numérique

Bonjour,

après avoir fouillé un peu partout sur ce site je reste cependant bloqué sur une formule.

Le problème est le suivant, j'ai exporté des informations d'un logiciel de comptabilité qui me fournit la chaine de caractères construite de la façon suivante dans une cellule:

numero de facture, libelle" "numeroclient" "nomclient

un exemple concret

Facture No 2745, Facture du 04/05/2012 00253 ClientAlpha

J'aimerais bien sortir de cette chaine le seul nom du client.

D'un point de vue de la concaténation logique de la chaine, il faudrait construire une formule qui renvoie en partant de droite les caractères jusqu'à la première valeur numérique.

Mais je n'arrive pas à faire me revoyer la position de la première valeur numérique en imbriquant les fonctions EQUIV et ESTNUM pour ensuite utiliser la fonction DROITE.

si quelqu'un aurait une astuce pour me debloquer

Salut,

Une solution avec fonction personnalisée

(je ne sais pas le faire en formule... Si tu attends tu auras peux être une autre réponse.)

A tester.

Damien

110nomclient.zip (6.45 Ko)

Bonsoir

2 formules :

En validation Matricielle :

=DROITE(A1;EQUIV(" ";STXT(A1;NBCAR(A1)-LIGNE(INDIRECT("1:" & NBCAR(A1)));1);0))

En validation "normale" :

=STXT(A1;TROUVE("zzz";SUBSTITUE(A1;" ";"zzz";NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";""))))+1;NBCAR(A1))

Amicalement

Nad

@Bigdams,

Ta formule marche très bien pour la cellcule A1, mais n'est pas recopiable ??? Et je n'arrive pas à voir le code utilisé?

@Nad

C'est une utilisation intéressante de la formule SUBSTITUE et NBCAR, mais le problème est que le nom du client peut contenir des espaces. Donc comme la formule remplace le dernier espace par "zzz" il me manque le début de la dénomination.

Exemple:

Facture No 2745, Facture du 04/05/2012 00253 Entreprise Trumuche Sarl

-> la formule me renvoie "Sarl" au lieu de "Entreprise Trucmuche Sarl"

D'ou mon idée de rechercher d'intégrer la recherche du premier nombre. Par exemple si on pourrait construire une formule qui remplace les espaces par VRAI ou FAUX selon que le dernier caractère devant l'espace était numérique ou non à l'aide des forumules SUBSTITUE & ESTNUM

Une autre idée qui m'est venu est de remplacer toutes les chiffres dans la chaine par un signe spécifique et puis faire sortir par STXT et NBCAR ,comme dans votre formule, le texte après le dernier signe.

Mais je ne sais pas comment faire pour remplacer les valeurs numériques.

Encore une idée, j'ai trouvé une formule qui compte les valeurs numériques contenues dans une chaine de caractères:

=NB(1*STXT(A1;LIGNE($1:$9);1)) (source :

)

On pourrait donc extraire le texte à partir de la position de la dernière valeur numérique. Mais comme je ne me connais pas dans les formules matricielles, je n'arriva pas à exploiter ce début de formule.

re,

Avec le code modifié (yavait une coquille..)

Le code VBA se trouve dans le Module 1 (ALT+F11 - > EN haut a gauche : MODULE 1)

Damien

223nomclient1.zip (6.77 Ko)

Super cette fois le code est accessible, la formule recopiable et elle fonctionne impecable

En plus j'ai compris son fonctionnement.

Comment je fait pour imbriquer la fonction dans une macro? Donc en faire des écritures qui je puisse imbriquer dans une boucle pour qu'il me renvoi en C les noms extraits en B

Re,

Un exemple pour imbriquer la fonction dans un code.

Sub changement()
Dim tt As Range
For Each tt In Range("B1", "B2")
    tt.Offset(0, 1) = renvoinomclient(tt) 'On est en colonne B, donc l'offset de (0,1) me renvoi sur la colonne C sur la même ligne
Next
End Sub

Ici on ne va traiter que que la plage B1->B2 et écrire le resultat dans C1->C2

Ca te va ?

Damien

je voulais faire une macro de sorte

Sub RecapTVA ()

Dim lngLigne As Long, lngDerniereLigne As Long, i As Long

lngDerniereLigne = Range("A1").End(xlDown)

lngLigne = 2

'lancer la boucle

For i = 1 To lngDerniereLigne

'renvoinomclient

cells(lngLigne, 3) = renvoienomclient Cells(lngLigne,2) <- soit d'appliquer la fonction, soit qu'il fasse l'action directement dans la macro

si je l'integere de la facon suivante cela ne marche pas

'renvoinomclient

Dim tt As Range

For Each tt In Range("B1: B200")

tt.Offset(0, 1) = RenvoiNomClient(tt)

'déplacer les montants TVA selon leur code..... et d'autres opérations

lngLigne = lngLigne +1

Next

End Sub

Re,

Je ne comprend pas trop ton code. Tu as une boucle FOR et tu te sers d'un compteur en plus : lngLigne

On dirais un mixe entre une boucle FOR et boucle WHILE. Je ne saisie peux être pas la subtilité, je ne connais pas le projet.

Mais voici un exemple :

(Avec deux choix pour la dernière ligne de traitement : Fixe ou auto)

Sub RecapTVA()
Dim i As Long
Dim lngDerniereLigne As Long
'lngDerniereLigne = 3 'Numéro de ligne Fixe
lngDerniereLigne = Cells(65536, 2).End(xlUp).Row 'Determine la derniere ligne utilisée
For i = 2 To lngDerniereLigne    'On commence a la ligne 2
    Cells(i, 3) = renvoinomclient(Cells(i, 2))
    'Copier TVA et autre opérations....
Next
End Sub

Dis moi si cela répond a ta question.

Damien

si j'integre ce code je recois une erreur de compilation

"variable ou procédure attendue et non un module"

J'ai introduit lngLigne qui est la ligne de départ pour pouvoir rapidement modifier le tableau si je dois insérer une ligne dans l'ent^ete qui contiendra des hyperliens à des articles de législation. Mais il faut dire que je suis débutant VBA

^^j'ai sorti la varaible lngLigne et compris comment on peut utiliser "i" maintenant tout marche comme je veux

merci beaucoup

Tu as cette erreur sur quelle ligne ?

Sinon, il me faut ton code...pour faire un debug.... Cela fonctionne chez moi...

damien


OK peux tu mettre résolu dans ce cas ?

Merci ++

damien

oui mais comment

En cliquant sur l'icone suivante (cf fichier attché)

Damien

resolu

Bonjour

Nouvelle formule (adaptation d'une formule de Myta trouvée sur le forum) :

=STXT(A1;MAX(1;MAX(SI(ESTNUM(CHERCHE({0;1;2;3;4;5;6;7;8;9};A1));CHERCHE({0;1;2;3;4;5;6;7;8;9};A1)+2;"")));99)

Amicalement

Nad

Rechercher des sujets similaires à "recherche premiere valeur numerique"