VBA TROUVER caractères spéciaux, pas REPLACE [Résolu/Fermé]

Signaler
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
-
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
-
Bonjour à tous,

Après une longue recherche sur les forum, j'ai trouvé 30 discussions sur la fonction Replace, des fonctions pour remplacer les ' par des '' pour faire fonctionner la recherche qui ne fonctionnent pas, mais pas la réponse à ma question toute simple.

Je voudrais simplement un code du genre:

Dim RECHERCHE as string
If RECHERCHE contient un espace ou un caractère " ' " Then
MsgBox("Ne pas saisir d'espace ou de caractère ' dans la zone de recherche!")
Else
Exécute ma recherche
End If

Et mon soucis, c'est simplement que je n'arrive pas à chercher si ce que la personne a saisie contient une ' ou un espace. Malheureusement ce petit inconvénient crée la panique!

En espérant que quelqu'un pourra m'aider,
Bonne journée

4 réponses

Messages postés
16036
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 janvier 2020
2850
Bonjour,

essaies cette macro événementielle à placer dans le module "feuil" concerné de VBE
(dans cet exemple A1:C10 représente la zone où l'action est valide

Private Sub Worksheet_Change(ByVal Target As Range)
Dim reg As Object
Dim flag As Boolean
If Not Intersect(Target, Range("A1:C10")) Is Nothing Then
   ' instancie
    Set reg = CreateObject("vbscript.regexp")
    reg.Pattern = "'"
    flag = reg.Test(target)
    If flag Then
        MsgBox "une ou plusieurs apostrophes ont été saisies dans la cellule"
    End If
End If
End Sub


mais pas sûr qu'apostrophe soit du genre féminin
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Bonjour Michel et merci pour ta réponse!

Je travaille sous Access et apparemment VB Access ne reconnaît pas la fonction Intersect.
Mais je ne savais pas quoi faire de Target, c'est peut-être là que je le suis trompée?
Messages postés
16036
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 janvier 2020
2850
bin oui c'était sur Excel, mon truc
target représente la cellule active
Mais les expressions rationnelles fonctionne aussi avec Access
comme je travaillle pas souvent avec access, je te dirai peut-être des bétises

peut être en créant une fonction booléenne avec comme param^tre , ta zone de texte ,et reverrrait False ou true
function machin(tonparam)
Dim reg As Object
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "'"
machin = reg.Test(tonparam)
end functon

Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Bonjour Michel, merci beaucoup pour ta réponse.

Je viens de tester et cela fonctionne très bien!
J'ai juste un problème: quand j'ouvre mon formulaire de recherche et que je saisie pour la première fois quelquechose dans la zone de texte que l'on va chercher après, il plante.
Pour mieux décrire le pb:
- quelqu'un fait sa recherche et saisie EGLISE -->la recherche fonctionne
- quelqu'un fait une deuxieme recherche et saisie L'EGLISE --> MsgBox("Merci de saisir une expression sans apostrophe")
- quelqu'un fait une troisieme recherche et saisie MAIRIE --> la recherche fonctionne
- fermeture du formulaire de recherche
- réouverture du formulaire de recherche
- saisie dans la zone de texte de n'importe quel caractère (sans cliquer sur le bouton qui lance ma procédure de recherche)--> Message d'erreur:
Erreur de syntaxe (opérateur absent) dans l'expression '[num] like '*L'EGLISE*' or  [adresse] like '*L'EGLISE*' ....


ça ne fait cela que à la première saisie, et après cela fonctionne.
Je ne comprends pas pourquoi il garde en mémoire "L'EGLISE", alors que la dernière saisie était "MAIRIE", et pourquoi il continue à bloquer là-dessus.
Qu'en penses-tu?
Messages postés
16036
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 janvier 2020
2850
bonjour,
comme je te l'ai dit, je travaille rarement sur Access..
pistes sans garantie:
peut-être nettoyer la zone si erreur
abandonner le système "fonction" et passer en procédure "after up date"
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
J'ai ajouté une ligne de commande pour nettoyer la zone mais ça ne change rien.
La procédure after up date, je ne connais pas. Cela est compliqué?
Messages postés
16036
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 janvier 2020
2850
Re

En mode création du formulaire-
-sélectionne ton contrôle où tu test l'apostrophe
-propriété- événement
coche "après MAJ"
sur le bouton "trois points" sélectionnes "générateur code"
voila le code :(remplace "s_mel" (nom de mon appli qui vérifiait la syntaxe d'un e-mail) par le nom de ton contrôle

Private Sub s_mel_AfterUpdate()
Dim reg As Object
     Dim flag As Boolean
 If [s_mel] > 0 Then
     Set reg = CreateObject("vbscript.regexp")
    reg.Pattern = "'"
    flag = reg.Test([s_mel])
    If flag Then
        MsgBox "une ou plusieurs apostrophes ont été saisies dans la cellule"
    End If
End If
     
     Set reg = Nothing
End Sub


bin tout ça, ça m'aura permis de me replonger dans Access, d'où le délai!
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Zut! Je voulais tester ce soir, mais les tables de ma bd sont liées à SQL SERVER, et là j'ai pas accès à la base...
Du coup, je testerais lundi.
Je vais faire un peu différemment, car j'ai codé toute la recherche en VB. Le formulaire est fait par Access, mais après, c'est que du VB. Mais je vais réussir à m'en dépatouiller je pense.
Je te remercie, je te souhaite un bon WE, et te dit à lundi! ;-)
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Bonjour Michel, je viens de tester mais ça n'a rien changé: il affiche toujours un message d'erreur la 1ere fois que j'ouvre le formulaire de recherche. Du coup, j'ai testé de le recréer complètement. Un peu long mais je crois que je n'ai pas d'autre solution, le formulaire a l'air verrolé. D'ailleurs, avant il n'arrivait pas à chercher s'il y avait un espace dans la saisie, maintenant il y arrrive!
Je te remercie pour ton aide Michel.
Bonne journée