Comptabiliser le nombre de fois que se répète un mot dans un fichier

Comptabiliser le nombre de fois que se répète un mot dans un fichier - VB/VBA/VBS - Programmation

Marsh Posté le 06-10-2008 à 12:06:07    

Bonjour,
Comme le titre le montre j'ai fait une macro qui calcule le nombre de fois que se répète un mot dans un fichier excel ( plusieurs feuilles excel ), j'ai d'abord commencé par écrire le nombre de fois que se répète un mot dans une feuille excel mais y a une erreur 9 ( " l'indice n'appartient pas à la sélection ) pourriez vous m'aider svp et merci d'avance.
 
Voila mon code :  
 
Sub repetition_mot()
Dim mot As String
Dim MaPlage As Range
Dim cpt As Integer
Dim cmptCol As Long, cmptLig As Long
Set MaPlage = ThisWorkbook.Worksheets("feuille1" ).Cells(1.1)
cpt = 0
For cmptLig = 0 To MaPlage.End(x1Down).Row - MaPlage.Row
For cmptCol = 0 To MaPlage.End(x1ToRoght).Column - MaPlage.Column
 
If MaPlage.Offset(cmptLig, cmptCol).Value = "raison" Then cpt = cpt + 1
 
Next cmptCol
Next cmptLig
MsgBox cpt
 
End Sub

Reply

Marsh Posté le 06-10-2008 à 12:06:07   

Reply

Marsh Posté le 06-10-2008 à 12:50:46    

Chez moi, l'erreur 9, "l'indice n'appartient pas à la sélection" aparait sur la ligne

Set MaPlage = ThisWorkbook.Worksheets("feuille1" ).Cells(1.1)

Elle disparait quand j'indique "Feuil1" au lieu de "Feuille1".
 
Plus loin, il y a d'autres erreurs qui apparaissent.
Par exemple, ce n'est pas x1... (Xavier Un) qu'il faut mettre, mais xl.. (Xavier, Laura), et "right" au lieu de "roght".
Et je présume qu'il faut changer aussi Cells(1.1) en Cells(1,1).

Reply

Marsh Posté le 06-10-2008 à 13:05:30    

Cool merci bcp olivthill ça marche.
 
Par contre tu saurais pas comment étendre ceci à bcp de feuilles excel : comptabiliser le nombre de fois que se répète un mot dans un fichier excel contenant plusieurs feuilles excel.

Reply

Marsh Posté le 06-10-2008 à 14:41:05    

Hello
 
Bon j'ai fait ca tres vite fait, dis moi si ca te convient :
 
C'est une fonction, tu peux donc mettre dans une cellule :
=trouveoccurence(A1)
et il te renverra combien de fois la valeur de A1 est dans ton fichier, tous onglets confondus.

Cordialement
 
[edit] a marche pas avec plus de 3 classeurs.[/edit]


Message édité par SuppotDeSaTante le 06-10-2008 à 15:39:22

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 06-10-2008 à 15:20:01    

merci dje69r, j'ai fait ce que t'as dit mais il m'écrit #NOM? dans la cellule où je met =TrouveOccurence(A1)

Reply

Marsh Posté le 06-10-2008 à 15:36:22    

Essai plutot cela, la premiere fonction ne marche pas.
 

Citation :

Sub TrouveOccurence()
ValeurCherchee = "toto"
 
 
Application.ScreenUpdating = False
Cpte = 0
For Each Sh In Worksheets
Sheets(Sh.Name).Select
 
With ActiveWorkbook.Worksheets(Sh.Name).Cells
Set Sch = .Find(CStr(ValeurCherchee), LookIn:=xlValues)
    If Not Sch Is Nothing Then
        firstAddress = Sch.Address
        Do
            Set Sch = .FindNext(Sch)
            Cpte = Cpte + 1
        Loop While Not Sch Is Nothing And Sch.Address <> firstAddress
    End If
 
End With
Next Sh
Application.ScreenUpdating = True
 
MsgBox Cpte
 
End Sub


 
Apparement le loop while ne passe en fonction... Si qqun a une idée...


Message édité par SuppotDeSaTante le 06-10-2008 à 15:37:19

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 07-10-2008 à 15:21:40    

Bonjour,
 
Si tu a besoin de ce chiffre uniquement pour savoir (pas d'utilisation dans une autre macro),
 
tu peux rechercher  
rechercher : mon mot
 
 
avec option classeur et en bas a gauche il te donne le nombre d'occurence
 

Reply

Marsh Posté le 07-10-2008 à 18:10:37    

Merci bcp pyrof et dje69r mais en fait la je cherche à compter le nombre de  lignes qui comportent mot1 et mot2 toujours sur un fichier de plusieurs feuilles excel, voila mon code mais j'arrive pas à le faire marcher ( ça beugue ) :
 
Sub TrouveOccurence()
ValeurCherchee = "raison"
ValeurCherchee2 = "UBSLLD"
 
 
Application.ScreenUpdating = False
Cpte = 0
For Each Sh In Worksheets
Sheets(Sh.Name).Select
 
With ActiveWorkbook.Worksheets(Sh.Name).Cells
Set Sch = .Find(CStr(ValeurCherchee), LookIn:=xlValues)
    If Not Sch Is Nothing Then
        firstAddress = Sch.Address
        Set Sch2 = .Find(CStr(ValeurCherchee2), LookIn:=xlValues, SearchOrder:=xlByRows)
        If Not Sch2 Is Nothing And Sch.Row = Sch2.Row Then Cpte = Cpte + 1
        Do
            Set Sch = .FindNext(Sch)
            Set Sch2 = .FindNext(Sch2)
        Loop While Not Sch Is Nothing And Sch.Address <> firstAddress
    End If
End With
Next Sh
Application.ScreenUpdating = True
 
MsgBox Cpte
 
End Sub

Reply

Marsh Posté le 07-10-2008 à 20:46:06    

Tu es sur du "ET" ?
C'est bien les cellules comportant le mot raison ET le mot UBSLLD ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 08-10-2008 à 07:54:53    

Bonjour,
 
Voici une macro  

Sub dudule()
 
mot1 = "toto"
mot2 = "tata"
 
cpte = 0
Dim tab1       'Crée une variable
Set tab1 = CreateObject("Scripting.Dictionary" )
'-------------------------------------------------------------
'recherche du mot1 et mémorisation feuille ligne
'-------------------------------------------------------------
For Each sh In Worksheets
    Sheets(sh.Name).Select
    With ActiveWorkbook.Worksheets(sh.Name).Cells
        Set sch = .Find(CStr(mot1), LookIn:=xlValues)
        If Not sch Is Nothing Then
            cle = sh.Name & "_l" & sch.Row
            tab1(cle) = 1 ' mémorise feuille, ligne
        End If
    End With
Next
'-------------------------------------------------------------
'recherche du mot2 et verification si existance du mot1
'-------------------------------------------------------------
For Each sh In Worksheets
    Sheets(sh.Name).Select
    With ActiveWorkbook.Worksheets(sh.Name).Cells
        Set sch = .Find(CStr(mot2), LookIn:=xlValues)
        If Not sch Is Nothing Then
            cle = sh.Name & "_l" & sch.Row
            If tab1.exists(cle) Then cpte = cpte + 1
        End If
    End With
Next
MsgBox cpte
End Sub


Reply

Marsh Posté le 08-10-2008 à 07:54:53   

Reply

Marsh Posté le 08-10-2008 à 10:36:31    

Bonjour Benji35,
as-tu beaucoup de lignes par feuille?

Reply

Marsh Posté le 08-10-2008 à 18:03:38    

merci pyrof mais en fait ça me donne le nombre de feuilles qui contiennent une ligne contenant mot1 et mot2 et moi je veux le nombre de lignes.
 
pour seniorpapou : oui pourquoi?
 
Merci à vous tous.

Reply

Marsh Posté le 08-10-2008 à 18:58:51    

SuppotDeSaTante a écrit :

Tu es sur du "ET" ?
C'est bien les cellules comportant le mot raison ET le mot UBSLLD ?


 
Et moi je pue ? :p  
 
Je vais chercher mon stick H24

Message cité 1 fois
Message édité par SuppotDeSaTante le 08-10-2008 à 18:59:34

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 08-10-2008 à 19:09:46    

SuppotDeSaTante a écrit :


 
Et moi je pue ? :p  
 
Je vais chercher mon stick H24


 
Excuse moi j'ai pas vu ton message, oui c'est bien ça c'est ces 2 mots.
 
Encore dsl et merci pour tes réponses.

Reply

Marsh Posté le 08-10-2008 à 19:55:18    

benji35 a écrit :

merci pyrof mais en fait ça me donne le nombre de feuilles qui contiennent une ligne contenant mot1 et mot2 et moi je veux le nombre de lignes.
 
pour seniorpapou : oui pourquoi?
 
Merci à vous tous.


parce qu'une solution existe en prenant en compte les lignes une par une et le traitement risque d'être long.
 
pour chaque feuille,  et pour chaque ligne de 1 à nblignes
 
selection ligne
 
with selection  
    .find ....mot1
if not is nothing.... then
      re selection de la ligne
      with selection
      .find  mot2  
      if not is nothing.... then
          cpte= cpte+1
end if
end if
 
désolé, pas trop le temps de l'écrire en détail

Reply

Marsh Posté le 08-10-2008 à 22:21:31    

Sub TrouveOccurence()
ValeurCherchee1 = "toto"
ValeurCherchee2 = "titi"
 
Application.ScreenUpdating = False
Cpte = 0
For x = 1 To 2
If x = 1 Then ValeurCherchee = ValeurCherchee1 & "*" & ValeurCherchee2
If x = 2 Then ValeurCherchee = ValeurCherchee2 & "*" & ValeurCherchee1
 
For Each Sh In Worksheets
Sheets(Sh.Name).Select
 
With ActiveWorkbook.Worksheets(Sh.Name).Cells
Set Sch = .Find(CStr(ValeurCherchee), LookIn:=xlValues)
    If Not Sch Is Nothing Then
        firstAddress = Sch.Address
        Do
            Set Sch = .FindNext(Sch)
            Cpte = Cpte + 1
        Loop While Not Sch Is Nothing And Sch.Address <> firstAddress
    End If
 
End With
Next Sh
Next x
Application.ScreenUpdating = True
 
MsgBox Cpte
 
End Sub
 
 
C'etait qd meme pas dur d'extrapoler le premier code en jouant avec les asterisques "*" .... :p
 
Cordialement


Message édité par SuppotDeSaTante le 08-10-2008 à 22:52:04

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 09-10-2008 à 10:41:22    

Bonjour,
si benj35 cherche le nombre de lignes qui comportent mot1 ET mot2 cela peut ressembler à ceci:
Sub Macro1()
ValeurCherchee = "raison"
ValeurCherchee2 = "UBSLLD"
Application.ScreenUpdating = False
cpte = 0
    For Each Sh In ActiveWorkbook.Sheets
    Sh.Select
    shn = Sh.Name
    ActiveCell.SpecialCells(xlLastCell).Select
  bout = Selection.Row
  For i = 1 To bout
  Sh.Cells(i, 1).Select
  Selection.EntireRow.Select
  With Selection
    Set Sch = .Find(CStr(ValeurCherchee), LookIn:=xlValues)
    If Not Sch Is Nothing Then
    Selection.EntireRow.Select
    With Selection
        Set Sch = .Find(CStr(ValeurCherchee2), LookIn:=xlValues)
        If Not Sch Is Nothing Then
            cpte = cpte + 1
        End If
        End With
    End If
    End With
    Next i
Next
Application.ScreenUpdating = true
MsgBox cpte
End Sub
 
Mais je ne suis pas certain d'avoir compris ce qu'il demande


Message édité par seniorpapou le 09-10-2008 à 10:42:02
Reply

Marsh Posté le 09-10-2008 à 12:13:14    

Merci à vous tous c'est vraiment très sympat pour un débutant en vba comme moi de trouver de l'aide d'expert comme vous, vraiment un grand merci à vous tous.
 
Seniorpapou c'est exactement ce que je veux et ça marche, merci.
 
J'aurais cependant qlqs questions :  
 
pour dje69r : le "*" dans If x = 1 Then ValeurCherchee = ValeurCherchee1 & "*" & ValeurCherchee2 veut dire quoi ( j'ai pas non plus ce que signifie cette ligne ) et je comprend pas non plus l'utilité de  : Application.ScreenUpdating = True.
 
Encore une fois merci bcp ( et si vous avez des conseils à me donner pour être aussi bon que vous en vba ce serait très sympat ).
 

Reply

Marsh Posté le 09-10-2008 à 13:17:44    

Je ne connais pas bien ce langage, mais j'ai l'impression que ça cherche la chaîne et non le "mot" (séparé par espaces ou en début ou en fin).
C'est ça ?

Reply

Marsh Posté le 10-10-2008 à 16:22:37    

benji35 a écrit :

Merci à vous tous c'est vraiment très sympat pour un débutant en vba comme moi de trouver de l'aide d'expert comme vous, vraiment un grand merci à vous tous.
 
Seniorpapou c'est exactement ce que je veux et ça marche, merci.
 
J'aurais cependant qlqs questions :  
 
pour dje69r : le "*" dans If x = 1 Then ValeurCherchee = ValeurCherchee1 & "*" & ValeurCherchee2 veut dire quoi ( j'ai pas non plus ce que signifie cette ligne ) et je comprend pas non plus l'utilité de  : Application.ScreenUpdating = True.
 
Encore une fois merci bcp ( et si vous avez des conseils à me donner pour être aussi bon que vous en vba ce serait très sympat ).
 


 
Bah tu as deux mots a trouvé dns une cellule, donc je prends les deux possibilité, un sens et dans l'autre, apres c'etait a consolider hein..
Pour le screenupdating appuis sur F1 ;)


---------------
Soyez malin, louez entre voisins !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed