Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/06/2009, 22h12   #1
Membre à l'essai
 
Inscription : avril 2009
Messages : 69
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 69
Points : 22
Points : 22
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 :
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
Bocage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 22h43   #2
Membre confirmé
 
Inscription : octobre 2007
Messages : 232
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 232
Points : 235
Points : 235
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
mapeh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 22h49   #3
Membre à l'essai
 
Inscription : avril 2009
Messages : 69
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 69
Points : 22
Points : 22
Bonsoir Mapeh, forum

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

Bo
Bocage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 23h32   #4
Membre confirmé
 
Inscription : octobre 2007
Messages : 232
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 232
Points : 235
Points : 235
Re-,

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

Code :
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
mapeh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 17h59   #5
Membre à l'essai
 
Inscription : avril 2009
Messages : 69
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 69
Points : 22
Points : 22
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
Bocage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 10h09   #6
Membre Expert
 
Avatar de Krovax
 
Inscription : juillet 2008
Messages : 1 889
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2008
Messages : 1 889
Points : 1 937
Points : 1 937
Bonjour,
Une méthode pour trouver les chaine de caractère ou quelle soit (début, milieu ou fin")

Code :
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 :
If split(Worksheets("Résultats").cells(i,1)," ")(0) like "*" & strMot  & "*" then
Krovax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 15h41   #7
Membre à l'essai
 
Inscription : avril 2009
Messages : 69
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 69
Points : 22
Points : 22
Par défaut Re ---

Bonjour Mapeh, Krovax, forum,

Tout fonctionne super bien. Merci encore...

Bo
Bocage est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 12h45.


 
 
 
 
Partenaires

Hébergement Web