Mise à jour d'enregistrement avec like

Fermé
PATMAR83 Messages postés 6 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 29 juin 2013 - 28 juin 2013 à 15:49
jee pee Messages postés 40912 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 10 mars 2025 - 29 juin 2013 à 12:32
Bonjour,

j'ai écrit du code afin de détecter la présence de différents mots dans un libellé (libelle 1)
En fonction de la présence ou pas de ces différents mots (mot d'un dico) et de 2 autres critère (code NAT_GES et class_erp), je mets à jour un champ Catégory
Pour m'aider , à ce stade j'ai mis des messages d'info qui me permettent de confirmer la présence des mots du dico
La détection se fait correctement mais la mise à jour ne s'effectue pas car il semble que le critère like "mot du dico" ne soit pas pris en compte dans le where
Ainsi, j'ai tous les champs qui passe à ACH01 ou ACH02
Comment peut-on s'y prendre pour que cette clause like soit bien pris en compte

Private Sub CATEGORY1_GotFocus()

Dim DB As DAO.Database: Set DB = CurrentDb
Dim r As DAO.Recordset: Set r = DB.OpenRecordset("TRANSFERT", dbOpenTable)
Dim libel As String
Dim mypos As Variant
Dim mypos1 As Variant
Dim mypos2 As Variant
Dim mypos3 As Variant
Dim mypos4 As Variant
Dim strsql As String
Dim strsql1 As String
Dim strpln As String
Dim strcol As String
Dim strloc As String
Dim strgr As String
Dim strsil As String

strplan = "PLAN" 'mot dico
strcol = "COLLE" 'mot dico
strloc = "LOCTITE" 'mot dico
strgr = "GRAISSE" 'mot dico
strsil = "SILICON" 'mot dico



libel = [libellé 1] 'valeur du champ libelle 1

mypos = InStr(1, libel, strplan) 'libellé contient le mot plan
mypos1 = InStr(1, libel, strcol) 'libellé contient le mot colle
mypos2 = InStr(1, libel, strloc) 'libellé contient le mot loctite
mypos3 = InStr(1, libel, strsil) 'libellé contient le mot silicone
mypos4 = InStr(1, libel, strgr) 'libellé contient le mot graisse

If mypos > 0 Or mypos1 > 0 Or mypos2 > 0 Or mypos3 > 0 Or mypos4 > 0 Then 'test sur la presence d'un mot du dico
MsgBox "chaine trouvée" 'mise à jour du champ categorie si le champ libel contient un mot du dico

     strsql = "UPDATE [TRANSFERT] SET [TRANSFERT].category='ACH02' WHERE " _
                & " (((TRANSFERT.NAT_GES)='12' Or (TRANSFERT.NAT_GES)='73' Or (TRANSFERT.NAT_GES)='22') AND" _
                & "  ((TRANSFERT.[libellé 1]) Like '*silicone*' Or (TRANSFERT.[libellé 1]) Like '*colle*' Or" _
                & " (TRANSFERT.[libellé 1]) Like '*loctite*' Or (TRANSFERT.[libellé 1]) Like '*graisse*') AND ((TRANSFERT.CLASS_ERP)='ELT STANDARD'))"
             
                        
                CurrentDb.Execute strsql
             
        
                  

Else

MsgBox "chaine recherche pas trouve" 'mise à jour du champ categorie si le champ libel ne contient pas  un mot du dico
 
        strsql1 = "UPDATE [TRANSFERT] SET [TRANSFERT].category='ACH01' WHERE " _
               & " (((TRANSFERT.NAT_GES)='12' Or (TRANSFERT.NAT_GES)='73' Or (TRANSFERT.NAT_GES)='22') AND" _
               & "  ((TRANSFERT.[libellé 1]) not like '*silicone*' Or (TRANSFERT.[libellé 1]) not like '*colle*' Or" _
              & " (TRANSFERT.[libellé 1]) not like '*loctite*' Or (TRANSFERT.[libellé 1]) not like '*graisse*') AND ((TRANSFERT.CLASS_ERP)='ELT STANDARD'))"
             CurrentDb.Execute strsql1
End If




End Sub




A voir également:

3 réponses

blux Messages postés 26703 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 mars 2025 3 328
Modifié par blux le 28/06/2013 à 16:24
Salut,

Ca coince dans les deux cas ?

A+ blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
0
PATMAR83 Messages postés 6 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 29 juin 2013
29 juin 2013 à 11:58
oui, le champ catégorie prend en réalité la valeur du dernier enregistrement rencontré
C'est à dire que le champ catégorie passe à ACH02 lorsqu'il rencontre un mot du dico, mais s'il rencontre aprés un champ ou aucun mot du dico s'y trouve, alors tous les champs passent à ACH01
0
jee pee Messages postés 40912 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 10 mars 2025 9 558
29 juin 2013 à 12:32
Salut,

Quelques observations :

1/ Tu as des références en majuscules et tu testes des minuscules
strcol = "COLLE" VS like '*colle*'

2/ orthographe pas cohérente : SILICON vs '*silicone*'

3/ En logique l'inverse de
A LIKE 'X' OR B LIKE 'Z'
ce devrait être
A NOT LIKE 'X' AND B NOT LIKE 'Z'
ou plus facile
NOT (A LIKE 'X' OR B LIKE 'Z' )

donc ta seconde commande

(NOT( (TRANSFERT.[libellé 1]) Like '*silicone*' Or (TRANSFERT.[libellé 1]) Like '*colle*' Or" _
& " (TRANSFERT.[libellé 1]) Like '*loctite*' Or (TRANSFERT.[libellé 1]) Like '*graisse*'))
0