Recherche de la chaine de caractère sur une plage Excel

Bonjour Le forum,

Je suis devant un petit probleme, j'ai une plage de donnée de plus 19000 ligne, et je cherches à savoir le nombre d'occurence de la chaine de carctère : "http"

J'ai commencé à faire le code suivant :

Sub testhttp()
 Dim Cel As Range
    Dim I As Integer
    Dim char As String
    a = 0 ' etant mon compteur du nombre d'occurence
    For Each Cel In Range("A1:A" & Nblig)  ' NbLig = 19000
    X = Cel.Row
   For I = 1 To Len(Cel)
    If ...???.. then a=a+1

   

Mais je bloques sur la recherche de la chaine de caractère http j'ai essayer avec InStr() mais je retourne 0 alors que dans mon exemple j'ai 324 occurences

Si vous avez des idées je suis prenneur je dois passer à coté de quelques chose d'évident !

Bonjour,

Si c'est le nombre de cellules qui contiennent "http" au moins une fois, VBA est inutile :

=NB.SI(Plage;"*http*")

Si il faut compter le nombre exacte de "http", même s'il est compris plusieurs fois dans une cellule :

Sub testhttp()

Dim Cel As Range, I As Integer, Nb As Long, NbLig As Long

NbLig = 19000
For Each Cel In Range("A1:A" & Nblig)  ' 
   For I = 1 To Len(Cel.Value) - 4
      If Mid(Cel.Value,I,4) = "http" then Nb=Nb+1
   Next I
Next Cel
MsgBox "Nombre d’occurrences : " & Nb

End Sub

bonjour à tous

une autre proposition

Sub aargh()
    dl = Cells(Rows.Count, 1).End(xlUp).Row
    stf = UCase("HTTP") 'chaine à compter
    Set re = Range("A1").Resize(dl, 1).Find(stf, lookat:=xlPart, MatchCase:=False) 'recherche cellule contenant stf
    If Not re Is Nothing Then
        fa = re.Address
        Do
            st = UCase(re)
            s = 1
            Do
                s = InStr(s, st, stf) 'compte les occurrences de stf dans la cellule
                If s > 0 Then a = a + 1: s = s + 1
            Loop Until s = 0
            Set re = Range("A1").Resize(dl, 1).FindNext(re)
        Loop Until re.Address = fa
    End If
    MsgBox a
End Sub

Merci Messieux, vos deux fonctionnent bien, et me retourne le resultat 325 qui me semble correcte, alors que le recherche V d'excel me retourne 324? Avez vous une idée, car je comprend pas pourquoi il y a cet écart alors que vos codes me semble logique!

Les macro travaillent sur toutes les feuilles, car le resultat ne change pas quelques soit l'onglet selectionner

Salut tout le monde

à tester

Sub CompterOccurence()
Dim cCount As Long
Dim Lastrow As Integer
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
cCount = Application.CountIf(Range("A1:A" & Lastrow), "*http*")
MsgBox "Nombre d’occurrences: " & cCount
End Sub

Salut h2so4, m3ellem1 !

Les macro travaillent sur toutes les feuilles, car le resultat ne change pas quelques soit l'onglet selectionner

En l'absence de précision sur la feuille dans le code, il s'agit de la feuille active. Une adaptation pour préciser la feuille :

Sub testhttp()

Dim Cel As Range, I As Integer, Nb As Long, NbLig As Long

NbLig = 19000
For Each Cel In Sheets("MaFeuille").Range("A1:A" & Nblig)  ' 
   For I = 1 To Len(Cel.Value) - 4
      If Mid(Cel.Value,I,4) = "http" then Nb=Nb+1
   Next I
Next Cel
MsgBox "Nombre d’occurrences : " & Nb

End Sub

Autre proposition avec une fonction personnalisée, utilisable comme une fonction Excel classique :

Function CompterOccurence(Plage As Range, Texte As String) As Long

Dim Cel As Range, I As Integer, Nb As Long

For Each Cel In Plage
   For I = 1 To Application.Max(Len(Cel.Value) - Len(Texte), 1)
      If Mid(Cel.Value,I,Len(Texte)) = Texte then Nb=Nb+1
   Next I
Next Cel
CompterOccurence = Nb

End Function

Dans une cellule du classeur :

=CompterOccurence(A1:A19000;"http")

Ok merci c'est parfait,

Bonne journée le Forum

Rechercher des sujets similaires à "recherche chaine caractere plage"