VBA TROUVER caractères spéciaux, pas REPLACE

Résolu
Ludivine50 Messages postés 118 Statut Membre -  
Ludivine50 Messages postés 118 Statut Membre -
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

4 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0
    1. Ludivine50 Messages postés 118 Statut Membre 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?
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    0
    1. Ludivine50 Messages postés 118 Statut Membre 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?
      0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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"
    0
    1. Ludivine50 Messages postés 118 Statut Membre 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é?
      0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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!
    0
    1. Ludivine50 Messages postés 118 Statut Membre 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! ;-)
      0
    2. Ludivine50 Messages postés 118 Statut Membre 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
      0