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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  tri sur une chaine de caractère dans excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tri sur une chaine de caractère dans excel

n°1753338
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 11:22:06  profilanswer
 

bonjour à tous,
 
j'ai un fichier excel qui reference des clients et il faut que je leur créé des codes clients a partir de leur raison sociale ( que j'ai dans le fichier excel à la colonne J) ...
 
 
le code client est à faire a partir des 5 premiers caracteres de la raison sociale, donc un simple =GAUCHE(J2;5) pourrait suffire sauf que certaines raisons sociales contiennent des caractères spéciaux ( genre espace, / , * ) et en fait je ne voudrais que les 5 premières lettres ou chiffres mais je ne sais pas comment trier ca ...
 
J'ai essayé avec une fonction cells.find mais j'ai une erreur avec le if que je n'arrive pas à syntaxer correctement avec ...
 
 
bref pour le moment j'ai ca, c est partiel, le tri n'est effectué que sur le caractère /, et de plus comme j'ai commencé le vba y a environ 20 minutes, c est un peu l'anarchie la :
 

Code :
  1. Sub Macro1()
  2.     Dim i As Integer
  3.     For i = 2 To 3000
  4.    
  5.     Cells(AJ, i).Select
  6.     if (Cells.Find(What:="/", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
  7.         xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
  8.         .Activate )
  9.         Then Goto ok
  10. ok:
  11.     ActiveCell.FormulaR1C1 = "=LEFT(RC[-26],5)" 
  12.    
  13.    
  14. End Sub


 
Qui peut m'aider ?  
Merci :jap:

mood
Publicité
Posté le 30-06-2008 à 11:22:06  profilanswer
 

n°1753373
kiki29
Posté le 30-06-2008 à 12:59:06  profilanswer
 

Salut, attention au probleme de doublons possibles, utiliser plutôt le N° Siret ?

n°1753384
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 13:28:00  profilanswer
 

Oui ca c est un autre probleme encore, et le numéro de siret je ne l utilise pas dans la mesure ou il n est pas dispo dans le fichier car en fait il s agit d un fichier de propects et relations diverses qui sont pour certains d entre eux seulement rattachés à une société cliente du coup tous ne pourront pas avoir de siret ...
 
je débarque dans la boite pour un stage avec pour mission d'uniformiser un peu leur base de données de clients/relations/connaissances mais la pour le moment c'est un sacré bazar pour rester poli, ils ont de tout, du fichier excel à la base de donnée hyperfile en passant par access ...
 
 
En fait la le but est de créer des codes clients sur 5 caractères, puis d importer ca dans les "vraies" bases de données déjà existantes apres avoir vérifié bien sur les doublons et/ou sociétés qui ont 2 codes clients distincts ...

n°1753386
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 13:33:55  profilanswer
 

En fait voila ce qu'il me faudrait en langage plutot humain :
 
Si les 5 premiers caractères de RaisonSociale contiennent " " ou "/" ou "*"
alors prendre les 5 premières lettres ou chiffres
sinon prendre les 5 premiers caractères.
 
 
Si il y a moins de 5 caractères c est pas génant dans la mesure ou 5 est le chiffre max du nombre de caractère de mon code client et que meme si y en a 3 ou 4 c est pas génant ..
 
 
 
mais je n'arrive pas a trouver la fonction dans excel ou en vba pour faire un tri avec uniquement l'alphanumérique ...

n°1753399
pyrof
Posté le 30-06-2008 à 13:43:48  profilanswer
 

Bonjour
 
Voici une fonction  
 

Function dudule(tmp)
For b = 1 To Len(tmp)
    Select Case Mid(tmp, b)
        Case "0" To "9", "a" To "z", "A-Z"
            tmp1 = b
            Exit For
    End Select
Next
dudule = Mid(tmp, tmp1, 5)
End Function

n°1753402
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 13:45:12  profilanswer
 

ah merci je vais voir ce que je peux faire avec ca :D

n°1753427
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 14:11:20  profilanswer
 

Cette fonction marche pour la première société mais me sort #VALEUR! pour toutes les suivantes, même celles qui ont une raison sociale de même format ?

n°1753446
pyrof
Posté le 30-06-2008 à 14:40:07  profilanswer
 

Ok j'ai oublié une ligne
 
Function dudule(tmp)  
application.volatile  
....
 
Si tu as encore des problèmes donne moi des exemples

n°1753451
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 14:49:21  profilanswer
 

En colonne J j'ai la raison sociale, en colonne AJ j ai le code client que je dois indiquer ...
 
Donc j'ai copié la fonction dans la partie module 1 de la fenetre microsoft visual basic et je mets en guise de valeur quand je veux remplir AJ2 :  
=dudule(J2)
 
puis je tire vers le bas ... et ca ne remplit que les 4 premières dont la raison sociale est 8TEC ...
par contre si pour la société suivante ERDECOR je mets 8TEC alors ca remplit automatiquement la colonne AJ en 8TEC aussi ....
J'ai essayé en ERDE au cas ou il s'agirait du nombre de caractères qui pose probleme mais ca ne change rien ...
 
 
De plus j'ai testé également avec True apres application.volatile dans la mesure ou j'ai vu ca aussi sur google .... mais ca ne résout pas le probleme ...

n°1753476
babasss
Posté le 30-06-2008 à 15:19:58  profilanswer
 

Dans le même style que pyrof :

Code :
  1. Function dudule(tmp)
  2. Application.Volatile
  3. tmp_new = ""
  4. For i = 1 To Len(tmp)
  5.     Select Case Mid(tmp, i, 1)
  6.         Case "0" To "9", "a" To "z", "A-Z"
  7.             tmp_new = tmp_new & Mid(tmp, i, 1)
  8.     End Select
  9.     If Len(tmp_new) = 5 Then
  10.         Exit For
  11.     End If
  12. Next
  13. dudule = tmp_new
  14. End Function


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
mood
Publicité
Posté le 30-06-2008 à 15:19:58  profilanswer
 

n°1753483
pyrof
Posté le 30-06-2008 à 15:27:57  profilanswer
 

C'est aujourd'hui lundi et je ne dois être bien réveillé,
 en voyant la macro de babass je m'apperçois qu'il manque un argument a mid:
 
    Select Case Mid(tmp, b, 1)
 

n°1753484
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 15:29:14  profilanswer
 

babasss a écrit :

Dans le même style que pyrof :

Code :
  1. Function dudule(tmp)
  2. Application.Volatile
  3. tmp_new = ""
  4. For i = 1 To Len(tmp)
  5.     Select Case Mid(tmp, i, 1)
  6.         Case "0" To "9", "a" To "z", "A-Z"
  7.             tmp_new = tmp_new & Mid(tmp, i, 1)
  8.     End Select
  9.     If Len(tmp_new) = 5 Then
  10.         Exit For
  11.     End If
  12. Next
  13. dudule = tmp_new
  14. End Function



celle la ne me sors que le premier caractères de la première société et plus rien ensuite :'(


Message édité par GTTeamKiller le 30-06-2008 à 15:30:18
n°1753488
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 15:32:59  profilanswer
 

pyrof a écrit :

C'est aujourd'hui lundi et je ne dois être bien réveillé,
 en voyant la macro de babass je m'apperçois qu'il manque un argument a mid:
 
    Select Case Mid(tmp, b, 1)
 


 
on renvient au comportement initial, a savoir ca marche pour la premiere société, puis j ai #VALEUR! pour les autres ...
 
 
actuellement j'ai ca du coup la :

Code :
  1. Function dudule(tmp)
  2. Application.Volatile True
  3. For b = 1 To Len(tmp)
  4.     Select Case Mid(tmp, b, 1)
  5.         Case "0" To "9", "a" To "z", "A-Z"
  6.             tmp1 = b
  7.             Exit For
  8.     End Select
  9. Next
  10. dudule = Mid(tmp, tmp1, 5)
  11. End Function

n°1753489
babasss
Posté le 30-06-2008 à 15:33:20  profilanswer
 

Arghh, je me suis laissée avoir par la formulation de pyrof, il faut mettre "A" to "Z" et non "A-Z"


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
n°1753495
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 15:38:29  profilanswer
 

babasss a écrit :

Arghh, je me suis laissée avoir par la formulation de pyrof, il faut mettre "A" to "Z" et non "A-Z"


Ah yes ca marche, merci :D  
 
 
Merci a vous deux  :D  
 
 
maintenant j'ai plus qu'a m'attaquer aux doublons mais ca va devoir être vérifié à la main la de toutes facons parce qu'ils veulent décider au cas par cas ce qu'ils vont mettre en cas de doublons, 2500 entrées :sweat:

n°1753501
GTTeamKill​er
エアリス
Posté le 30-06-2008 à 15:44:12  profilanswer
 

Ou alors il me faudrait une fonction ou macro qui trouve code client qui a au moins 2 raisons sociales distinctes ...
 
je sais le faire en SQL ca :sweat:

n°1753638
kiki29
Posté le 30-06-2008 à 19:03:54  profilanswer
 

re,l'occasion peut-être d'essayer cet utilitaire pour les doublons sous Excel http://www.mdf-xlpages.com/modules [...] d=2&lid=11

n°1753819
GTTeamKill​er
エアリス
Posté le 01-07-2008 à 08:28:09  profilanswer
 

je teste cet utilitaire, merci :D


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

  tri sur une chaine de caractère dans excel

 

Sujets relatifs
[Excel + Macro] Protection de feuille + Lancement automatique MacroProblème excel / vba excel - répétition de titres en haut de page
[VBA] Ouvrir fichier Excel - même répertoireContenu d'une page Word vers excel
[VBA / Excel] Aide sur une macro a programmerVBA Excel Supprimer des lignesl
[vba/excel] filtrage d'un numero[vba excel] concatenation d'une chaine de caractère
créer un macro excel qui écrit une chaine de caractère dans DOS[VBA Excel] Recherche spécial dans une chaine de caractère ?
Plus de sujets relatifs à : tri sur une chaine de caractère dans excel


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