MACRO CHERCHE et STRX

MACRO CHERCHE et STRX - VB/VBA/VBS - Programmation

Marsh Posté le 28-07-2010 à 16:37:47    

Bonjour
J’aimerais une routine sous VBA qui puisse m’extraire une chaines de texte uniquement après avoir vérifier la présence d’une autre chaine
 
Je m’explique
 
Dans la phrase suivante :
 
"13/07/2010 - Temps passé : 2,50 h - (PAILLISSON Alain AP=2,50) –"
 
Si « AP » est présent dans la chaine, je veux extraire les « 2,50 »
 
MAIS
 
Il se peut qu’il soit 2 fois présents dans la chaine, je veux donc le cumul des 2 valeurs
 
"13/01/2010 - Temps passé : 6,00 h - (PAILLISSON Alain AP=1,00;PAILLISSON Alain AP=2,50;BACIGALUPI THIERRY TB=2,50) –"
 
Si « AP » est présent dans la chaine, je veux extraire les « 1 » et « 2,5 » donc 3,5
 
Merci de votre aide

Reply

Marsh Posté le 28-07-2010 à 16:37:47   

Reply

Marsh Posté le 29-07-2010 à 10:28:54    

Cela demande un peu de programmation.
 
Pour y arriver, je vous conseillerais d'utiliser les fonctions InStr() et Mid().
Voir http://www.techonthenet.com/excel/formulas/instr.php et http://www.techonthenet.com/excel/formulas/mid.php
 
InStr vous donne la position de "AP".  
Ensuite, avec cette position, vous la mettez en premier paramètre dans un autre InStr pour récupérer la position de la parenthèse fermante qui suit le "AP".
Vous extrayez ensuite ce qui se trouve entre ces deux positions avec Mid.
Vous faites quelques ajustements pour allez au-delà du signe égal.

Reply

Marsh Posté le 29-07-2010 à 13:40:27    

Il faut surtout regarder la chaine "AP=" et non pas seulement "AP" car si "AP" est présent dans un nom de famille (par ex) ca va tout foutre en l'air.
 
Donc, je pars du principe qu'en A1 tu as :
13/01/2010 - Temps passé : 6,00 h - (PAILLISSON Alain AP=1,00;PAILLISSON Alain AP=2,50;BACIGALUPI THIERRY TB=2,50) –
 
 
Je t'ai créé deux fonctions. Une dans laquelle tu ne specifies que la chaine, il te calcule le truc avec "AP"
L'autre ou tu peux parametrer le nombre d'occurence max rencontrées possibles (combien de fois peut contenir "AP" par ex) et ce que tu cherches (ici on cherche AP mais on pourrait chercher TB)
 

Code :
  1. Function ofouquay_ParamChaineOnly(Chaine)
  2. 'Nb de presence max, si le nb d'occurence passe par ex à 3, changer en consequence
  3. PMax = 2
  4. 'On precise ce qu'on cherche, j'ai vu que tu avais aussi "TB"
  5. Sch = "AP="
  6. i = 1
  7. For x = 1 To PMax
  8.      a = InStr(i, Chaine, Sch)
  9.      If a <> 0 Then
  10.         a = a + Len(Sch)
  11.         Do While Mid(Chaine, a, 1) <> Chr(41) And Mid(Chaine, a, 1) <> Chr(59)
  12.             Calc = Calc & Mid(Chaine, a, 1)
  13.             a = a + 1
  14.         Loop
  15.         Calc1 = Calc1 + CDbl(Calc)
  16.         Calc = ""
  17.         i = a
  18.     End If
  19. Next x
  20. ofouquay_ParamChaineOnly = Calc1
  21. End Function
  22. '________________________________________________
  23. Function ofouquay_Param(Chaine, PMax, Sch)
  24. i = 1
  25. For x = 1 To PMax
  26.      a = InStr(i, Chaine, Sch)
  27.      If a <> 0 Then
  28.         a = a + Len(Sch)
  29.         Do While Mid(Chaine, a, 1) <> Chr(41) And Mid(Chaine, a, 1) <> Chr(59)
  30.             Calc = Calc & Mid(Chaine, a, 1)
  31.             a = a + 1
  32.         Loop
  33.         Calc1 = Calc1 + CDbl(Calc)
  34.         Calc = ""
  35.         i = a
  36.     End If
  37. Next x
  38. ofouquay_Param = Calc1
  39. End Function


 
Donc si en A2 on saisi :
=ofouquay_ParamChaineOnly(A1)
il nous renvoi bien 3.5, et avec cette formule on ne passe en parametre que la chaine. Il prend forcément 2 en valeur max d'occurence, et la chaine a chercher est forcement "AP="
 
En A3 on saisi :
=ofouquay_Param(A1;2;"AP=" )
Il renvoi aussi 3.5, mais la on lui precise que le nb d'occurence c'est 2 (ce qui veut dire que tu pourrais mettre 10, il te ferait le calcul pour 10 fois rencontré "AP=" ) et on precise la chaine a chercher (ici "AP=" )
 
Maintenant si en A4 on saisi :
=ofouquay_Param(A1;2;"TB=" )
Il nous renvoi 2.5
 
Cordialement


Message édité par SuppotDeSaTante le 29-07-2010 à 13:42:16

---------------
Soyez malin, louez entre voisins !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed