Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2096 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  MACRO CHERCHE et STRX

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MACRO CHERCHE et STRX

n°2012568
ofouquay
Posté le 28-07-2010 à 16:37:47  profilanswer
 

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

mood
Publicité
Posté le 28-07-2010 à 16:37:47  profilanswer
 

n°2012790
olivthill
Posté le 29-07-2010 à 10:28:54  profilanswer
 

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.

n°2012887
SuppotDeSa​Tante
Aka dje69r
Posté le 29-07-2010 à 13:40:27  profilanswer
 

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 !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  MACRO CHERCHE et STRX

 

Sujets relatifs
aide sur macro[ASM]Je cherche un livre sur l'assembleur x86
Station cherche développeur phpBBCherche script pour pièce jointe dans formulaire
Je cherche un livre complet sur le fonctionnement d'un PCmacro excel copier rajouter
Accélération d'une macro couleurmacro Excel pour faire des graphiques rapidement
Urgent : cherche programmeur sur ParisMacro pour formulaire
Plus de sujets relatifs à : MACRO CHERCHE et STRX


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR