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 :

Trouver une chaine de caractère [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Points : 53
    Points
    53
    Par défaut Trouver une chaine de caractère
    Bonjour Forum,

    je reviens avec un besoin d'être plus précis dans ce sous programme ou l'on recherche la présence d'une chaine caractère dans colonne contenant des abréviations. Le problème est qu'il trouve toute les occurences et que je voudrais seulement ceux qui débutent par cette chaine de caractère.

    exemple : recherche RA : trouve RA, ICRA, FRA .

    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
    Function NbOccurrences(ByVal strMot As String) As Integer
    
    ' strMot : Mot recherché
    
    Dim i As Integer
    Dim Xls As Worksheet
    Set Xls = ThisWorkbook.Worksheets("Résultats")
    Set c = Xls.Columns(6).Find(strMot, LookIn:=xlValues, lookat:=xlPart)
    
        If Not c Is Nothing Then
            firstAddress = c.Address
            fmInterfaceSec.ListView2.ListItems.Clear
            Do
             '   MsgBox (c.Address)
                With fmInterfaceSec.ListView2
                    .ListItems.Add , , Xls.Cells(c.row, 6) ' abrev
                    ...etc...
                    End With
                   Set c = ActiveSheet.Columns(6).FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
    End Function
    je crains de devoir les vérifier un à un...et je ne vois pas comment

    Merci de votre aide

    Bo

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 255
    Points : 325
    Points
    325
    Par défaut
    Bonsoir,

    Est-ce que les mots recherchés sont en premier, dans la cellule, ou peuvent être situés n'importe où dans celle-ci?

    Et s'ils sont situés n'importe où, ont-ils un espace avant?

    A te relire

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Points : 53
    Points
    53
    Par défaut
    Bonsoir Mapeh, forum

    la chaine de caractère recherchée se situe tjrs au début de l'abréviation.

    Bo

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 255
    Points : 325
    Points
    325
    Par défaut
    Re-,

    essaie ainsi, à mettre dans un module standard...

    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
    33
    34
    35
    36
    37
    Public Recherches As Object
    Sub Cherche()
    NbOccurrences "RA"
    If Recherches.Count = 0 Then Exit Sub
    With Sheets("Résultats")
        temp = Application.Transpose(Recherches.Items)
        fmInterfaceSec.ListView2.ListItems.Clear
        If Recherches.Count = 1 Then
            fmInterfaceSec.ListView2.ListItems.Add , , .Cells(temp(x), 6).Value ' abrev
        Else
            For x = LBound(temp) To UBound(temp) - 1
                fmInterfaceSec.ListView2.ListItems.Add , , .Cells(temp(x, 1), 6).Value ' abrev
            Next x
        End If
    End With
    End Sub
     
    Function NbOccurrences(ByVal strMot As String) As Integer
    Dim Lig As Long, Derlig As Long, Lig2 As Long
    Dim Xls As Worksheet
     
    Set Recherches = CreateObject("Scripting.Dictionary")
    Set Xls = ThisWorkbook.Worksheets("Résultats")
     
    On Error Resume Next
    With Xls
        Derlig = .[F65000].End(xlUp).Row
        Lig = Application.Match(strMot & "*", .Columns(6), 0)
        If IsError(Lig) Then Exit Function
        Recherches.Item(Lig) = Lig
        While Err.Number = 0
            Lig2 = Application.Match(strMot & "*", .Range(.Cells(Lig + 1, 6), .Cells(Derlig + 1, 6)), 0)
            Recherches.Item(Lig2 + Lig) = Lig2 + Lig
            Lig = Lig2 + Lig
        Wend
    End With
    End Function

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Points : 53
    Points
    53
    Par défaut Re --
    Bonjour Mapeh, Forum,

    Merci pour le code, le tout a fonctionné avec quelques ajustements, et une plus longue période de temps à comprendre le tout..Fort la transposée.

    le résultat d'une recherche de "CA" a donné tous les abrév qui débutent par CA mais aucun CA à l'intérieur d'une abrév. Ce qui un grand pas.

    Je vais voir comment ajouter une condition pour raffiner encore.

    Merci et A+

    Bo

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Une méthode pour trouver les chaine de caractère ou quelle soit (début, milieu ou fin")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function NbOccurrences(ByVal strMot As String) As Integer
    Dim i as long, DerniereLigne  as long
    DerniereLigne = Worksheets("Résultats").Range("A65536").End(xlUp).Row 'donne la dernièreligne de la colonne A remplace le A par ta colonne
    NbOccurrences=0
    For i = 2 to DerniereLigne  'on parcour de la ddeuxième a la dernièreligne
    If Worksheets("Résultats").cells(i,1) like "*" & strMot  & "*" then 'si il y a RA dans la cellule
        NbOccurrences=NbOccurrences+1
    end if
    next i  
    end function
    Tu peux aussi utilisé find qui sera plus rapide
    Si la recher doit se faire dans le premier mot seulement de la cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If split(Worksheets("Résultats").cells(i,1)," ")(0) like "*" & strMot  & "*" then
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Points : 53
    Points
    53
    Par défaut Re ---
    Bonjour Mapeh, Krovax, forum,

    Tout fonctionne super bien. Merci encore...

    Bo

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

Discussions similaires

  1. trouver une chaine de caractères dans une page web
    Par ludojojo dans le forum C++Builder
    Réponses: 10
    Dernier message: 11/06/2008, 20h01
  2. Comment trouver une chaine de caractère dans fichier texte
    Par youssef1989 dans le forum Débuter
    Réponses: 3
    Dernier message: 01/05/2008, 16h45
  3. comment trouver une chaine de caractère
    Par samplaid dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 11/03/2008, 14h18
  4. [PHP-JS] Trouver une chaine de caractères
    Par calitom dans le forum Langage
    Réponses: 6
    Dernier message: 08/10/2007, 19h18
  5. Réponses: 4
    Dernier message: 03/01/2007, 10h39

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