Rechercher : dans
Par :

VBA TROUVER caractères spéciaux, pas REPLACE

Dernière réponse le 16 fév 2009 à 16:56:23 Ludivine50, le 12 fév 2009 à 16:18:59 
 Signaler ce message aux modérateurs

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

Configuration: ACCESS 2000 - 2003

Meilleures réponses pour « VBA TROUVER caractères spéciaux, pas REPLACE » dans :
Oracle - Echappement de caractères spéciaux Voir Pour certaines requêtes SQL, nous avons besoin de rechercher des chaînes de caractères contenant des caractères spéciaux tels que '%' Dans l'exemple suivant, qui est faux, le besoin est de trouver les enregistrements contenant au milieu le...
[CCM] Utiliser des caractères spéciaux VoirVous pouvez utiliser des caractères spéciaux dans vos messages sur les forums de CCM. Vous pouvez: Soit utiliser la table de caractères Windows (charmap.exe) et copier-coller les caractères dans le message. Soit utiliser les entités...
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...
Supprimer un fichier contenant des caractères spéciaux VoirSi le fichier que vous souhaitez supprimer commence par un caractère "moins" (-), la commande rm risque de prendre la suite comme une option de la ligne de commande. Pour y remédier, une première solution consiste à faire précéder le nom du...
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...

1

michel_m, le 12 fév 2009 à 17:18:42

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
Le forum est basé sur le partage de connaissances:Je ne réponds donc pas à des questions techniques par message privé.
Cordialement, Michel

Répondre à michel_m

2

Ludivine50, le 12 fév 2009 à 18:05:02

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?

Répondre à Ludivine50

3

michel_m, le 12 fév 2009 à 19:19:42

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

Le forum est basé sur le partage de connaissances:Je ne réponds donc pas à des questions techniques par message privé.
Cordialement, Michel

Répondre à michel_m

4

Ludivine50, le 13 fév 2009 à 09:26:13

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?

Répondre à Ludivine50

5

michel_m, le 13 fév 2009 à 09:35:24

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" Le forum est basé sur le partage de connaissances:Je ne réponds donc pas à des questions techniques par message privé.
Cordialement, Michel

Répondre à michel_m

6

Ludivine50, le 13 fév 2009 à 09:46:03

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é?

Répondre à Ludivine50

7

michel_m, le 13 fév 2009 à 12:40:17

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!
Le forum est basé sur le partage de connaissances:Je ne réponds donc pas à des questions techniques par message privé.
Cordialement, Michel

Répondre à michel_m

8

Ludivine50, le 13 fév 2009 à 20:22:34

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! ;-)

Répondre à Ludivine50

9

 Ludivine50, le 16 fév 2009 à 16:56:23

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

Répondre à Ludivine50