FORUM Tom's Hardware » Programmation » VB / VBA / VBS » comparaison de colonnes par mots clefs
 

comparaison de colonnes par mots clefs

fifou3101 Achats / Ventes : blanck197, stphane3590, 1 utilisateur anonyme et 122 utilisateurs inconnus
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : comparaison de colonnes par mots clefs
 
zun
Plus d'informations

Bonjour,
je souhaiterais effectuer dans UNE colonne contenant une serie de phrases (chaque cellule en contenant UNE) une recherche parmi une serie de mots clefs contenus dans une autre colonne (chaque cellule contenant un mot clef).  
Ainsi, il faudrait que pour chaque ligne contenant une phrase la macro cherche si chacun des mots clefs est present.  
Si un ou plusieurs mots clefs sont presents, il faudrait qu'il y ait marquer dans une troisieme colonne OK sinon PAS OK lol  
Merci beaucoup!!!!!


Message édité par zun le 15-09-2006 à 16:56:50

zun
Plus d'informations

En fait j'etais plus parti dans une macro du style :  

Code :
  1. Sub test()
  2. Dim c As Range
  3. For Each c In Range("A2:A13000" )
  4.   If c.Find(c.Value, Column + 1) Is Nothing Then
  5.     Cells(c.Row, Column + 3) = "PAS OK"
  6.   Else
  7.     Cells(c.Row, Column + 3) = "OK"
  8.   End If
  9. Next
  10. End Sub


Message édité par zun le 15-09-2006 à 16:52:28
zeb
Profil : Modérateur libre
Plus d'informations

[:zeb] Balise [CODE]

zun
Plus d'informations

desole!!!
et c'est promis je tutoie...mais il faut me comprendre je suis en stage au japon et j'ai perdu mes reperes lol
Gomenasai!


Message édité par zun le 15-09-2006 à 16:54:27
zeb
Profil : Modérateur libre
Plus d'informations

Il y a plein de raisons, trouves-en au moins une bonne parmi celles-ci :
 


  • Parce que respecter ces règles, c'est la façon de montrer du respect envers les personnes qui voudront bien te lire et te répondre.


  • Parce qu'il est beaucoup plus facile de lire du code formatté dans une police à caractères fixes, correctement indenté, avec des couleurs contextuelles (ok, c'est pas terrible en VB)


  • Parce que je te le demande :sol: (ziva, comment il se la pète ce modo !)


  • Parce que c'est plus joli ( :love: je l'aime bien celle-là)


  • Parce qu'il est d'usage ici de ne pas donner de solutions aux personnes qui ne font pas un minimum d'effort en regard du temps pris par ceux qui répondront. La preuve, je pense que je suis en mesure de te répondre, mais je ne prendrais ce temps que quand j'en aurais fini avec la modération.


 
N'hésite donc pas à choisir au moins une bonne réponse. Modifie alors ton post et tu ne tarderas pas à avoir une soluce.


Message édité par zeb le 15-09-2006 à 16:54:33
zeb
Profil : Modérateur libre
Plus d'informations

Oups, grilled....
Ces raisons restent valables.
 
Je regardes donc ton code..... ;)

zeb
Profil : Modérateur libre
Plus d'informations

Il faut que tu fasses deux boucles imbriqués, l'une parcourant les ligne de 2 à 13000 et une autre parcourant les mots-clef....

zun
Plus d'informations

a écrit :

Oups, grilled....
Ces raisons restent valables.
 
Je regardes donc ton code..... ;)


 
Doomo Arigatoo gozaimasu! Merci franchement beaucoup  :jap:


Message édité par zun le 15-09-2006 à 16:59:59
zun
Plus d'informations

a écrit :

Il faut que tu fasses deux boucles imbriqués, l'une parcourant les ligne de 2 à 13000 et une autre parcourant les mots-clef....


 
Je l'avais saisi mais je ne vois pas comment faire...a la base je suis specialise dans l'administration de systemes serveurs pas dans la programmation...donc je pense saisir plus ou moins la logique en rapport avec ma requete mais il me manque les outils pour le faire. Bref, j'arrive pas a m'exprimer  :pt1cable:  
Si tu pouvais me mettre un peu plus sur la voix (du graal lol), comment je pourrais imbriquer ca...
Je te remercie!

zeb
Profil : Modérateur libre
Plus d'informations

Code :
  1. Dim table As Variant
  2. Dim row As Integer
  3. Dim word As Integer
  4. Dim found As Boolean
  5. For row = 2 To 13000
  6.     table = Split(Cells(row, ColonneDesMofClef), " " )
  7.     found = False
  8.     For word = 0 To UBound(table)
  9.         found = found Or Not Cells(row, ColonneOuChercher).Find(table(word)) Is Nothing
  10.     Next
  11.     If found Then
  12.       ' Faire quelque chose d'intéressant
  13.     Else
  14.       ' Faire quelque chose d'intéressant
  15.     End If
  16. Next


 
Tu dois bien sûr adapter un minimum ce code...
 
楽しみなさい! :jap:

zun
Plus d'informations

Alors voila ce que j'ai fait :

Code :
  1. Sub test2()
  2. Dim table As Variant
  3. Dim row As Integer
  4. Dim word As Integer
  5. Dim found As Boolean
  6. For row = 2 To 13000
  7.     table = Split(Cells(row, 2), " " )
  8.     found = False
  9.     For word = 0 To UBound(table)
  10.         found = found Or Not Cells(row, 1).Find(table(word)) Is Nothing
  11.     Next
  12.     If found Then
  13.     Cells(row, 4).Value = "OK"
  14.     Else
  15.     Cells(row, 4).Value = "PAS OK"
  16.     End If
  17. Next
  18. End Sub


 
Le petit souci c'est que si je comprends bien ce que tu as ecrit comme code, c'est qu'il faut que tous les mots clefs soient presents dans chaque cellule et soient separes par un espace...et la ca marche.
 
Le petit souci est que j'ai 1 mot clef par cellule...voila en fait a quoi devrait ressembler mon tableau apres execution de la macro :
 
A                                     B                  C  
1 Acer driver                      Dell             OK  
2 Screen saver                   Acer            PAS OK  
3 dell                                Sony           OK  
4 yekeke enfant des bois*    Creative       PAS OK  
 
* cherche pas je viens de l'inventer lol
 
Donc en A les phrases, en B les mots clefs et en C si c'est bon ou pas...
A moins que tu connaisses une macro vite fait qui puisse prendre tous ces mots clefs et les aligner dans une cellule en les separant par un espace...
 
Merci beaucoup! Arigatoo gozaimasu! Thank you! Danke! Grazie!...bref tu m'auras compris lol

zeb
Profil : Modérateur libre
Plus d'informations

Ben, et juste en réfléchissant :
 
Vire les lignes 2 et 8.
Ajoute une variable i de type integer.
Au lieu de boucler sur le tableau, boucle sur les cellules de la colonne B :

Code :
  1. For i = 2 To 13000
  2.     found = found Or Not Cells(row, 1).Find(Cells(i, 2)) Is Nothing

zun
Plus d'informations

Super!!! Ca marche! Tu me diras evidemment ;)
Merci beaucoup!!!
Si je peux faire quelque chose pour toi...t'envoyer des photos du japon ou je ne sais trop quoi ce sera avec plaisir ;)
 
Pour info je mets le code :
 

Code :
  1. Sub test3()
  2. Dim row As Integer
  3. Dim word As Integer
  4. Dim found As Boolean
  5. Dim i As Integer
  6.     For row = 1 To 10
  7.     found = False
  8.     For i = 1 To 10
  9.     found = found Or Not Cells(row, 1).Find(Cells(i, 2)) Is Nothing
  10.     Next
  11.     If found Then
  12.     Cells(row, 4).Value = "OK"
  13.     Else
  14.     Cells(row, 4).Value = "PAS OK"
  15.     End If
  16. Next
  17. End Sub


 
Sayonara  :jap:


Message édité par zun le 20-09-2006 à 11:56:59
zeb
Profil : Modérateur libre
Plus d'informations

Evidemment ;)  
Tu veux faire quelque chose pour rendre la pareille ? Participe au forum !
 
Sayonara :jap:


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » comparaison de colonnes par mots clefs
 

Annonces Google
Publicité