Sous Excel: Recherche d'un mot dans une colonne

wildmaus Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 4 février 2005 - 4 févr. 2005 à 10:29
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 - 4 févr. 2005 à 11:33
Bonjour à tous,

J'aurais besoin de quelques infos...et malheureusement je ne connais pas vraiment la programmation sous Excel.
Je souhaiterais à l'aide d'une macro, rechercher un mot dans une colonne d'une feuille excel, et comptabiliser le nombre de fois qu'il apparait.
Ex: j'aimerais savoir combien de fois le mot "soldé" apparait dans la colonne A d'une feuille Excel.

Je sais qu'il faut tout d'abord faire une recherche ligne après ligne du mot, puis s'il apparait incrémenter un indice. Une fois la zone de sélection balayée, il faudrait que j'inscrive la valeur de l'indice dans une case.

Je vous remercie d'avance pour votre aide, et les quelques lignes de programmation que vous me ferez partager.

wildmaus

1 réponse

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
4 févr. 2005 à 11:33
Tu mets le code ci-dessous dans un module, puis dans une des cellules de ta feuille Excel tu mets :
=nbmottrouve("soldé";A:A) pour chercher dans la colonne A.
La fonction accepte aussi :
=nbmottrouve("soldé";A:D) pour chercher dans les colonnes A, B, C, D.

J'ai aussi mis une fonction un peu plus complexe :
=nbmottrouve2("soldé";A;C;Feuil2!A) pour chercher dans la colonne A et C (pas B) de la feuille en cours, ainsi que dans la colonne A de la feuille Feuil2

Public Function NbMotTrouve(a_Mot As String, a_Plage As Range) As Long
'a_Mot : Texte recherché
'a_Plage : colonnes à parcourir
Dim li_NbLignes As Integer
Dim li_ColDeb As Integer
Dim li_ColFin As Integer
Dim li_Col As Integer
Dim li_Ligne As Integer
Dim ll_Count As Long


li_NbLignes = ActiveSheet.UsedRange.Rows.Count
'N° de la 1e colonne de la plage sélectionnée
li_ColDeb = a_Plage.Column
'N° de la dernière colonne de la plage sélectionnée
li_ColFin = a_Plage.Columns.Count + li_ColDeb - 1
'Parcourt les colonnes d'une plage sélectionnée
For li_Col = li_ColDeb To li_ColFin
'Parcourt les lignes possibles
For li_Ligne = 1 To li_NbLignes
'Teste si le texte est celui recherché
If ActiveSheet.Cells(li_Ligne, li_Col).Value = a_Mot Then
'Incrémente le compteur
ll_Count = ll_Count + 1
End If
Next li_Ligne
Next li_Col
NbMotTrouve = ll_Count
End Function


Public Function NbMotTrouve2(a_Mot As String, ParamArray a_Plage()) As Long
'a_Mot : Texte recherché
'a_Plage : colonnes à parcourir
Dim li_NbLignes As Integer
Dim li_ColDeb As Integer
Dim li_ColFin As Integer
Dim li_Col As Integer
Dim li_Ligne As Integer
Dim ll_Count As Long
Dim l_Plage As Range
Dim li_Plage As Integer
Dim l_Sheet As Worksheet
'Parcourt les différentes plages sélectionnées
For li_Plage = 0 To UBound(a_Plage)
'Définit la zone de travail d'une feuille
Set l_Plage = a_Plage(li_Plage)
'Définit la feuille à laquelle appartient la zone sélectionnée
Set l_Sheet = l_Plage.Worksheet
'Détermine le nb de lignes utilisées dans la feuille
li_NbLignes = l_Sheet.UsedRange.Rows.Count
'N° de la 1e colonne de la plage sélectionnée
li_ColDeb = l_Plage.Column
'N° de la dernière colonne de la plage sélectionnée
li_ColFin = l_Plage.Columns.Count + li_ColDeb - 1
'Parcourt les colonnes d'une plage sélectionnée
For li_Col = li_ColDeb To li_ColFin
'Parcourt les lignes possibles
For li_Ligne = 1 To li_NbLignes
'Teste si le texte est celui recherché
If l_Sheet.Cells(li_Ligne, li_Col).Value = a_Mot Then
'Incrémente le compteur
ll_Count = ll_Count + 1
End If
Next li_Ligne
Next li_Col
Next li_Plage
NbMotTrouve = ll_Count
End Function
0
Rejoignez-nous