IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Colon n'est pas Colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut Colon n'est pas Colonne
    Bonjour à toutes les bonnes volontés,

    La question posée en son temps a été résolue et je remercie une fois de plus mes différents sauveteurs.

    Aujourd'hui, se présente une autre difficulté. La fonction de recherche que j'utilise est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rngFound = Cells.Find(What:=Nom, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    Cela fonctionne très bien sauf qu'à un moment la variable Nom contient "Colon" et que j'ai une en-tête qui est nommée "Colonne". Il juge que "Colonne" est Ok et il continue sa procédure.
    Je pourrais renommer Colonne en Col mais ça ne me met pas à l'abri d'une autre confusion.

    J'ai cherché un peu partout mais je n'ai pas trouvé le moyen de dire à Cells.Find que je ne veux que le contenu de la variable Nom et pas les à-peu-près.

    Pouvez-vous m'aider ?

    Merci d'avance.

    Henri

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, essaie avec le paramètre LookAt:=xlWhole au lieu de LookAt:=xlPart

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Merci pour ta réponse Franc.
    Après essai, je n'ai malheureusement pas de bonnes nouvelles puisqu'il devient à ce point restrictif qu'il ne sélectionne plus rien du tout.
    Si tu as une autre idée, je suis preneur...

    Belle journée !

    Henri

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Comme ça j'ai pas d'autre idée qui me vient. Si tu peux éventuellement mettre un fichier à disposition pour tester...

  5. #5
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 529
    Par défaut
    Hello,

    LookAt:=xlPart recherche une partie de "Nom" (début, milieu ou fin)
    LookAt:=xlWhole recherche exactement "Nom"
    et il n'y a que ces 2 possibilités
    https://learn.microsoft.com/fr-fr/of...excel.xllookat

    Si les 2 ne vont pas je ne crois pas qu'il y ait de solution avec Cells.Find.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Merci pour vos retours.

    Le problème est que la fonction cherche (et trouve) n'importe quoi.
    Par exemple, En cherchant Colon, il trouve colonne. Ou en cherchant Lis, il trouve Alison.
    Il faut aussi savoir que les mots recherchés sont perdus au milieu de communication bancaires, elles-mêmes non standardisées.
    Exemple :
    Virement en euros (SEPA) Vers: XXXXXXXXX ALISON - BE36363111010981 Communication: /A/106996 177 2023/01-1 1 0 Info personnelle: 106996 177 2023/01-1 1 0
    Ça rend la fonction inutilisable :-(

    Ne pourrait-on pas préciser que c'est le mot exact que je cherche dans la phrase et non au milieu de n'importe quoi.

    Il me vient une idée : pourquoi ne pas chercher " Colon " avec un espace devant et derrière, ça devrait résoudre mon problème.
    Je vais tester, je vous reviens.

    A tout à l'heure.

    Henri

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Voici une proposition en utilisant les expressions régulières. Dans les références il faut activer "Microsoft VBScript Regular Expressions 5.5".
    Dans RegEx.Pattern on utilise \b, qui est un "délimiteur de mot" en RegEx. Cela garantit que "Colon" est recherché comme un mot entier, et non comme une partie de "Colonne". Teste ceci et adapte selon tes besoins:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Dim RegEx As Object
    Dim Match As Object
    Dim CellValue As String
    Dim Nom As String
    Dim rngFound As Range
     
    Nom = "Colon" ' Mot que vous cherchez
     
    ' Créer l'objet RegEx
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.IgnoreCase = True
    RegEx.Global = False
    RegEx.Pattern = "\b" & Nom & "\b" ' Cherche uniquement le mot exact avec des délimiteurs de mots (\b)
     
    ' Chercher la première correspondance
    Set rngFound = Cells.Find(What:=Nom, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
     
    ' Vérifier si une cellule a été trouvée et si elle contient le mot exact
    If Not rngFound Is Nothing Then
        Do
            CellValue = rngFound.Value
     
            ' Appliquer RegEx pour voir si c'est un mot exact
            If RegEx.Test(CellValue) Then
                ' Correspondance exacte trouvée
                Exit Do
            End If
     
            ' Continuer la recherche
            Set rngFound = Cells.FindNext(After:=rngFound)
        Loop While Not rngFound Is Nothing And rngFound.Address <> Cells.Find(What:=Nom, After:=ActiveCell).Address
    End If

  8. #8
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 975
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 975
    Par défaut
    Bonjour
    je ne sais pas si ça va aider mais je pense que Instr fait l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
    Option Compare Text
    Sub test()
    Dim F As Worksheet
    Dim Textt As String
    Dim lig As Long
    Set F = ThisWorkbook.Worksheets("Feuil1")
    Textt = "Col"
     
     For lig = 1 To 10
     If InStr(F.Range("A" & lig).Value, Textt) <> 0 Then F.Range("B" & lig) = "OK"
        Next lig
    End Sub

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonjour BENNASR,

    Merci pour votre proposition.
    J'ai lu un jour dans une intervention de Pierre Fauconnier que "Option Compare Text en début de module, ce qui va affecter toutes les lignes du module qui traitent du texte, notamment avec = ou like mais également avec des fonctions".

    Je me méfie donc de ce "Compare Text". Peut-être peut-on faire sans ?

    Bien à vous.

    Henri

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonjour Franc,

    La solution " Colon " a fonctionné mais j'essaierai quand même ta proposition qui a l'air plus saine que l'hypothèse qu'il y ait toujours un espace avant et après le mot recherché.
    Dans les communications bancaires, rien n'est moins certain.

    Belle journée !

    Henri

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonjour Nain porte koi,

    Merci pour l'info, je vais essayer la solution de Franc.

    Belle journée !

    Henri

  12. #12
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 529
    Par défaut
    Citation Envoyé par Henri1830 Voir le message
    J'ai lu un jour dans une intervention de Pierre Fauconnier que "Option Compare Text en début de module, ce qui va affecter toutes les lignes du module qui traitent du texte, notamment avec = ou like mais également avec des fonctions".

    Je me méfie donc de ce "Compare Text". Peut-être peut-on faire sans ?
    Oui, mais...
    Option Compare Text permet de ne pas tenir compte des majuscules/minuscules, donc "machin" est différent de "MACHIN" et de "MaChIn" si cette option n'est pas active.
    A vous de voir, mais elle n'affecte QUE le module dans lequel elle se trouve, donc ça limite pas mal si vous mettez la macro dans un module spécifique

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Effectivement, s'il n'y a que la recherche dans un module à part, tout le reste fonctionnera comme avant.
    Bonne idée. Merci Nain porte koi !
    je testerai donc aussi BENNASR.
    Belle journée à tous !

  14. #14
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 552
    Par défaut
    Bonjour à tous,
    La fonction Instr possède l'argument Compare donc tu peux virer, l'option Compare du début de module et le renseigner juste au moment de la recherche.

    Aide sur la fonction :

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/03/2017, 15h30
  2. une colonne qui n'est pas reconnue
    Par JeanNoel53 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 05/04/2016, 07h25
  3. Réponses: 2
    Dernier message: 16/03/2016, 11h19
  4. Réponses: 4
    Dernier message: 25/01/2008, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo